【问题标题】:Language variables in i18nexti18next 中的语言变量
【发布时间】:2023-05-24 08:05:01
【问题描述】:

我正在使用i18next 来实现应用程序的国际化。

我是这样初始化的:

i18n.init({debug: false, getAsync: false, resGetPath: _this.buildPath + _this.i18nPath + '__lng__/__ns__.json'});

变量__lng____ns__ 代表什么?

【问题讨论】:

    标签: javascript internationalization i18next


    【解决方案1】:
    • __lng__ 是要加载的语言
    • __ns__ 是要加载的命名空间

    基本上这意味着如果您使用lng: 'en-US' 进行初始化,它将尝试加载:

    1. _this.buildPath + _this.i18nPath + 'en-US/translation.json'
    2. _this.buildPath + _this.i18nPath + 'en/translation.json'
    3. _this.buildPath + _this.i18nPath + 'dev/translation.json'

    因为 dev 是默认的后备语言,而 translation 是默认的命名空间。

    您可能会发现文档 here 很有用,因为它根据您的后端的工作方式显示了更多使用它们的方法。

    编辑:有多种方法可以设置加载的语言。最简单的方法是将值作为i18n.init()lng 参数传递。这方面的一个例子是:

    i18n.init({
        debug: false, 
        getAsync: false, 
        lng: _this.language,
        fallbackLng: _this.defaultLanguage,
        resGetPath: _this.buildPath + _this.i18nPath + '__lng__/__ns__.json'
    });
    

    此示例与您的示例相同,但明确设置了语言。我还设置了fallbackLng,但如果您以某种方式(例如来自browser language)接受来自用户的语言,这主要是有用的,这样任何不受支持的语言都会退回到默认值。如果您只允许从预先批准的值中进行选择,那么这可能不是必需的。

    【讨论】:

    • 非常感谢您的回答!一般来说,我现在了解它是如何工作的。但是变量lng 从未初始化过,在这种情况下它从哪里获得它的值?
    • 我在答案中添加了一些内容,希望能让您更清楚地了解如何设置语言,但我现在意识到这可能不是您的意思。如果您的意思是现在如何为您设置语言,那么它来自 i18next 中的 this function,它从 cookie、localStorage 和 window.navigator 属性中检测到要使用的正确语言。
    • 这就是我一直在寻找的答案 :) 再次感谢你,你真的帮了我很多!