【问题标题】:can not detect current language (i18next.language) from handlebar helper?无法从车把助手中检测到当前语言(i18next.language)?
【发布时间】:2017-05-24 21:35:38
【问题描述】:

我正在为多语言解决方案使用以下软件包。

var i18next = 要求('i18next');

var i18nFsBackend = require('i18next-node-fs-backend');

var i18nMiddleware = require('i18next-express-middleware');

因为我使用handlebar 作为我的nodejs 模板引擎,所以我不能直接在HTML 中使用i18next t('key')。 所以我创建了一个车把助手,如下所示

     ```javascript
     var i18next = require('i18next');
     handlebars.registerHelper('t', function(i18n_key) {
         console.log(i18next.language)// always undefined, so i18next.t(i18n_key) always return default translation.   
         var result = i18next.t(i18n_key);
         return new handlebars.SafeString(result);
     });
     ```

但是,问题是函数无法检测到语言更改

我的解决方法

app.js

    ```javascript
    var i18nextInitCallback = function(error, t){

        handlebars.registerHelper('t', function(i18n_key) {

            if(app.locals.language !== i18next.language){
                i18next.changeLanguage(app.locals.language);
            }

            var result = i18next.t(i18n_key);
            return new handlebars.SafeString(result);
        });
    };
    ```

路线

    ```javascript
    router.use(function(req, res, next){
        res.locals.lng = req.language;
        res.app.locals.language = req.language;
        next();
    });

    ```

如您所见,在路线上我分配 res.app.locals.language = req.language; 然后在车把辅助函数中,我使用 app.locals.language 获取当前语言并使用 i18next.changeLanguage() 更改语言。

它奏效了。

我想知道我做得对不对? 或者是否有更好的解决方案

【问题讨论】:

    标签: javascript node.js express i18next express-handlebars


    【解决方案1】:

    使用中间件的句柄函数:

    app.use(middleware.handle(i18next, {
      // options
    }));
    

    res.language 已经为您设置好了,并且 t 函数已固定为该请求的用户语言。

    见:https://github.com/i18next/i18next-express-middleware/blob/master/src/index.js#L48

    查看车把示例:https://github.com/i18next/i18next-express-middleware/tree/master/examples/basic-handlebars

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 2013-02-05
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      相关资源
      最近更新 更多