diff options
Diffstat (limited to 'src/i18n/i18n.ts')
| -rw-r--r-- | src/i18n/i18n.ts | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts new file mode 100644 index 0000000..83ed3da --- /dev/null +++ b/src/i18n/i18n.ts @@ -0,0 +1,65 @@ +// languages.json build via CI build +// to generate for localhost/dev, run `build_i18n_json.sh` script +import * as languages from "./languages.json"; + +function getLangs() { + const langs = languages.language_metadata; + + Object.keys(languages).map((lang) => { + if (lang === "language_metadata" || lang == "steam_language_map") { + return; + } + const strs = languages[lang]; + if (lang && strs && langs[lang]?.name) { + langs[lang].strings = strs; + } + }); + + return langs; +} + +export const LANGS: { + [key: string]: { + name: string; + strings: { + [key: string]: string; + }; + }; +} = getLangs(); + +let cachedLang: string | undefined; + +export const getCurrentLanguage = (): string => { + if (cachedLang) return cachedLang; + + const lang = window.LocalizationManager.m_rgLocalesToUse[0]; + cachedLang = lang; + return lang; +}; + +export const getLanguageName = (lang?: string): string => { + const targetLang = lang || getCurrentLanguage(); + return LANGS[targetLang]?.name || targetLang; +}; + +/** + * Translate a key to the current language + * + * @param key - Translation key + * @param originalString - Original text (fallback) + * @returns Translated string or original text if translation not found + * + * @example + * t('CONTENT_FPS_MULTIPLIER', 'FPS Multiplier') + */ +const t = (key: string, originalString: string): string => { + const lang = getCurrentLanguage(); + + // English always returns the original text + if (lang === "en") return originalString; + + // Return translation if exists, otherwise return original text + return LANGS[lang]?.strings?.[key] ?? originalString; +}; + +export default t; |
