@elsikora/x-captcha-react
Version:
React components for X-Captcha service
127 lines (123 loc) • 4.16 kB
JavaScript
'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