为什么复数被区别对待
IPS社区套件中使用的许多短语都是复数形式。一些例子:
- 21日回复
- 3评论
- 你有10个新通知
在英语中,复数通常用s表示复数,没有s表示单数。在其他语言中,规则可能更复杂,并需要具体的格式,取决于确切的数字。
为了简化这些细微差别,IPS Community Suite对指代复数项的短语使用了一种特殊的语法。语言系统将使用的值传递到短语中,特殊的语法可以使用这个值来确定要显示哪些单词。
语法
复数短语的语法是这样的:
{#[1:回复][?:回复]}
这种语法允许的功能很多,但这是基本用法。它由不同的定义组成,这些定义的应用取决于被替换的短语的数量。让我们一步一步地看一下每一部分。
{…}
复数替换总是需要用花括号括起来,以便套件核心能够识别它。注意,如果短语的其余部分不是复数依赖的,则复数替换可以出现在另一个短语中。例如:
“你有{#[1:新通知][?:新通知]}”
#
下一个字符通常是磅/哈希符号。当它出现在替换开始时,该符号将替换为传递为复数的实际数字。或者,如果您使用! #然后数量不是包括在内。
{#[1:回复][?:回复】}{!#[1:回复][?:回复]}
就变成:
10回复回复
[x回复):
下一个块是替换选项,可以有几个。这些都是用方括号括起来的,对于您的语言,您可以有任意多的方括号。块的开始x:,其中x为数字,表示当传入短语的数字完全正确时使用此替换x. 如果您的语言要求某些数字使用不同的复数形式,您可以为每个数字重复该块。
这里有三个特殊的符号可以用来表示“x”:
- *1:匹配所有结束在1,例如1,11,21,251
- % 1:匹配所有以1开头的数字,例如1、10、12、163
- ?:匹配其他块不匹配的所有值
冒号后:如果此块匹配,则使用的字符串值。
注意,这些块中的值可以使用特殊字符#,它与上面一样被传递到短语中的实际值替换。除了在某些情况下,这个短语不需要显示数字,这一点特别有用。例如:
“每{!#[1:年][?:#年]}”
在英语中,“Every 1 year”是奇数,但对于其他值,你会说“Every 3 years”。在这个例子中,我们使用! #在更换开始时,使号码不会自动添加,然后使用#在第二个块中,使字符串仅在使用该块时包含数字。
报告指南