【问题标题】:Using i18next translations without having the "key" as strings使用 i18next 翻译而不将“键”作为字符串
【发布时间】:2015-03-17 23:04:01
【问题描述】:

我遇到了一个奇怪的兼容性问题,我无法使用字符串作为 JSON 的键。例如,如果下面的 JSON 是我的翻译文件,

{
    "modules" : {
        "localization": {
          "modal" : "Modal localized (en-US)"
          }
    }
}

系统只能接受它没有键是字符串,即像:

{
    modules : {
        localization: {
          modal : "Modal localized (en-US)"
          }
    }
}

是否可以配置 i18next 来实现这一点?

【问题讨论】:

  • “系统只能接受它而不是键是字符串”是什么意思。如果没有键是字符串,则该文件不是有效的 JSON,因此 i18next 无法解析它:)
  • 嗯..我的意思是,是否可以将 i18next 配置为直接使用 Javascript 对象,而不是传递 JSON 字符串。
  • 嗯,您可以使用JSON.stringify(<your object>); 将您的对象解析为 JSON,然后将其传递给 i18next :) 但这要求您有一个对象,而不仅仅是一个字符串。
  • 谢谢。我考虑了一下,但是 i18next 是否提供了一个选项来执行此操作?作为选项的一部分,我只能设置“resGetPath”来指定 JSON 字符串的路径。

标签: i18next


【解决方案1】:

来自http://i18next.com/pages/doc_init.html

<html>
    <head>
        <script type="text/javascript" src="jquery-1.11.1.js"></script>
        <script type="text/javascript" src="i18next-1.7.4.js"></script>
    </head>
    <body>
        <h1 data-i18n='key'>My First Heading</h1>
    </body>
    <script type="text/javascript">
        var resources = {
            dev: { translation: { key: 'value' } },
            en: { translation: { key: 'value' } },            
            'en-US': { translation: { key: 'value' } }
        };

        i18n.init({ 
            resStore: resources,
            lng: 'en-US'
        }, function(t) {
            $("h1").i18n();
        });
    </script>
</html>

如果对您更有效,您可以通过其他方式将对象加载到资源中,这只是一个简单的演示。我找不到任何方法可以将 'en-US' 作为字符串 - 如果它周围没有引号,它会抱怨 '-'。这可以防止它加载外部资源,所以我认为你必须自己处理从某个地方加载资源。

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 2021-09-18
    • 2023-01-29
    • 1970-01-01
    • 2015-12-26
    • 2018-01-09
    • 2016-12-28
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多