json i18n:lang:{string} vs. string:{lang}

时间:2016-08-12 18:16:32

标签: javascript json internationalization locale

我必须使用webapp实现国际化(德语,英语)。 我看到最常见的方法是按照每种语言在不同文件中构建翻译:

de.json fr.json

然后以编程方式切换数据存储区。

这相当于这样的数据结构:

i18n:
{
   de: {
      hello: "Hallo",
      save: "Speichern,
      ...
   },
   en: {
      hello: "hello",
      save: "save",
      ...
   }
}

这种方法可以轻松地将翻译文件分发给不同的翻译人员,然后只需将新翻译的文件添加到应用程序中。 但是,我不喜欢密钥需要保持同步。即如果我添加一个新关键字(例如"删除")并且我当时没有所有翻译,我仍然需要确保我更新所有json文件,所以我不会忘记稍后获取翻译点。

因此,我认为以下结构可能会避免此问题:

i18n:{
   hello: {
      de: "Hallo",
      en: "hello"
   },
   save: {
      de: "Speichern",
      en: "Save"
   }
}

这种方法的缺点是什么?为什么每个人都使用第一种方法?

1 个答案:

答案 0 :(得分:0)

TL; DR:表现。

首先,逻辑数据结构是矩阵,而不是树。因此,每种方法在持久性方面都是等效的。

其次,i18n几乎是运行时的只读数据结构。第一种方法使它快速读取,因为当给出语言环境时只需要一个语言,并且你可能一次需要很多键。

第三,如果你需要在运行时添加/修改密钥,那么这是一个相关的偶然情况,而不是阅读,你可能会逐个操作,每种方法都是一样的。