我了解 Weblate 支持将字符串转换为所有复数形式,并且我找到了有关如何在 .po 文件中定义键的示例。但是如何为 json 格式的字符串定义复数形式呢?
我尝试了多种变体,例如英语:
{
"key" : "A single key"
"key_plural" : "%d keys"
}
但我最终得到了 2 个不同的字符串,而不是我在 Weblate 演示中看到的一个字符串的两种变体。
那么对于英语和其他具有更多复数形式的语言(一、少数、多……),我应该如何正确地做到这一点
我了解 Weblate 支持将字符串转换为所有复数形式,并且我找到了有关如何在 .po 文件中定义键的示例。但是如何为 json 格式的字符串定义复数形式呢?
我尝试了多种变体,例如英语:
{
"key" : "A single key"
"key_plural" : "%d keys"
}
但我最终得到了 2 个不同的字符串,而不是我在 Weblate 演示中看到的一个字符串的两种变体。
那么对于英语和其他具有更多复数形式的语言(一、少数、多……),我应该如何正确地做到这一点
您不能以这种方式可靠地支持复数。许多语言有不同数量的复数,因此没有 1:1 映射到英语。要正确支持复数,您需要使用可以理解的翻译格式,例如 Gettext(这只是一个示例,实际上大多数翻译格式都支持这一点)。您可以在他们的文档中找到有关复数的更多信息:http ://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/Plural-forms.html
只是添加一个不同的例子来说明如何在 JavaScript 中做到这一点,messageformat库支持复数形式,支持各种语言中可能发生的不同情况。
对于英语复数,您可以像这样使用它:
var pluralMessage = mf.compile("There {NUM_RESULTS, plural, one{is} other{are}} {NUM_RESULTS} {NUM_RESULTS, plural, one{result} other{results}}")
console.log(pluralMessage({ NUM_RESULTS: 1 });
// There is 1 result
console.log(pluralMessage({ NUM_RESULTS: 5 });
// There are 5 result
one并且other是复数类别。哪些复数类别可用取决于目标语言的复数规则。例如,在日语中,单数和复数之间没有语法上的区别,只会other{...}使用单数和复数,而对于捷克语则有 4 种不同的情况:
zero{...}few{...}many{...}:other{...}