optimize language handling for Chinese and plugin translations

This commit is contained in:
kurt
2025-09-05 12:38:16 +08:00
parent 35eb7c27a1
commit 528d488322
2 changed files with 49 additions and 9 deletions
+33 -8
View File
@@ -4,6 +4,7 @@ import {
cancelable,
Canceled,
CreateAccountContext,
LocaleDefinitions,
LoginContext,
PromptArgs,
PromptResponse,
@@ -14,7 +15,7 @@ import {
} from '@wharfkit/session'
import App from './ui/App.svelte'
import {makeLocalization} from './lib/translations'
import {makeLocalization, mapChineseLanguage} from './lib/translations'
import {
accountCreationContext,
@@ -44,11 +45,17 @@ export const defaultWebRendererOptions = {
minimal: false,
}
const getNavigatorLanguage = () =>
(navigator.languages && navigator.languages.length
? navigator.languages[0]
: navigator.language || 'en'
).split('-')[0]
const getNavigatorLanguage = () => {
const lang =
navigator.languages && navigator.languages.length
? navigator.languages[0]
: navigator.language || 'en'
let mainLang = lang.split('-')[0]
if ('zh' === mainLang) {
mainLang = mapChineseLanguage(lang)
}
return mainLang
}
export class WebRenderer extends AbstractUserInterface implements UserInterface {
static version = '__ver' // replaced by build script
@@ -323,8 +330,26 @@ export class WebRenderer extends AbstractUserInterface implements UserInterface
return this.i18n.t.get(key, options)
}
addTranslations(translations) {
this.i18n.addTranslations(translations)
addTranslations(translations: LocaleDefinitions) {
const normalizedTranslations = {}
const seenLanguages = new Set<string>()
for (const [lang, data] of Object.entries(translations)) {
if (!lang) {
this.log(`Skipping invalid language: empty or null`)
continue
}
let normalizedLang = lang
if (lang.startsWith('zh')) {
normalizedLang = mapChineseLanguage(lang)
}
if (!seenLanguages.has(normalizedLang)) {
normalizedTranslations[normalizedLang] = data
seenLanguages.add(normalizedLang)
} else {
this.log(`Skipping duplicate language: ${lang} (normalized to ${normalizedLang})`)
}
}
this.i18n.addTranslations(normalizedTranslations)
}
}
+16 -1
View File
@@ -12,12 +12,21 @@ import tr from './translations/tr/common.json'
const translations = {
en: {...lang, ...en},
ko: {...lang, ...ko},
zh: {...lang, ...zh_hans},
'zh-Hans': {...lang, ...zh_hans},
'zh-Hant': {...lang, ...zh_hant},
tr: {...lang, ...tr},
}
const ZH_LANGUAGE_MAPPINGS: Record<string, string> = {
zh: 'zh-Hans',
'zh-cn': 'zh-Hans',
'zh-sg': 'zh-Hans',
'zh-hans': 'zh-Hans',
'zh-tw': 'zh-Hant',
'zh-hk': 'zh-Hant',
'zh-hant': 'zh-Hant',
}
interface Params {
appName?: NameType
name?: NameType
@@ -43,4 +52,10 @@ export const makeLocalization = (options: UserInterfaceLocalizationOptions = {})
return new i18n(params)
}
export function mapChineseLanguage(lang: string): string {
if (!lang) return 'zh-Hans'
const lowerLang = lang.toLowerCase().trim()
return ZH_LANGUAGE_MAPPINGS[lowerLang] || 'zh-Hans'
}
export const {t, l, locales, locale, loadTranslations, setLocale} = new i18n(config)