1

我了解 Weblate 支持将字符串转换为所有复数形式,并且我找到了有关如何在 .po 文件中定义键的示例。但是如何为 json 格式的字符串定义复数形式呢?

我尝试了多种变体,例如英语:

{
  "key" : "A single key"
  "key_plural" : "%d keys"
}

但我最终得到了 2 个不同的字符串,而不是我在 Weblate 演示中看到的一个字符串的两种变体。

那么对于英语和其他具有更多复数形式的语言(一、少数、多……),我应该如何正确地做到这一点

4

2 回答 2

2

您不能以这种方式可靠地支持复数。许多语言有不同数量的复数,因此没有 1:1 映射到英语。要正确支持复数,您需要使用可以理解的翻译格式,例如 Gettext(这只是一个示例,实际上大多数翻译格式都支持这一点)。您可以在他们的文档中找到有关复数的更多信息:http ://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/Plural-forms.html

于 2015-03-27T12:48:12.747 回答
0

只是添加一个不同的例子来说明如何在 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{...}

另请参阅PluralFormat 的文档和关于Language Plural Rules的概述

于 2016-10-25T20:00:45.650 回答