itizawa 4 лет назад
Родитель
Сommit
76cd4e9b16

+ 2 - 1
resource/locales/en_US/meta.json

@@ -1,4 +1,5 @@
 {
 {
   "id": "en_US",
   "id": "en_US",
-  "displayName": "English"
+  "displayName": "English",
+  "browserLanguageId":"en"
 }
 }

+ 2 - 1
resource/locales/ja_JP/meta.json

@@ -1,4 +1,5 @@
 {
 {
   "id": "ja_JP",
   "id": "ja_JP",
-  "displayName": "日本語"
+  "displayName": "日本語",
+  "browserLanguageId":"ja"
 }
 }

+ 2 - 1
resource/locales/zh_CN/meta.json

@@ -1,4 +1,5 @@
 {
 {
 	"id": "zh_CN",
 	"id": "zh_CN",
-	"displayName": "简体中文"
+	"displayName": "简体中文",
+  "browserLanguageId":"zh"
 }
 }

+ 16 - 10
src/client/js/util/LanguageConverter.js

@@ -1,3 +1,5 @@
+import locales from '@root/resource/locales';
+
 class LanguageConverter {
 class LanguageConverter {
 
 
   constructor(langDetector) {
   constructor(langDetector) {
@@ -6,18 +8,22 @@ class LanguageConverter {
 
 
     this.langDetector = langDetector;
     this.langDetector = langDetector;
   }
   }
-  //  browserLanguageIdMapping = {
-  //   zh: 'zh_CN',
-  //   ja: 'ja_JP',
-  //   en: 'en_US',
-  // };
 
 
   detect() {
   detect() {
-    const lang = this.langDetector.detect(['userSettingDetector', 'querystring']);
-    // detect id from browserLanguageIdMapping
-    // return browserLanguageIdMapping[found.find(v => Object.keys(browserLanguageIdMapping).includes(v))];
-
-    return lang;
+    const lang = this.langDetector.detect(['userSettingDetector', 'navigator', 'querystring']);
+
+    if (lang == null) {
+      return;
+    }
+
+    const browserLanguageIdMapping = {};
+    Object.values(locales).forEach((locale) => {
+      browserLanguageIdMapping[locale.meta.browserLanguageId] = locale.meta.id;
+    });
+    if (Object.values(browserLanguageIdMapping).includes(lang)) {
+      return lang;
+    }
+    return browserLanguageIdMapping[lang];
   }
   }
 
 
   init(services, options = {}, i18nOptions = {}) {
   init(services, options = {}, i18nOptions = {}) {