Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--web/assets/js/langs.js103
-rw-r--r--web/assets/js/util/index.js104
-rw-r--r--web/html/common/js.html1
-rw-r--r--web/html/login.html6
-rw-r--r--web/html/xui/settings.html8
5 files changed, 111 insertions, 111 deletions
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 @@
<script src="{{ .base_path }}assets/js/axios-init.js?{{ .cur_ver }}"></script>
<script src="{{ .base_path }}assets/js/util/date-util.js?{{ .cur_ver }}"></script>
<script src="{{ .base_path }}assets/js/util/index.js?{{ .cur_ver }}"></script>
-<script src="{{ .base_path }}assets/js/langs.js"></script>
<script>
const basePath = '{{ .base_path }}';
axios.defaults.baseURL = basePath;
diff --git a/web/html/login.html b/web/html/login.html
index 717adc56..82c9afd5 100644
--- a/web/html/login.html
+++ b/web/html/login.html
@@ -449,9 +449,9 @@
<a-row justify="center" class="centered">
<a-col :span="24">
<a-select ref="selectLang" v-model="lang"
- @change="setLang(lang)" style="width: 200px;"
+ @change="LanguageManager.setLanguage(lang)" style="width: 200px;"
:dropdown-class-name="themeSwitcher.currentTheme">
- <a-select-option :value="l.value" label="English" v-for="l in supportLangs">
+ <a-select-option :value="l.value" label="English" v-for="l in LanguageManager.supportedLanguages">
<span role="img" aria-label="l.name" v-text="l.icon"></span>
&nbsp;&nbsp;<span v-text="l.name"></span>
</a-select-option>
@@ -493,7 +493,7 @@
lang: ""
},
async created() {
- this.lang = getLang();
+ this.lang = LanguageManager.getLanguage();
this.secretEnable = await this.getSecretStatus();
},
methods: {
diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html
index 58a1bf8a..e8fa7e11 100644
--- a/web/html/xui/settings.html
+++ b/web/html/xui/settings.html
@@ -179,10 +179,10 @@
<template #control>
<a-select ref="selectLang"
v-model="lang"
- @change="setLang(lang)"
+ @change="LanguageManager.setLanguage(lang)"
:dropdown-class-name="themeSwitcher.currentTheme"
style="width: 100%">
- <a-select-option :value="l.value" :label="l.value" v-for="l in supportLangs">
+ <a-select-option :value="l.value" :label="l.value" v-for="l in LanguageManager.supportedLanguages">
<span role="img" :aria-label="l.name" v-text="l.icon"></span> &nbsp;&nbsp; <span v-text="l.name"></span>
</a-select-option>
</a-select>
@@ -344,7 +344,7 @@
<template #title>{{ i18n "pages.settings.telegramBotLanguage"}}</template>
<template #control>
<a-select ref="selectBotLang" v-model="allSetting.tgLang" :dropdown-class-name="themeSwitcher.currentTheme" style="width: 100%">
- <a-select-option :value="l.value" :label="l.value" v-for="l in supportLangs">
+ <a-select-option :value="l.value" :label="l.value" v-for="l in LanguageManager.supportedLanguages">
<span role="img" :aria-label="l.name" v-text="l.icon"></span> &nbsp;&nbsp; <span v-text="l.name"></span>
</a-select-option>
</a-select>
@@ -672,7 +672,7 @@
allSetting: new AllSetting(),
saveBtnDisable: true,
user: {},
- lang: getLang(),
+ lang: LanguageManager.getLanguage(),
remarkModels: { i: 'Inbound', e: 'Email', o: 'Other' },
remarkSeparators: [' ', '-', '_', '@', ':', '~', '|', ',', '.', '/'],
datepickerList: [{ name: 'Gregorian (Standard)', value: 'gregorian' }, { name: 'Jalalian (شمسی)', value: 'jalalian' }],