高级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的“上下文”部分获取信息)