2016-08-12 44 views
0

我必须用webapp实现国际化(德语,英语)。 我看到的最常见的方法是构建每种语言在不同的文件翻译:json i18n:lang:{string}与string:{lang}

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" 
    } 
} 

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

+0

我的第一个假设是,你只会遍历1个对象,基于当前的语言环境,而不是(字数)对象。 在大多数情况下,单独的语言实际上存储在不同的JSON文件中以减少有效负载。当你知道语言环境时,不需要在一个JSON中引入每种语言,只需要引入一个语言。 – user3821538

回答

0

TL; DR:表现。

首先,逻辑数据结构是矩阵,而不是树。所以每种方法在持续性上都是相同的。其次,i18n在运行时几乎是只读数据结构。第一种方法使得它的读取速度很快,因为当给定语言环境时只需要一个lang,并且您可能一次需要很多密钥。第三,如果你需要在运行时添加/修改键,它是一个相关的偶然情况,而不是阅读,你可能会一个一个地操作,每种方法都是一样的。