Jelajahi Sumber

Move en,jp => en_US,ja_JP

Sotaro KARASAWA 9 tahun lalu
induk
melakukan
282e95bc58

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

@@ -18,6 +18,8 @@ module.exports = function(crowi, app) {
     , i18nUserSettingDetector  = require('../util/i18nUserSettingDetector')
     , i18nUserSettingDetector  = require('../util/i18nUserSettingDetector')
     , env            = crowi.node_env
     , env            = crowi.node_env
     , middleware     = require('../util/middlewares')
     , middleware     = require('../util/middlewares')
+
+    , User = crowi.model('User')
     ;
     ;
 
 
   var lngDetector = new i18nMiddleware.LanguageDetector();
   var lngDetector = new i18nMiddleware.LanguageDetector();
@@ -28,8 +30,8 @@ module.exports = function(crowi, app) {
     .use(i18nFsBackend)
     .use(i18nFsBackend)
     .use(i18nSprintf)
     .use(i18nSprintf)
     .init({
     .init({
-      fallbackLng: 'en',
-      whitelist: ['en', 'ja'],
+      fallbackLng: User.LANG_EN_US,
+      whitelist: Object.keys(User.getLanguageLabels()).map((k) => User[k]),
       backend: {
       backend: {
         loadPath: 'locales/{{lng}}/translation.json'
         loadPath: 'locales/{{lng}}/translation.json'
       },
       },
@@ -65,6 +67,7 @@ module.exports = function(crowi, app) {
     res.locals.consts   = {
     res.locals.consts   = {
         pageGrants: Page.getGrantLabels(),
         pageGrants: Page.getGrantLabels(),
         userStatus: User.getUserStatusLabels(),
         userStatus: User.getUserStatusLabels(),
+        language:   User.getLanguageLabels(),
         registrationMode: Config.getRegistrationModeLabels(),
         registrationMode: Config.getRegistrationModeLabels(),
     };
     };
 
 

+ 1 - 1
lib/form/me/user.js

@@ -6,5 +6,5 @@ var form = require('express-form')
 module.exports = form(
 module.exports = form(
   field('userForm.name').trim().required(),
   field('userForm.name').trim().required(),
   field('userForm.email').trim().isEmail().required(),
   field('userForm.email').trim().isEmail().required(),
-  field('userForm.language').required()
+  field('userForm.lang').required()
 );
 );

+ 31 - 11
lib/models/user.js

@@ -13,6 +13,10 @@ module.exports = function(crowi) {
     , STATUS_INVITED    = 5
     , STATUS_INVITED    = 5
     , USER_PUBLIC_FIELDS = '_id image googleId name username email introduction status createdAt admin' // TODO: どこか別の場所へ...
     , USER_PUBLIC_FIELDS = '_id image googleId name username email introduction status createdAt admin' // TODO: どこか別の場所へ...
 
 
+    , LANG_EN_US = 'en_US'
+    , LANG_EN_GB = 'en_GB'
+    , LANG_JA_JP = 'ja_JP'
+
     , PAGE_ITEMS        = 50
     , PAGE_ITEMS        = 50
 
 
     , userEvent = crowi.event('user')
     , userEvent = crowi.event('user')
@@ -29,7 +33,11 @@ module.exports = function(crowi) {
     introduction: { type: String },
     introduction: { type: String },
     password: String,
     password: String,
     apiToken: String,
     apiToken: String,
-    language: {type: String, enum: ['en', 'ja'], default: 'en'},
+    lang: {
+      type: String,
+      enum: Object.keys(getLanguageLabels()).map((k) => eval(k)),
+      default: LANG_EN_US
+    },
     status: { type: Number, required: true, default: STATUS_ACTIVE, index: true  },
     status: { type: Number, required: true, default: STATUS_ACTIVE, index: true  },
     createdAt: { type: Date, default: Date.now },
     createdAt: { type: Date, default: Date.now },
     admin: { type: Boolean, default: 0, index: true  }
     admin: { type: Boolean, default: 0, index: true  }
@@ -85,6 +93,14 @@ module.exports = function(crowi) {
     return hasher.digest('base64');
     return hasher.digest('base64');
   }
   }
 
 
+  function getLanguageLabels() {
+    var lang = {};
+    lang.LANG_EN_US = LANG_EN_US;
+    lang.LANG_JA_JP = LANG_EN_US;
+
+    return lang;
+  }
+
   userSchema.methods.isPasswordSet = function() {
   userSchema.methods.isPasswordSet = function() {
     if (this.password) {
     if (this.password) {
       return true;
       return true;
@@ -108,10 +124,10 @@ module.exports = function(crowi) {
     return false;
     return false;
   };
   };
 
 
-  userSchema.methods.update = function(name, email, language, callback) {
+  userSchema.methods.update = function(name, email, lang, callback) {
     this.name = name;
     this.name = name;
     this.email = email;
     this.email = email;
-    this.language = language;
+    this.lang = lang;
 
 
     this.save(function(err, userData) {
     this.save(function(err, userData) {
       return callback(err, userData);
       return callback(err, userData);
@@ -235,6 +251,7 @@ module.exports = function(crowi) {
     });
     });
   };
   };
 
 
+  userSchema.statics.getLanguageLabels = getLanguageLabels;
   userSchema.statics.getUserStatusLabels = function() {
   userSchema.statics.getUserStatusLabels = function() {
     var userStatus = {};
     var userStatus = {};
     userStatus[STATUS_REGISTERED] = '承認待ち';
     userStatus[STATUS_REGISTERED] = '承認待ち';
@@ -615,7 +632,7 @@ module.exports = function(crowi) {
     );
     );
   };
   };
 
 
-  userSchema.statics.createUserByEmailAndPassword = function(name, username, email, password, language, callback) {
+  userSchema.statics.createUserByEmailAndPassword = function(name, username, email, password, lang, callback) {
     var User = this
     var User = this
       , newUser = new User();
       , newUser = new User();
 
 
@@ -623,7 +640,7 @@ module.exports = function(crowi) {
     newUser.username = username;
     newUser.username = username;
     newUser.email = email;
     newUser.email = email;
     newUser.setPassword(password);
     newUser.setPassword(password);
-    newUser.language = language;
+    newUser.lang = lang;
     newUser.createdAt = Date.now();
     newUser.createdAt = Date.now();
     newUser.status = decideUserStatusOnRegistration();
     newUser.status = decideUserStatusOnRegistration();
 
 
@@ -651,13 +668,16 @@ module.exports = function(crowi) {
   };
   };
 
 
 
 
-  userSchema.statics.STATUS_REGISTERED = STATUS_REGISTERED;
-  userSchema.statics.STATUS_ACTIVE = STATUS_ACTIVE;
-  userSchema.statics.STATUS_SUSPENDED = STATUS_SUSPENDED;
-  userSchema.statics.STATUS_DELETED = STATUS_DELETED;
-  userSchema.statics.STATUS_INVITED = STATUS_INVITED;
+  userSchema.statics.STATUS_REGISTERED  = STATUS_REGISTERED;
+  userSchema.statics.STATUS_ACTIVE      = STATUS_ACTIVE;
+  userSchema.statics.STATUS_SUSPENDED   = STATUS_SUSPENDED;
+  userSchema.statics.STATUS_DELETED     = STATUS_DELETED;
+  userSchema.statics.STATUS_INVITED     = STATUS_INVITED;
   userSchema.statics.USER_PUBLIC_FIELDS = USER_PUBLIC_FIELDS;
   userSchema.statics.USER_PUBLIC_FIELDS = USER_PUBLIC_FIELDS;
-  userSchema.statics.PAGE_ITEMS = PAGE_ITEMS;
+  userSchema.statics.PAGE_ITEMS         = PAGE_ITEMS;
+
+  userSchema.statics.LANG_EN_US         = LANG_EN_US;
+  userSchema.statics.LANG_JA_JP         = LANG_JA_JP;
 
 
   return mongoose.model('User', userSchema);
   return mongoose.model('User', userSchema);
 };
 };

+ 2 - 2
lib/routes/login.js

@@ -129,7 +129,7 @@ module.exports = function(crowi, app) {
 
 
   actions.register = function(req, res) {
   actions.register = function(req, res) {
     var googleAuth = require('../util/googleAuth')(config);
     var googleAuth = require('../util/googleAuth')(config);
-    var language = req.language || 'en';
+    var lang= req.lang|| User.LANG_EN_US;
 
 
     // ログイン済みならさようなら
     // ログイン済みならさようなら
     if (req.user) {
     if (req.user) {
@@ -174,7 +174,7 @@ module.exports = function(crowi, app) {
           return res.redirect('/register');
           return res.redirect('/register');
         }
         }
 
 
-        User.createUserByEmailAndPassword(name, username, email, password, language, function(err, userData) {
+        User.createUserByEmailAndPassword(name, username, email, password, lang, function(err, userData) {
           if (err) {
           if (err) {
             req.flash('registerWarningMessage', 'ユーザー登録に失敗しました。');
             req.flash('registerWarningMessage', 'ユーザー登録に失敗しました。');
             return res.redirect('/register');
             return res.redirect('/register');

+ 3 - 3
lib/routes/me.js

@@ -82,14 +82,14 @@ module.exports = function(crowi, app) {
     if (req.method == 'POST' && req.form.isValid) {
     if (req.method == 'POST' && req.form.isValid) {
       var name = userForm.name;
       var name = userForm.name;
       var email = userForm.email;
       var email = userForm.email;
-      var language = userForm.language;
+      var lang= userForm.lang;
 
 
       if (!User.isEmailValid(email)) {
       if (!User.isEmailValid(email)) {
         req.form.errors.push('このメールアドレスは登録できません。(ホワイトリストなどを確認してください)');
         req.form.errors.push('このメールアドレスは登録できません。(ホワイトリストなどを確認してください)');
         return res.render('me/index', {});
         return res.render('me/index', {});
       }
       }
 
 
-      userData.update(name, email, language, function(err, userData) {
+      userData.update(name, email, lang, function(err, userData) {
         if (err) {
         if (err) {
           for (var e in err.errors) {
           for (var e in err.errors) {
             if (err.errors.hasOwnProperty(e)) {
             if (err.errors.hasOwnProperty(e)) {
@@ -99,7 +99,7 @@ module.exports = function(crowi, app) {
           return res.render('me/index', {});
           return res.render('me/index', {});
         }
         }
 
 
-        req.i18n.changeLanguage(language);
+        req.i18n.changeLanguage(lang);
         req.flash('successMessage', req.t('Updated'));
         req.flash('successMessage', req.t('Updated'));
         return res.redirect('/me');
         return res.redirect('/me');
       });
       });

+ 5 - 5
lib/util/i18nUserSettingDetector.js

@@ -2,18 +2,18 @@ module.exports = {
   name: 'userSettingDetector',
   name: 'userSettingDetector',
 
 
   lookup: function(req, res, options) {
   lookup: function(req, res, options) {
-    var language;
+    var lang;
 
 
     if (req.user) {
     if (req.user) {
-      if ('language' in req.user) {
-        language = req.user.language;
+      if ('lang' in req.user) {
+        lang = req.user.lang;
       }
       }
     }
     }
 
 
-    return language;
+    return lang;
   },
   },
 
 
-  cacheUserLanguage: function(req, res, lng, options) {
+  cacheUserlanguage: function(req, res, lng, options) {
     // nothing to do
     // nothing to do
   }
   }
 };
 };

+ 4 - 4
lib/views/me/index.html

@@ -82,11 +82,11 @@
           </p>
           </p>
           {% endif %}
           {% endif %}
         </div>
         </div>
-        <div class="form-group {% if not user.language %}has-error{% endif %}">
-          <label for="userForm[language]" class="col-sm-2 control-label">{{ t('Language') }}</label>
+        <div class="form-group {% if not user.lang %}has-error{% endif %}">
+          <label for="userForm[lang]" class="col-sm-2 control-label">{{ t('lang') }}</label>
           <div class="col-sm-4 radio">
           <div class="col-sm-4 radio">
-            <label><input type="radio" name="userForm[language]" value="en" {% if user.language == "en" %}checked="checked"{% endif %}>{{ t('English') }}</label>
-            <label><input type="radio" name="userForm[language]" value="ja" {% if user.language == "ja" %}checked="checked"{% endif %}>{{ t('Japanese') }}</label>
+            <label><input type="radio" name="userForm[lang]" value="en" {% if user.lang == consts.LANG_EN_US %}checked="checked"{% endif %}>{{ t('English') }}</label>
+            <label><input type="radio" name="userForm[lang]" value="ja" {% if user.lang == consts.LANG_JA_JP %}checked="checked"{% endif %}>{{ t('Japanese') }}</label>
           </div>
           </div>
           <div class="col-sm-offset-2 col-sm-10">
           <div class="col-sm-offset-2 col-sm-10">
           </div>
           </div>

+ 0 - 0
locales/en/translation.json → locales/en_US/translation.json


+ 0 - 0
locales/ja/translation.json → locales/ja_JP/translation.json