gpt4 book ai didi

javascript - 无法从 Handlebars 助手检测到当前语言(i18next.language)?

转载 作者:行者123 更新时间:2023-12-03 04:15:46 26 4
gpt4 key购买 nike

我正在使用以下包来实现多语言解决方案。

var i18next = require('i18next');

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

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

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

     ```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;然后在 Handlebars 辅助函数中,我使用 app.locals.language 获取当前语言并使用 i18next.changeLanguage() 更改语言。

并且成功了。

我想知道我这样做是否正确?或者是否有更好的解决方案

最佳答案

使用中间件的handle函数:

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

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

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

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

关于javascript - 无法从 Handlebars 助手检测到当前语言(i18next.language)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44148164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com