feat(i18n): add Japanese (ja) locale (#1694)
* feat(i18n): add Japanese (ja) locale - Add packages/app/src/i18n/resources/ja.ts with 1287 keys matching en.ts - Register ja in i18next.ts, locales.ts (SupportedLocale, LANGUAGE_OPTIONS, SUPPORTED_LANGUAGES, LANGUAGE_NATIVE_NAMES, LANGUAGE_NAMES_BY_LOCALE, resolveSupportedLocale) - Add ja label key to all six existing locale files (ar, en, es, fr, ru, zh-CN) - Update locales.test.ts to cover ja in all relevant assertions Translation reviewed by Codex across four passes; terminology, placeholder parity, and naturalness confirmed clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(i18n): add ja to resources.test.ts and fix test descriptions - Import ja and add to key-parity, fallback-ratio, interpolation, and model-count assertions in resources.test.ts - Update test descriptions to say "all supported language(s)" instead of "UN official language(s)" (ja is not a UN official language) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add Japanese README (README.ja.md) Add README.ja.md translated from the English source, reviewed by Codex across two passes. Link it in the language navigation of README.md and README.zh-CN.md. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: apply oxfmt formatting to locales.ts and ja.ts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
70ea960153
commit
507345dbee
@@ -7,13 +7,14 @@ import {
|
||||
} from "./locales";
|
||||
|
||||
describe("parseAppLanguage", () => {
|
||||
it("accepts system and all UN official language locales", () => {
|
||||
expect(["system", "ar", "en", "es", "fr", "ru", "zh-CN"].map(parseAppLanguage)).toEqual([
|
||||
it("accepts system and all supported language locales", () => {
|
||||
expect(["system", "ar", "en", "es", "fr", "ja", "ru", "zh-CN"].map(parseAppLanguage)).toEqual([
|
||||
"system",
|
||||
"ar",
|
||||
"en",
|
||||
"es",
|
||||
"fr",
|
||||
"ja",
|
||||
"ru",
|
||||
"zh-CN",
|
||||
]);
|
||||
@@ -24,13 +25,14 @@ describe("parseAppLanguage", () => {
|
||||
expect(parseAppLanguage(null)).toBeNull();
|
||||
});
|
||||
|
||||
it("offers system plus the six UN official languages", () => {
|
||||
it("offers system plus all supported languages", () => {
|
||||
expect(LANGUAGE_OPTIONS.map((option) => option.value)).toEqual([
|
||||
"system",
|
||||
"ar",
|
||||
"en",
|
||||
"es",
|
||||
"fr",
|
||||
"ja",
|
||||
"ru",
|
||||
"zh-CN",
|
||||
]);
|
||||
@@ -81,15 +83,17 @@ describe("resolveSupportedLocale", () => {
|
||||
expect(resolveSupportedLocale("en", ["zh-CN"])).toBe("en");
|
||||
expect(resolveSupportedLocale("es", ["en-US"])).toBe("es");
|
||||
expect(resolveSupportedLocale("fr", ["en-US"])).toBe("fr");
|
||||
expect(resolveSupportedLocale("ja", ["en-US"])).toBe("ja");
|
||||
expect(resolveSupportedLocale("ru", ["en-US"])).toBe("ru");
|
||||
expect(resolveSupportedLocale("zh-CN", ["en-US"])).toBe("zh-CN");
|
||||
});
|
||||
|
||||
it("maps UN official system locales", () => {
|
||||
it("maps supported system locales", () => {
|
||||
expect(resolveSupportedLocale("system", ["ar-EG"])).toBe("ar");
|
||||
expect(resolveSupportedLocale("system", ["en-US"])).toBe("en");
|
||||
expect(resolveSupportedLocale("system", ["es-MX"])).toBe("es");
|
||||
expect(resolveSupportedLocale("system", ["fr-CA"])).toBe("fr");
|
||||
expect(resolveSupportedLocale("system", ["ja-JP"])).toBe("ja");
|
||||
expect(resolveSupportedLocale("system", ["ru-RU"])).toBe("ru");
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user