2014-05-23 32 views
2

我正在寻找一些帮助(和一些工具)进行高级本地化。我使用了一个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。性能

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 

问题

这对以下问题全部长篇大论设置:

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

+0

我删除了答案,因为它看起来不能用开源版本的Closure模板完成:https://groups.google.com/forum /#!topic/closure-templates-discuss/rbki3JX3lRo –

回答

0

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

倍数(多元化)

一般来说,“Mutliples”你指的是一种在许多本地化框架被称为“多元化”的概念。

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

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

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

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

多倍数(多计多串)

处理这类的方法字符串是棘手的,但通常我们将具有> 1个变量的单个字符串分成具有1个变量的2个/多个复数字符串。

性别(弦乐与上下文)

有关特定上下文字符串(例如:性别),你可以利用的“上下文”功能定位框架,使得它的工作原理。 (请访问http://i18next.com/pages/sample.html的“上下文”部分了解相关信息)

+0

非常感谢您的回答。我以前没有听说过'i18next',所以我一定会研究它。尽管我有两个关于你的答案的问题:1)我理解复数方法,但是你在哪里定义何时使用复数?例如,法语,其中0被认为是单数。或其他语言不只有2种形式。 2)如何将“1”个变量的句子“分离”为1个变量的几个字符串。这通常是本地化的第一个规则,不要将字符串分开并在稍后重新组合。 – Steve

+0

1)不同语言的多元化规则在这里明确定义http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html。 – Cowcow02

+0

2)对于这种方法的进一步解释,我希望这适用于你http://stackoverflow.com/questions/1888487/internationalising-sentences-with-two-plural-words – Cowcow02