refactor: debuggable localization function

This commit is contained in:
xenticore
2025-04-29 00:50:25 -04:00
parent 6fdc6fd132
commit 726cc97b38

View File

@@ -1,32 +1,41 @@
const localizations: {[lang: string]: any} = { import { logDebug } from "./log";
const localizations: Record<string, object> = {
'en': require('../../strings/en'), // English 'en': require('../../strings/en'), // English
'es': require('../../strings/es'), // Spanish 'es': require('../../strings/es'), // Spanish
'ja': require('../../strings/ja'), // Japanese 'ja': require('../../strings/ja'), // Japanese
'it': require('../../strings/it'), // Italian 'it': require('../../strings/it'), // Italian
'ar': require('../../strings/ar') as object, // Arabic 'ar': require('../../strings/ar'), // Arabic
'cs': require('../../strings/cs') as object, // Czech 'cs': require('../../strings/cs'), // Czech
'da': require('../../strings/da') as object, // Danish 'da': require('../../strings/da'), // Danish
'de': require('../../strings/de') as object, // German 'de': require('../../strings/de'), // German
'fi': require('../../strings/fi') as object, // Finnish 'fi': require('../../strings/fi'), // Finnish
'fr': require('../../strings/fr') as object, // French 'fr': require('../../strings/fr'), // French
'hu': require('../../strings/hu') as object, // Hungarian 'hu': require('../../strings/hu'), // Hungarian
'ko': require('../../strings/ko') as object, // Korean 'ko': require('../../strings/ko'), // Korean
'nl': require('../../strings/nl') as object, // Dutch 'nl': require('../../strings/nl'), // Dutch
'no': require('../../strings/no') as object, // Norwegian Bokmål 'no': require('../../strings/no'), // Norwegian Bokmål
'pl': require('../../strings/pl') as object, // Polish 'pl': require('../../strings/pl'), // Polish
'pt': require('../../strings/pt') as object, // Portuguese 'pt': require('../../strings/pt'), // Portuguese
'pt-BR': require('../../strings/pt-BR') as object, // Brazilian Portuguese 'pt-BR': require('../../strings/pt-BR'), // Brazilian Portuguese
'ro': require('../../strings/ro') as object, // Romanian 'ro': require('../../strings/ro'), // Romanian
'ru': require('../../strings/ru') as object, // Russian 'ru': require('../../strings/ru'), // Russian
'sv': require('../../strings/sv') as object, // Swedish 'sv': require('../../strings/sv'), // Swedish
'tr': require('../../strings/tr') as object, // Turkish 'tr': require('../../strings/tr'), // Turkish
'zh-Hans': require('../../strings/zh-Hans') as object, // Simplified Chinese 'zh-Hans': require('../../strings/zh-Hans'), // Simplified Chinese
'zh-Hant': require('../../strings/zh-Hant') as object, // Traditional Chinese 'zh-Hant': require('../../strings/zh-Hant'), // Traditional Chinese
} }
export function $T(s: string, locale?: Intl.LocalesArgument): string { export function $T(s: string, locale?: Intl.LocalesArgument): string {
const code = locale ? locale.toString() : extractLocaleFromURL(document.URL) const code = locale ? locale.toString() : extractLocaleFromURL(document.URL)
return localizations.hasOwnProperty(code) ? (localizations[code as unknown as keyof object])[s] || s : s; if (code in localizations) {
const translation = localizations[code] as Record<string, string>;
const result = translation[s] ?? s;
logDebug(`Translating "${s}" to locale "${code}": ${result}`);
return result;
}
logDebug(`Untranslated string "${s}" in locale "${code}`);
return s;
} }
export function extractLocaleFromURL(url: string): string { export function extractLocaleFromURL(url: string): string {