【问题标题】:How to get length of array in a i18n-file in JavaScript/angularJS?如何在 JavaScript/angularJS 中获取 i18n 文件中的数组长度?
【发布时间】:2023-03-09 03:03:02
【问题描述】:

我的翻译文件如下所示:

{
    "RANDOM": [
      {
        "ITEM": "basdf"
      },
      {
        "ITEM": "casdf"
      },
      {
        "ITEM": "dasdf"
      },
      {
        "ITEM": "easdf"
      }
    ]

}

我想随机显示其中一项:

getQuestion() {
  const sizeOfRandomItems = 4;
  const randomNumber = Math.floor(Math.random() * sizeOfRandomItems);
  return this.$filter('i18n')('RANDOM.' + randomNumber + '.ITEM');
}

但每当我想在我的翻译文件中添加新项目时,我还必须手动更新sizeOfRandomItems。有没有办法获取翻译文件中RANDOM数组的大小?

我已经试过了:

const arraySize = this.$filter('i18n')('RANDOM'); 
console.log(arraySize.length);

但首先我得到一个警告:

i18n-translate.js:205 Missing key: 

它返回6(这是保存数组RANDOM的键中的字符数)

【问题讨论】:

  • 如果你有一个包含你的结构的变量,那么你可以这样做myVariable.RANDOM.length
  • @James 起初我还以为这也很容易,但事实并非如此。

标签: javascript json internationalization


【解决方案1】:

如果你愿意使用一些库,你可以使用 Jquery 加载 json。 将其解析为数组并获取数组长度。当然,如果你有很多密钥,这个解决方案会很重,所以我建议你将结果保存在某个地方的变量中。

var length;
function getQuestion() {
  const sizeOfRandomItems = 4;
  const randomNumber = Math.floor(Math.random() * (length ? length : getJsonLength()));
  return this.$filter('i18n')('RANDOM.' + randomNumber + '.ITEM');
}

function getJsonLength() {
  $.getJSON("i18n.json", function(json) {
    var array = JSON.parse(json)
    length = array.length;
  });
}

【讨论】:

    【解决方案2】:

    最简单的可能是在您的翻译文件中添加一个提供当前数组长度的项目 - 这样您就可以首先从翻译中读取该信息并使用它。

    getQuestion() {
      const sizeOfRandomItems = parseINT(this.$filter('i18n')('RANDOM.LENGTH'), 10);
      const randomNumber = Math.floor(Math.random() * sizeOfRandomItems);
      return this.$filter('i18n')('RANDOM.' + randomNumber + '.ITEM');
    }
    

    如果您可以从翻译文件中加载对象,则更简单,例如。在 i18next (https://www.i18next.com/objects-and-arrays.html) 中可能 - 不确定在您使用的 i18n 库中是否可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-14
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 2017-06-19
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多