Add Japanese locale (ja) support (#1810)

* Add Japanese locale (ja) support

- New: ja.ts with 2624 UI translation keys
- New: ja.settings.ts with 1789 settings translation keys
- Registered ja in runtime.ts (Locale type, LOCALES, LOCALE_LABEL_KEYS, normalizeLocale)
- Added ja-JP BCP-47 mapping in intl.ts
- Added JA_MESSAGES in bootstrap.ts
- Added ja to lazy-load dictionary map in store.ts
- Updated messages.test.ts with ja dictionary
- Added common.language.japanese to all 8 existing locale files

* fix(i18n): complete Japanese locale updates

* test(i18n): enforce locale key parity

* docs: add Japanese documentation

---------

Co-authored-by: yuchi0531 <yuchi0531@users.noreply.github.com>
Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
yuchi0531
2026-06-27 01:00:05 +03:00
committed by GitHub
co-authored by yuchi0531 Bohdan Triapitsyn
parent b384deb812
commit eb051f969e
58 changed files with 6509 additions and 58 deletions
+7 -3
View File
@@ -1,10 +1,10 @@
export type Locale = 'en' | 'fr' | 'zh-CN' | 'zh-TW' | 'uk' | 'es' | 'pt-BR' | 'ko' | 'pl';
export type Locale = 'en' | 'fr' | 'zh-CN' | 'zh-TW' | 'uk' | 'es' | 'pt-BR' | 'ko' | 'pl' | 'ja';
export const LOCALES = ['en', 'fr', 'zh-CN', 'zh-TW', 'uk', 'es', 'pt-BR', 'ko', 'pl'] as const satisfies readonly Locale[];
export const LOCALES = ['en', 'fr', 'zh-CN', 'zh-TW', 'uk', 'es', 'pt-BR', 'ko', 'pl', 'ja'] as const satisfies readonly Locale[];
export const DEFAULT_LOCALE: Locale = 'en';
export const LOCALE_LABEL_KEYS: Record<Locale, 'common.language.english' | 'common.language.french' | 'common.language.simplifiedChinese' | 'common.language.traditionalChinese' | 'common.language.ukrainian' | 'common.language.spanish' | 'common.language.brazilianPortuguese' | 'common.language.korean' | 'common.language.polish'> = {
export const LOCALE_LABEL_KEYS: Record<Locale, 'common.language.english' | 'common.language.french' | 'common.language.simplifiedChinese' | 'common.language.traditionalChinese' | 'common.language.ukrainian' | 'common.language.spanish' | 'common.language.brazilianPortuguese' | 'common.language.korean' | 'common.language.polish' | 'common.language.japanese'> = {
en: 'common.language.english',
fr: 'common.language.french',
'zh-CN': 'common.language.simplifiedChinese',
@@ -14,6 +14,7 @@ export const LOCALE_LABEL_KEYS: Record<Locale, 'common.language.english' | 'comm
'pt-BR': 'common.language.brazilianPortuguese',
ko: 'common.language.korean',
pl: 'common.language.polish',
ja: 'common.language.japanese',
};
export const LOCALE_STORAGE_KEY = 'openchamber.i18n.v1';
@@ -55,6 +56,9 @@ export function normalizeLocale(value: string | undefined | null): Locale {
if (normalized === 'ko' || normalized.startsWith('ko-')) {
return 'ko';
}
if (normalized === 'ja' || normalized.startsWith('ja-')) {
return 'ja';
}
if (normalized === 'pl' || normalized.startsWith('pl-')) {
return 'pl';
}