Просмотр исходного кода

Added i18nUserSetting detector

Norio Suzuki 9 лет назад
Родитель
Сommit
2cbf500ee0
2 измененных файлов с 29 добавлено и 2 удалено
  1. 10 2
      lib/crowi/express-init.js
  2. 19 0
      lib/util/i18nUserSettingDetector.js

+ 10 - 2
lib/crowi/express-init.js

@@ -16,22 +16,29 @@ module.exports = function(crowi, app) {
     , i18nFsBackend  = require('i18next-node-fs-backend')
     , i18nSprintf    = require('i18next-sprintf-postprocessor')
     , i18nMiddleware = require('i18next-express-middleware')
+    , i18nUserSettingDetector  = require('../util/i18nUserSettingDetector')
     , env            = crowi.node_env
     , middleware     = require('../util/middlewares')
     ;
 
+  var lngDetector = new i18nMiddleware.LanguageDetector();
+  lngDetector.addDetector(i18nUserSettingDetector);
+
   i18next
-    .use(i18nMiddleware.LanguageDetector)
+    .use(lngDetector)
     .use(i18nFsBackend)
     .use(i18nSprintf)
     .init({
       fallbackLng: 'en',
+      whitelist: ['en', 'ja'],
       backend: {
         loadPath: 'locales/{{lng}}/translation.json'
       },
+      detection: {
+        order: ['userSettingDetector', 'header', 'navigator'],
+      },
       overloadTranslationOptionHandler: i18nSprintf.overloadTranslationOptionHandler
     });
-  app.use(i18nMiddleware.handle(i18next));
 
   app.use(function(req, res, next) {
     var now = new Date()
@@ -97,4 +104,5 @@ module.exports = function(crowi, app) {
 
   app.use(middleware.loginChecker(crowi, app));
 
+  app.use(i18nMiddleware.handle(i18next));
 };

+ 19 - 0
lib/util/i18nUserSettingDetector.js

@@ -0,0 +1,19 @@
+module.exports = {
+  name: 'userSettingDetector',
+
+  lookup: function(req, res, options) {
+    var language;
+
+    if ('user' in req && typeof req.user !== 'undefined' && req.user !== false) {
+      if ('language' in req.user) {
+        language = req.user.language;
+      }
+    }
+
+    return language;
+  },
+
+  cacheUserLanguage: function(req, res, lng, options) {
+    // nothing to do
+  }
+};