Skip to content

Commit e59d035

Browse files
authored
Automatically set translation according to browser settings (#615)
* Automatically set translation according to browser settings * Fix languages not saving properly
1 parent b8f4574 commit e59d035

File tree

10 files changed

+32
-11
lines changed

10 files changed

+32
-11
lines changed

common/webapp/public/lang/settings.conf

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
default: "en"
3+
useBrowserLanguage: true
34
languages: [
45
// remove the languages you don't need reorder them or add your own
56
{ locale: "cs", name: "Czech" }
@@ -11,22 +12,22 @@
1112
{ locale: "lv", name: "Latviešu" }
1213
{ locale: "hu", name: "Magyar" }
1314
{ locale: "nl", name: "Nederlands" }
14-
{ locale: "no_nb", name: "Norsk bokmål" }
15+
{ locale: "nb", name: "Norsk bokmål" }
1516
{ locale: "pl", name: "Polski" }
16-
{ locale: "pt_PT", name: "Português (Portugal)" }
17+
{ locale: "pt-PT", name: "Português (Portugal)" }
1718
{ locale: "ru", name: "Русский" }
18-
{ locale: "sr_latn", name: "Srpski (latinica)" }
19-
{ locale: "sr_cyrl", name: "Српски (ћирилица)" }
19+
{ locale: "sr-Latn-RS", name: "Srpski (latinica)" }
20+
{ locale: "sr-Cyrl-RS", name: "Српски (ћирилица)" }
2021
{ locale: "fi", name: "Suomi" }
2122
{ locale: "es", name: "Spanish" }
2223
{ locale: "sv", name: "Svenska" }
2324
{ locale: "tr", name: "Türkçe" }
2425
{ locale: "th", name: "ภาษาไทย" }
2526
{ locale: "ua", name: "Українська" }
2627
{ locale: "ja", name: "日本語" }
27-
{ locale: "zh_CN", name: "简体中文(中国大陆)" }
28-
{ locale: "zh_TW", name: "繁體中文(台灣)" }
29-
{ locale: "zh_HK", name: "繁體中文(香港特別行政區)" }
28+
{ locale: "zh-CN", name: "简体中文(中国大陆)" }
29+
{ locale: "zh-TW", name: "繁體中文(台灣)" }
30+
{ locale: "zh-HK", name: "繁體中文(香港特別行政區)" }
3031
{ locale: "ko", name: "한국어" }
3132
{ locale: "vi", name: "Tiếng Việt"}
3233
]

common/webapp/src/components/Menu/SettingsMenu.vue

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
<Group v-if="languages.length > 1" :title="$t('language.title')">
5353
<SimpleButton v-for="lang of languages" :key="lang.locale"
5454
:active="lang.locale === $i18n.locale"
55-
@action="changeLanguage(lang.locale); $bluemap.saveUserSettings();"
55+
@action="changeLanguage(lang.locale);"
5656
>{{lang.name}}</SimpleButton>
5757
</Group>
5858

@@ -117,8 +117,9 @@ name: "SettingsMenu",
117117
let f = parseFloat(value);
118118
return f === 0 ? this.$t("renderDistance.off") : f.toFixed(0);
119119
},
120-
changeLanguage(lang) {
121-
setLanguage(lang)
120+
async changeLanguage(lang) {
121+
await setLanguage(lang);
122+
this.$bluemap.saveUserSettings();
122123
}
123124
}
124125
}

common/webapp/src/i18n.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ export async function setLanguage(lang) {
3232

3333
export async function loadLanguageSettings() {
3434
let settings = await fetchHocon(`./lang/settings.conf`);
35+
let selectedLanguage = null;
36+
37+
if (settings.useBrowserLanguage) {
38+
const availableLanguages = settings.languages.map(lang => lang.locale);
39+
40+
for (let browserLanguage of navigator.languages) {
41+
selectedLanguage = availableLanguages.find(lang => lang === browserLanguage);
42+
if (selectedLanguage) break;
43+
44+
let baseBrowserLanguage = browserLanguage.split('-')[0];
45+
selectedLanguage = availableLanguages.find(lang => lang.startsWith(baseBrowserLanguage));
46+
if (selectedLanguage) break;
47+
}
48+
}
49+
50+
if (!selectedLanguage) {
51+
selectedLanguage = settings.default;
52+
}
53+
3554
i18n.languages = settings.languages;
36-
await setLanguage(settings.default);
55+
await setLanguage(selectedLanguage);
3756
}

0 commit comments

Comments
 (0)