ICU Message syntax非常强大,其复数选项之一是offset
一个用于确定复数形式的变量。
我可以想象如何使用此功能,但似乎该功能很容易用代码替换(以伪代码为例-try it here):
icuFormat('You worked for {count, plural, offset:1 one {{count} hour} other {{count} hours}} today.', {count: workedHours});
icuFormat('You worked for {count, plural, one {{count} hour} other {{count} hours}} today.', {count: workedHours+1});
简而言之,为什么不对变量本身进行偏移并使ICU标记更精简,而不是在ICU语法中添加更多标记来进行简单的变量偏移?
我是否缺少某种用例,这会使offset
有用,或者公平地说,如果目标是使翻译者保持简单的标记,则最好避免使用{{1 }}?
答案 0 :(得分:1)
鉴于过去一周没有答案,而且我提供了很多悬赏,我认为可以肯定的是,在使用ICU时避免使用offset
语法可能是一个好主意。如果您有反对该答案的证据,请发表您的答案!
2019年11月14日编辑:
尝试在@Luckylooke的答案之后找到一个示例之后,某些库中可能会有一些时髦的实现,但是总的来说,除非实现offset
来避免某些语言中的“丑陋代码”,否则我们尚无证据表明这是必需的解决实际用例。
答案 1 :(得分:0)
这里有一个示例:http://userguide.icu-project.org/formatparse/messages
如果您在程序中进行了偏移,则它将不适用于负数。在上述示例中为-1。
您将获得:Error in render: "SyntaxError: Expected integer but "-" found."
您可以证明我错了:)