UNPKG

language-management-lib

Version:

A TypeScript library for managing language translations in applications with URL parameter support.

99 lines (98 loc) 3.53 kB
"use strict"; 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;