Files
OmniRoute/tests/unit/cli-catalog-display-contract.test.ts
nguyenha935 4012bac41d fix(i18n): preserve remaining Vietnamese localization (#7935)
* fix(i18n): preserve remaining Vietnamese localization

* chore(quality): rebaseline file-size cap for 9 dashboard components (i18n wiring)

Restoring the Vietnamese localization on 9 dashboard components (useTranslations
wiring + t()/tc() call-site swaps for previously hardcoded strings) grows each
file by a small, irreducible amount. Bumps the frozen file-size-baseline.json
caps to match, with a justification entry per the project's own ratchet policy.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(i18n): wire weekday localization + add missing qwen CLI description

Two gaps left by this PR's own new contract tests, caught while
reconciling the branch against the release tip:

- CostOverviewTab.tsx added formatWeekdayLabel() but never called it;
  the Weekly Usage Pattern chart still showed raw English day
  abbreviations regardless of locale. Now maps weeklyPattern rows
  through it before handing them to WeeklyPatternCard.
- cliTools.toolDescriptions was missing an entry for "qwen" (a
  baseUrlSupport:"full" tool) in both en.json and vi.json, failing
  the PR's own cli-catalog-display-contract.test.ts.

Covered by the PR's existing tests/unit/dashboard-localization-contract.test.ts
and tests/unit/cli-catalog-display-contract.test.ts (both now pass).

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* i18n(vi): backfill the 4 proxySubscription keys #7299 added to en.json

#7299 (proxy subscriptions) merged while this branch was rebasing, adding
settings.proxySubscriptionsTab and settings.proxySubscription.error.{LOCAL_CORE_ENDPOINT_INVALID,
NEEDS_CORE_NOT_CONFIGURED,NO_USABLE_NODES} to en.json. This PR's own
i18n-vi-completeness contract asserts full en↔vi key parity, so the merge of the
current release tip surfaced them as missing. Adds the Vietnamese translations,
keeping the SS/VMess/Trojan/VLESS/SOCKS5 technical terms verbatim.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

---------

Co-authored-by: nguyenha935 <208228297+nguyenha935@users.noreply.github.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <diegosouza.pw@gmail.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Co-authored-by: nguyenha935 <nguyenha935@users.noreply.github.com>
2026-07-21 13:41:02 -03:00

36 lines
1.3 KiB
TypeScript

import assert from "node:assert/strict";
import { existsSync } from "node:fs";
import test from "node:test";
import en from "../../src/i18n/messages/en.json" with { type: "json" };
import vi from "../../src/i18n/messages/vi.json" with { type: "json" };
import { CLI_TOOLS } from "../../src/shared/constants/cliTools";
test("every CLI catalog image points to a bundled public asset", () => {
const missing = Object.values(CLI_TOOLS).flatMap((tool) =>
[tool.image, tool.imageLight, tool.imageDark]
.filter((asset): asset is string => Boolean(asset))
.filter((asset) => !existsSync(`public${asset}`))
.map((asset) => `${tool.id}: ${asset}`)
);
assert.deepEqual(missing, []);
});
test("every visible CLI catalog entry has English and Vietnamese descriptions", () => {
const visibleToolIds = Object.values(CLI_TOOLS)
.filter((tool) => tool.baseUrlSupport !== "none")
.map((tool) => tool.id);
const englishDescriptions = en.cliTools.toolDescriptions as Record<string, string>;
const vietnameseDescriptions = vi.cliTools.toolDescriptions as Record<string, string>;
assert.deepEqual(
visibleToolIds.filter((id) => !englishDescriptions[id]?.trim()),
[]
);
assert.deepEqual(
visibleToolIds.filter((id) => !vietnameseDescriptions[id]?.trim()),
[]
);
});