From 6658f648e696712d5bca3083d613203fbb5ff2df Mon Sep 17 00:00:00 2001 From: "Shishkevich D." <135337715+shishkevichd@users.noreply.github.com> Date: Sat, 8 Mar 2025 09:54:41 +0700 Subject: [PATCH] refactor: move language manager to utils (#2735) --- web/assets/js/langs.js | 103 ----------------------------------- web/assets/js/util/index.js | 104 ++++++++++++++++++++++++++++++++++++ web/html/common/js.html | 1 - web/html/login.html | 6 +-- web/html/xui/settings.html | 8 +-- 5 files changed, 111 insertions(+), 111 deletions(-) delete mode 100644 web/assets/js/langs.js diff --git a/web/assets/js/langs.js b/web/assets/js/langs.js deleted file mode 100644 index 8681761c..00000000 --- a/web/assets/js/langs.js +++ /dev/null @@ -1,103 +0,0 @@ -const supportLangs = [ - { - name: "English", - value: "en-US", - icon: "🇺🇸", - }, - { - name: "فارسی", - value: "fa-IR", - icon: "🇮🇷", - }, - { - name: "简体中文", - value: "zh-CN", - icon: "🇨🇳", - }, - { - name: "繁體中文", - value: "zh-TW", - icon: "🇹🇼", - }, - { - name: "日本語", - value: "ja-JP", - icon: "🇯🇵", - }, - { - name: "Русский", - value: "ru-RU", - icon: "🇷🇺", - }, - { - name: "Tiếng Việt", - value: "vi-VN", - icon: "🇻🇳", - }, - { - name: "Español", - value: "es-ES", - icon: "🇪🇸", - }, - { - name: "Indonesian", - value: "id-ID", - icon: "🇮🇩", - }, - { - name: "Український", - value: "uk-UA", - icon: "🇺🇦", - }, - { - name: "Türkçe", - value: "tr-TR", - icon: "🇹🇷", - }, - { - name: "Português", - value: "pt-BR", - icon: "🇧🇷", - }, -]; - -function getLang() { - let lang = CookieManager.getCookie("lang"); - - if (!lang) { - if (window.navigator) { - lang = window.navigator.language || window.navigator.userLanguage; - - if (isSupportLang(lang)) { - CookieManager.setCookie("lang", lang, 150); - } else { - CookieManager.setCookie("lang", "en-US", 150); - window.location.reload(); - } - } else { - CookieManager.setCookie("lang", "en-US", 150); - window.location.reload(); - } - } - - return lang; -} - -function setLang(lang) { - if (!isSupportLang(lang)) { - lang = "en-US"; - } - - CookieManager.setCookie("lang", lang, 150); - window.location.reload(); -} - -function isSupportLang(lang) { - for (l of supportLangs) { - if (l.value === lang) { - return true; - } - } - - return false; -} diff --git a/web/assets/js/util/index.js b/web/assets/js/util/index.js index 8a6a4703..57a6b95d 100644 --- a/web/assets/js/util/index.js +++ b/web/assets/js/util/index.js @@ -669,4 +669,108 @@ class URLBuilder { return `${protocol}//${host}${port}${base}${path}`; } +} + +class LanguageManager { + static supportedLanguages = [ + { + name: "English", + value: "en-US", + icon: "🇺🇸", + }, + { + name: "فارسی", + value: "fa-IR", + icon: "🇮🇷", + }, + { + name: "简体中文", + value: "zh-CN", + icon: "🇨🇳", + }, + { + name: "繁體中文", + value: "zh-TW", + icon: "🇹🇼", + }, + { + name: "日本語", + value: "ja-JP", + icon: "🇯🇵", + }, + { + name: "Русский", + value: "ru-RU", + icon: "🇷🇺", + }, + { + name: "Tiếng Việt", + value: "vi-VN", + icon: "🇻🇳", + }, + { + name: "Español", + value: "es-ES", + icon: "🇪🇸", + }, + { + name: "Indonesian", + value: "id-ID", + icon: "🇮🇩", + }, + { + name: "Український", + value: "uk-UA", + icon: "🇺🇦", + }, + { + name: "Türkçe", + value: "tr-TR", + icon: "🇹🇷", + }, + { + name: "Português", + value: "pt-BR", + icon: "🇧🇷", + } + ] + + static getLanguage() { + let lang = CookieManager.getCookie("lang"); + + if (!lang) { + if (window.navigator) { + lang = window.navigator.language || window.navigator.userLanguage; + + if (LanguageManager.isSupportLanguage(lang)) { + CookieManager.setCookie("lang", lang, 150); + } else { + CookieManager.setCookie("lang", "en-US", 150); + window.location.reload(); + } + } else { + CookieManager.setCookie("lang", "en-US", 150); + window.location.reload(); + } + } + + return lang; + } + + static setLanguage(language) { + if (!LanguageManager.isSupportLanguage(language)) { + language = "en-US"; + } + + CookieManager.setCookie("lang", language, 150); + window.location.reload(); + } + + static isSupportLanguage(language) { + const languageFilter = LanguageManager.supportedLanguages.filter((lang) => { + return lang.value === language + }) + + return languageFilter.length > 0; + } } \ No newline at end of file diff --git a/web/html/common/js.html b/web/html/common/js.html index 2d93935f..1c2d64b3 100644 --- a/web/html/common/js.html +++ b/web/html/common/js.html @@ -7,7 +7,6 @@ -