UNPKG

@elsikora/x-captcha-react

Version:

React components for X-Captcha service

127 lines (123 loc) 4.16 kB
'use strict'; var language_enum = require('../enum/language.enum.js'); var index = require('./translations/index.js'); /** * Creates a translation function for the specified language * @param {ELanguage | string} lang The language to use * @returns {TTranslateFunction} A function that translates keys to the specified language */ function createTranslator(lang) { // Normalize the language string to match our enum const normalizedLang = lang.toLowerCase(); // Get the translation dictionary for the language or fall back to English const dictionary = index.translations[normalizedLang] || index.translations[language_enum.ELanguage.EN]; // Return a function that looks up keys in the dictionary return (key) => { return dictionary[key] || index.translations[language_enum.ELanguage.EN][key] || key; }; } /** * Detects the user's preferred language from the browser * @returns {ELanguage} The detected language code or fallback to English */ function detectLanguage() { if (globalThis.window == undefined) { return language_enum.ELanguage.EN; // Default to English in non-browser environments } // Get browser language // eslint-disable-next-line @elsikora/node/no-unsupported-features/node-builtins const browserLang = navigator.language.toLowerCase(); // Check if it starts with any of our supported languages if (browserLang.startsWith("ar")) { return language_enum.ELanguage.AR; } if (browserLang.startsWith("bg")) { return language_enum.ELanguage.BG; } if (browserLang.startsWith("cs")) { return language_enum.ELanguage.CS; } if (browserLang.startsWith("da")) { return language_enum.ELanguage.DA; } if (browserLang.startsWith("de")) { return language_enum.ELanguage.DE; } if (browserLang.startsWith("el")) { return language_enum.ELanguage.EL; } if (browserLang.startsWith("es")) { return language_enum.ELanguage.ES; } if (browserLang.startsWith("fi")) { return language_enum.ELanguage.FI; } if (browserLang.startsWith("fr")) { return language_enum.ELanguage.FR; } if (browserLang.startsWith("he")) { return language_enum.ELanguage.HE; } if (browserLang.startsWith("hi")) { return language_enum.ELanguage.HI; } if (browserLang.startsWith("hu")) { return language_enum.ELanguage.HU; } if (browserLang.startsWith("id")) { return language_enum.ELanguage.ID; } if (browserLang.startsWith("it")) { return language_enum.ELanguage.IT; } if (browserLang.startsWith("ja")) { return language_enum.ELanguage.JA; } if (browserLang.startsWith("ko")) { return language_enum.ELanguage.KO; } if (browserLang.startsWith("nl")) { return language_enum.ELanguage.NL; } if (browserLang.startsWith("no")) { return language_enum.ELanguage.NO; } if (browserLang.startsWith("pl")) { return language_enum.ELanguage.PL; } if (browserLang.startsWith("pt")) { return language_enum.ELanguage.PT; } if (browserLang.startsWith("ro")) { return language_enum.ELanguage.RO; } if (browserLang.startsWith("ru")) { return language_enum.ELanguage.RU; } if (browserLang.startsWith("sk")) { return language_enum.ELanguage.SK; } if (browserLang.startsWith("sv")) { return language_enum.ELanguage.SV; } if (browserLang.startsWith("th")) { return language_enum.ELanguage.TH; } if (browserLang.startsWith("tr")) { return language_enum.ELanguage.TR; } if (browserLang.startsWith("uk")) { return language_enum.ELanguage.UK; } if (browserLang.startsWith("vi")) { return language_enum.ELanguage.VI; } if (browserLang.startsWith("zh")) { return language_enum.ELanguage.ZH; } // Default to English return language_enum.ELanguage.EN; } exports.createTranslator = createTranslator; exports.detectLanguage = detectLanguage; //# sourceMappingURL=i18n.js.map