language-management-lib
Version:
A TypeScript library for managing language translations in applications with URL parameter support.
99 lines (98 loc) • 3.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SetLanguage = void 0;
class SetLanguage {
constructor(languages, defaultLanguage = "en") {
this.languages = languages;
this.defaultLanguage = defaultLanguage;
this.currentLanguage = this.getLanguageFromURL() || defaultLanguage;
}
getLanguageFromURL() {
if (typeof window !== "undefined") {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get("lng") || urlParams.get("language");
}
return null;
}
setLanguage(language, updateURL = true) {
if (this.languages[language]) {
this.currentLanguage = language;
if (updateURL && typeof window !== "undefined") {
const url = new URL(window.location.href);
url.searchParams.set("lng", language);
window.history.replaceState({}, "", url.toString());
}
}
else {
console.warn(`Language "${language}" not found. Available languages: ${Object.keys(this.languages).join(", ")}`);
}
}
translate(key) {
var _a, _b;
const translation = (_a = this.languages[this.currentLanguage]) === null || _a === void 0 ? void 0 : _a[key];
if (translation) {
return translation;
}
// Fallback to default language
const fallbackTranslation = (_b = this.languages[this.defaultLanguage]) === null || _b === void 0 ? void 0 : _b[key];
if (fallbackTranslation) {
return fallbackTranslation;
}
return key;
}
getCurrentLanguage() {
return this.currentLanguage;
}
getAvailableLanguages() {
return Object.keys(this.languages);
}
addTranslations(language, translations) {
if (!this.languages[language]) {
this.languages[language] = {};
}
this.languages[language] = Object.assign(Object.assign({}, this.languages[language]), translations);
}
getLanguageData() {
return this.languages;
}
setjson(jsonData, merge = false) {
try {
let parsedData;
if (typeof jsonData === "string") {
parsedData = JSON.parse(jsonData);
}
else {
parsedData = jsonData;
}
if (merge) {
for (const [language, translations] of Object.entries(parsedData)) {
if (!this.languages[language]) {
this.languages[language] = {};
}
this.languages[language] = Object.assign(Object.assign({}, this.languages[language]), translations);
}
}
else {
this.languages = parsedData;
}
}
catch (error) {
console.error("Failed to parse JSON data:", error);
throw new Error("Invalid JSON data provided to setjson method");
}
}
getjson(language) {
if (language) {
if (this.languages[language]) {
return JSON.stringify(this.languages[language], null, 2);
}
else {
console.warn(`Language "${language}" not found.`);
return JSON.stringify({}, null, 2);
}
}
return JSON.stringify(this.languages, null, 2);
}
}
exports.SetLanguage = SetLanguage;
exports.default = SetLanguage;