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 @@
-