高级字符串本地化

时间:2014-05-23 23:32:56

标签: javascript node.js localization translation

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

我目前使用本地化为不同语言的属性文件进行一些简单的字符串替换。

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

然后会导致不必要的英语输入:

home_en.properties

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

问题

对于以下问题,这是一个冗长的设置:

哪些工具/库可以解决像这样的高级字符串本地化?

1 个答案:

答案 0 :(得分:0)

以下答案适用于通用翻译方法,不限于特定的本地化框架。但是,为了简单起见,我会选择i18next来说明如何完成这些想法。

倍数(多元化)

一般来说,您所指的“Mutliples”在许多本地化框架中都是一个称为“多元化”的概念。

复数字符串表示存在影响字符串输出内容的变量。

以下代码显示了带有计数变量的字符串如何满足您的需求。 (参考:http://i18next.com/pages/sample.html

这样,您可以创建一个这样的字符串:

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

多个倍数(多个字符串,多个计数)

处理这种字符串的方法很棘手,但通常我们将单个字符串与> 1个变量分成2个/更多个字符串和1个变量。

性别(带上下文的字符串)

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