【问题标题】:Using i18next to build a menu使用 i18next 构建菜单
【发布时间】:2016-04-09 19:21:22
【问题描述】:

我有一个在节点上使用 i18next 的页面。

在翻译文件中,有各种东西的翻译(duh)(就像小助手sn-ps的数据库)

现在我想建立一个页面,用户可以在其中单独查看它们。

想法

我想访问加载的xx-translation.json 并创建一个(下拉?)菜单,其中包含一个命名空间中的所有条目

{
    "category": {
        "subcategory": {    // i want to get ["bla", "blu", "bli"] as result
            "bla"    : "ble",
            "blu"    : "blo",
            "bli"    : "bly"
        }
    }
}

我正在考虑一个简单的循环,比如

var amountOfEntries = translationJSON.category.subcategory.length;
for (var i = 0; i < amountOfEntries; i++) {
    $('#menu').   //append that entry somehow
}

tldr 问题

有没有办法访问我的“普通”js 中的 translation.json 并计算条目数? 和 如何使用条目逐个构建菜单? (这是奖金,我想我会设法做到这一点。主要问题是第一个)

谢谢

【问题讨论】:

  • 我刚刚发布了对您问题的答案,但我想我可能误解了您的问题。您是说节点应用程序中的 translation.json 文件,但您想从客户端 javascript 访问它?
  • 翻译文件在客户端加载了 ajax($.i18n.init({//etc, resGetPath: '/locales/__lng__-__ns__.json'), //etc)}。我可以在 devtools 中看到对 JSON 文件的 GET 请求,我可以实时切换它们(无需重新加载 = 它们必须是浏览器中的某处)。现在我想知道(如果)我如何从(也是客户端)browser.js 访问这些文件来计算条目
  • 更新了我的答案。我对 i18next 不是很熟悉,所以如果这不是你想要的,请告诉我

标签: javascript json i18next


【解决方案1】:

查看lodash.js 了解一些不错的收集实用功能。您可以使用以下内容迭代对象:

_.each(subcategory, function(val, key){
    $(".menu").append("<li>" + key + ": " + val + "</li>");
});

有用吗?

更新

在上面的 cmets 中澄清您的问题后,我认为您正在寻找的是 getResource()getResourceBundle()

【讨论】:

  • 这似乎是正确的方向。有一些问题(v1.10 而不是 2.x),但我在旧文档中找到了相同的功能,现在我设法计算了条目数。将尝试将其弯曲成我需要的:)谢谢
  • 我正在与一个问题作斗争......也许你有一个想法?在 i18next 的初始化回调中,i18n.getResourceBundle('en') 工作并检索我想要的内容。但如果我将完全相同的功能移动到另一个文件,它不会。 var lng = i18n.lng() 给出了正确的语言,但 i18n.getResourceBundle(lng); 返回一个空对象(如果我用 'en' 调用它,则相同)。我不知道为什么....:/
  • 没关系,这实际上只是显而易见的事情.. 在回调内部,所有资源都已经存在,在外部,它们还没有。将不得不再摆弄一下:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多