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
'es': require('../../strings/es'), // Spanish
'ja': require('../../strings/ja'), // Japanese
'it': require('../../strings/it'), // Italian
'ar': require('../../strings/ar') as object, // Arabic
'cs': require('../../strings/cs') as object, // Czech
'da': require('../../strings/da') as object, // Danish
'de': require('../../strings/de') as object, // German
'fi': require('../../strings/fi') as object, // Finnish
'fr': require('../../strings/fr') as object, // French
'hu': require('../../strings/hu') as object, // Hungarian
'ko': require('../../strings/ko') as object, // Korean
'nl': require('../../strings/nl') as object, // Dutch
'no': require('../../strings/no') as object, // Norwegian Bokmål
'pl': require('../../strings/pl') as object, // Polish
'pt': require('../../strings/pt') as object, // Portuguese
'pt-BR': require('../../strings/pt-BR') as object, // Brazilian Portuguese
'ro': require('../../strings/ro') as object, // Romanian
'ru': require('../../strings/ru') as object, // Russian
'sv': require('../../strings/sv') as object, // Swedish
'tr': require('../../strings/tr') as object, // Turkish
'zh-Hans': require('../../strings/zh-Hans') as object, // Simplified Chinese
'zh-Hant': require('../../strings/zh-Hant') as object, // Traditional Chinese
'ar': require('../../strings/ar'), // Arabic
'cs': require('../../strings/cs'), // Czech
'da': require('../../strings/da'), // Danish
'de': require('../../strings/de'), // German
'fi': require('../../strings/fi'), // Finnish
'fr': require('../../strings/fr'), // French
'hu': require('../../strings/hu'), // Hungarian
'ko': require('../../strings/ko'), // Korean
'nl': require('../../strings/nl'), // Dutch
'no': require('../../strings/no'), // Norwegian Bokmål
'pl': require('../../strings/pl'), // Polish
'pt': require('../../strings/pt'), // Portuguese
'pt-BR': require('../../strings/pt-BR'), // Brazilian Portuguese
'ro': require('../../strings/ro'), // Romanian
'ru': require('../../strings/ru'), // Russian
'sv': require('../../strings/sv'), // Swedish
'tr': require('../../strings/tr'), // Turkish
'zh-Hans': require('../../strings/zh-Hans'), // Simplified Chinese
'zh-Hant': require('../../strings/zh-Hant'), // Traditional Chinese
}
export function $T(s: string, locale?: Intl.LocalesArgument): string {
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 {