【问题标题】:Language getting detected but translation not working with i18n检测到语言但翻译不适用于 i18n
【发布时间】:2021-04-21 04:40:44
【问题描述】:

我在我的 Express Node js 服务器中设置了 i18n 中间件,如下所示:

// server.js
import i18nMiddleware from 'i18next-express-middleware';
import i18n from 'i18next';
import Backend from 'i18next-node-fs-backend';
import { LanguageDetector } from 'i18next-express-middleware';

i18n
.use(Backend)
.use(LanguageDetector)
.init({
    whitelist: ['en', 'my'],
    fallbackLng: 'en',

    // have a common namespace used around the full app
    ns: ['common'],
    defaultNS: 'common',

    debug: false,

    backend: {
        loadPath: './locales/{{lng}}/{{ns}}.json',
        // jsonIndent: 2
    }
});

app.use(i18nMiddleware.handle(i18n))

这里是翻译测试文件:

// test.js
import i18next from "i18next";

const test = (req, res) =>{
    const t = req.i18n.t.bind(i18next);
    
    console.log(req.i18n.language) // language set correctly :)
    console.log(t('title')) // translation not working :(
}

title 的英文值是 title,而马来西亚的值是 tajuk

作为per the express middleware documentation,我将 my 作为接受语言标头传递,console.log(req.i18n.language) 正在正确打印它。

但是,console.log(t('title')) 仍在打印 title 而不是 tajuk

【问题讨论】:

    标签: javascript node.js express internationalization i18next


    【解决方案1】:

    这看起来很疯狂,但这解决了问题:

    const i18n = req.i18n;
    console.log(i18n.t('title'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 2012-03-25
      • 1970-01-01
      • 2012-02-06
      • 2015-12-25
      • 2017-07-19
      • 2015-12-31
      相关资源
      最近更新 更多