mirror of
https://github.com/wharfkit/web-renderer.git
synced 2026-07-21 17:03:31 +00:00
optimize language handling for Chinese and plugin translations
This commit is contained in:
+33
-8
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user