gpt4 book ai didi

javascript - 高级字符串本地化

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:33 25 4
gpt4 key购买 nike

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

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

home_en.properties

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

home_de.properties

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

到目前为止一切顺利...但这里有一些我正在尝试解决的更高级的示例:

倍数

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

You have 1 message

对比

You have 2 messages

我不想在我的代码中包含这样的逻辑

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

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

多个倍数

上面有一些问题,但现在有多个倍数的组合,例如:

You have %d unread messages and %d read messages

You have %d unread messages and %d read messages, as well as %d private notifications

性别

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

I love my %s

可能的值为猫、狗、马

英语没问题,但德语则需要:

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

问题

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

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

最佳答案

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

倍数(复数)

一般来说,您所指的“多重”是许多本地化框架中称为“复数化”的概念。

复数字符串表示有一个变量影响字符串的输出内容。

下面的代码显示了带有计数变量的字符串如何满足您的需求。 (引用: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 的“上下文”部分即可获取信息)

关于javascript - 高级字符串本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com