使用 ICU Message 语法时,是否应将复数“offset”参数替换为代码?
Should the plural `offset` parameter be replaced by code when using ICU Message syntax?
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
有用,或者如果目标是为翻译人员保持标记简单,最好避免使用 [= 是否公平? =12=]?
鉴于过去一周缺乏答案和我提供的赏金,我认为可以公平地假设在使用 ICU 时避免使用 offset
语法可能是个好主意。如果您有反对此答案的证据,请 post 您的答案!
2019 年 11 月 14 日编辑:
在尝试按照@Luckylooke 的回答找到一个示例之后,某些库中可能会有时髦的实现,但总的来说,除非实现 offset
以避免某些语言中的某些 "ugly code",否则我们还没有证据表明它是需要解决实际用例。
这里有一个例子:http://userguide.icu-project.org/formatparse/messages
如果您在程序中进行偏移,它将不适用于负数..在上述示例中为-1。
您将获得:Error in render: "SyntaxError: Expected integer but "-" found."
你可以证明我是错的:)
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
有用,或者如果目标是为翻译人员保持标记简单,最好避免使用 [= 是否公平? =12=]?
鉴于过去一周缺乏答案和我提供的赏金,我认为可以公平地假设在使用 ICU 时避免使用 offset
语法可能是个好主意。如果您有反对此答案的证据,请 post 您的答案!
2019 年 11 月 14 日编辑:
在尝试按照@Luckylooke 的回答找到一个示例之后,某些库中可能会有时髦的实现,但总的来说,除非实现 offset
以避免某些语言中的某些 "ugly code",否则我们还没有证据表明它是需要解决实际用例。
这里有一个例子:http://userguide.icu-project.org/formatparse/messages
如果您在程序中进行偏移,它将不适用于负数..在上述示例中为-1。
您将获得:Error in render: "SyntaxError: Expected integer but "-" found."
你可以证明我是错的:)