高级字符串本地化

Advanced string localization

本文关键字:本地化 字符串 高级      更新时间:2023-09-26

我正在寻找一些帮助(和一些工具)的高级本地化。我使用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条信息

您有2条消息

我不希望在我的代码中有逻辑说

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

因为我不相信check属于我的业务逻辑,而且我知道不同的语言对单数/复数的处理不同(即单数包括0)

<标题>多倍数h1> 面提到的一些问题,但现在有多个倍数的组合,例如:

您有%d未读消息和%d已读消息

您有%d未读消息和%d已读消息,以及%d私人通知

<标题>性别h1> 面是我想解决的一个例子:

我爱我的%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
<标题>

这是一个冗长的设置,用于下面的问题:

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

以下答案适用于一般翻译方法,而不限于特定的本地化框架。然而,为了简单起见,接下来我将选择18来说明这些想法是如何实现的。

倍数(多元化)

一般来说,您所说的"multiple"在很多本地化框架中是一个叫做"pluralization"的概念。

一个复数字符串意味着有一个变量影响字符串的输出内容。

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

那么,你可以创建一个像这样的字符串:

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

多个倍数(多个计数的复数字符串)

处理这类字符串的方法很棘手,但通常我们将具有>1个变量的单个字符串拆分为具有1个变量的两个或多个复数字符串。

性别(string with context)

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