Nic*_*tte 5 localization internationalization messageformat ios cldr
我开始学习iOS Stringsdict 文件,并在使用以下语法的项目中找到了一些现有代码:
<key>zero</key>
<string>You no message.</string>
Run Code Online (Sandbox Code Playgroud)
根据 CLDR,zero在英语中是无效的复数形式,我们希望使用明确的复数规则(=0使用 ICU MessageFormat 时)
我试图找到如何在 iOS Stringsdict 文件中使用显式复数规则,但找不到任何方法来实现这一点。有人可以确认这是否受支持吗?
解决方案示例(我无法测试它们,但也许有人可以?)
<key>0</key>
<string>You no message.</string>
Run Code Online (Sandbox Code Playgroud)
或者
<key>=0</key>
<string>You no message.</string>
Run Code Online (Sandbox Code Playgroud)
关于 ICU MessageFormat 的 CLDR 实现的显式复数规则部分的额外参考:
https://formatjs.io/guides/message-syntax/#plural-format
=value 这用于匹配特定值,而不管当前语言环境的多个类别。
简答
.stringsdict文件无法支持明确的复数规则(除了自定义的 Apple 实现,zero下面将详细介绍)
详细解答
正常的 CLDR 实现:
zero,它将使用 CLDR 值(大多数语言都具有0的值zero)。这还包括像拉脱维亚语这样的语言,它们映射了20、30等值zero,并且也与Apple 自己的文档相矛盾(此行为已得到验证):如果存在“零”,则该值用于将参数值映射为零,无论 CLDR 规则为该数值指定什么。
来源:OS X v10.9 的 Foundation 发行说明
自定义(Apple)CLDR 实现:
zero即使没有为该语言定义规则,所有语言都可以使用CLDR 中的类别(参考此处)您有 0 封电子邮件。
你可以写:
您没有电子邮件。
=0and notzero表示否定形式。
zero?你根本不能——基本上苹果通过覆盖 CLDR 打破了语言规则。免费详情:
zero不等于0:
结论
提示#1:如果您需要使用拉脱维亚语,您可能应该避免使用zero否定形式,而使用代码,并将字符串放在文件stringsdict外部
提示#2:确保您的翻译过程正确支持此行为!
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |