使用ICU消息语法时,应将复数的“ offset”参数替换为代码吗?

时间:2019-09-22 18:23:58

标签: unicode internationalization translation globalization icu

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 }}?

2 个答案:

答案 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."

您可以证明我错了:)

编辑: 举例如下:https://codesandbox.io/s/vue-template-tlteb