2

据我了解,iOS 在后台使用 ICU。我想为涉及数字和复数的字符串访问 ICU 的 MessageFormat 的功能,例如,

There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.

iOS 是否公开此功能?如果是这样,我该如何使用它?我以为我可以写

[NSString stringWithFormat: "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.", n];

或者

[NSString stringWithFormat: "There {0,plural, =0{are no files}=1{is one file}other{are %ld files}}.", n];

但是这些格式(分别为 ICU4J 和 ICU)不起作用。

4

2 回答 2

1

iOS 和 OS X 一样,确实包含/usr/lib/libicucore.dylib. 但是,它在任一操作系统上都不是受支持的公共 API。有关如何在 OS X 上使用它以及潜在问题的说明,请参阅这条旧消息。

在 iOS 上,我猜还有一个额外的问题是 Apple 可能会拒绝您的应用程序使用不受支持的 API。

于 2012-04-28T23:03:45.160 回答
0

stringWithFormat的格式规则不包括 ICU 格式。您需要为此类事情调用不同的函数。AFAIK iOS 不公开与 ICU MessageFormat 兼容的 NSString API。

但是,鉴于您确实有权访问 API(通过公开公开或将 ICU 的自定义构建与您的应用程序捆绑在一起),要使此类消息格式正常工作,ICU 库必须有权访问以下资源文件:

  • 包含您感兴趣的语言环境的选择数据
  • 更新到足以支持您尝试使用的选择格式

有关详细信息,请参阅ICU 文档

于 2012-05-01T22:06:14.467 回答