Yuki Takei 5 лет назад
Родитель
Сommit
9a845f81e2
2 измененных файлов с 38 добавлено и 4 удалено
  1. 28 3
      src/lib/util/locale-utils.js
  2. 10 1
      src/server/util/i18nUserSettingDetector.js

+ 28 - 3
src/lib/util/locale-utils.js

@@ -22,15 +22,40 @@ function listLocaleIds() {
 /**
 /**
  * List locales aliases
  * List locales aliases
  */
  */
-function listLocaleAliases() {
+function listLocaleMetadatas() {
   return listLocaleIds()
   return listLocaleIds()
-    .map(localeId => require(`@root/resource/locales/${localeId}/_conf.json`))
-    .filter(meta => meta.aliases != null)
+    .map(localeId => require(`../../../resource/locales/${localeId}/_conf.json`));
+}
+
+/**
+ * List locales aliases
+ */
+function listLocaleAliases() {
+  return listLocaleMetadatas()
     .map(meta => meta.aliases)
     .map(meta => meta.aliases)
     .flat();
     .flat();
 }
 }
 
 
+/**
+ * List locales aliases
+ */
+function getLocaleAliasToIdMap() {
+  const aliasToIdMap = {};
+
+  const metadatas = listLocaleMetadatas();
+
+  metadatas.forEach((meta) => {
+    meta.aliases.forEach((alias) => {
+      aliasToIdMap[alias] = meta.id;
+    });
+  });
+
+  return aliasToIdMap;
+}
+
 module.exports = {
 module.exports = {
   listLocaleIds,
   listLocaleIds,
+  listLocaleMetadatas,
   listLocaleAliases,
   listLocaleAliases,
+  getLocaleAliasToIdMap,
 };
 };

+ 10 - 1
src/server/util/i18nUserSettingDetector.js

@@ -1,3 +1,7 @@
+const { getLocaleAliasToIdMap } = require('@commons/util/locale-utils');
+
+const aliasToIdMap = getLocaleAliasToIdMap();
+
 module.exports = {
 module.exports = {
   name: 'userSettingDetector',
   name: 'userSettingDetector',
 
 
@@ -5,7 +9,12 @@ module.exports = {
     if (req.user == null) {
     if (req.user == null) {
       return null;
       return null;
     }
     }
-    return req.user.lang || null;
+
+    // convert alias to id for backward compatibility -- 2020.06.21 Yuki Takei
+    const { userLang } = req.user;
+    const convertedLocaleId = aliasToIdMap[userLang];
+
+    return convertedLocaleId || req.user.lang || null;
   },
   },
 
 
   cacheUserlanguage(req, res, lng, options) {
   cacheUserlanguage(req, res, lng, options) {