高级string本地化

我正在寻找一些帮助(和一些工具)的高级本地化。 我正在使用一个节点的后端,所以我更喜欢JS中的工具/库。

我目前做一些简单的stringreplace使用属性文件本地化为不同的语言。

home_en.properties

page.title=My Site page.header=Hello %s 

home_de.properties

 page.title=Meine Seite page.header=Hallo %s 

到目前为止这么好…但这里有一些更高级的例子,我试图解决:

倍数

我需要能够正确地翻译倍数,例如:

你有1条消息

VS

你有2条消息

我不想在我的代码中说逻辑

 if (i == 1) { // use page.messages.singular } else { // use page.messages.plural } 

因为我不相信检查属于我的业务逻辑,我知道不同的语言对待单数/复数的不同(即单数包括0)

倍数

如上所述的一些问题,但现在有多个组合的多个组合,例如:

您有%d条未读邮件和%d条读取邮件

要么

您有%d个未读邮件和%d个阅读邮件,以及%d个私人通知

性别

这是我想解决的一个例子:

我爱我的%s

可能的价值观是cat, dog, horse

英语没有问题,但在德语中,这需要:

home_de.properties

 animals.like.male=Ich liebe meinen %s animals.like.female=Ich liebe meine %s animals.like.neutral=Ich liebe mein %s 

这会导致英文不必要的input:

home_en.properties

 animals.like.male=I love my %s animals.like.female=I love my %s animals.like.neutral=I love my %s 

对于以下问题,这是一个漫长的过程:

有什么工具/库可以解决像这样的高级string本地化?

下面的答案是通用翻译方法,不限于特定的本地化框架。 然而,为了简单起见,我会select下面的十八个例子来说明这些想法是如何完成的。

倍数(多元化)

一般来说,你提到的“多元化”是一个在许多本土化框架中被称为“多元化”的概念。

多个string意味着有一个variables影响string的输出内容。

下面的代码显示了如何使用计数variables的string可以满足您的需要。 (ref: http : //i18next.com/pages/sample.html )

所以,你可以像这样创build一个string:

 { "app": { "new_messgae": "You have __count__ message.", "new_messgae_plural": "You have __count__ messages." } } 

多重倍数(多重string)

处理这种string的方法是棘手的,但是通常我们将具有> 1个variables的单个string分成具有1个variables的2个/多个复数string。

性别(string)

对于具有特定上下文(例如:性别)的string,您可以利用本地化框架中的“上下文”function使其工作。 (只需访问http://i18next.com/pages/sample.html的“上下文”部分获取信息)