ICU在iOS上的MessageFormat

时间:2012-04-28 21:35:44

标签: iphone ios icu

据我所知,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)不起作用。

2 个答案:

答案 0 :(得分:1)

iOS与OS X一样,确实包含/usr/lib/libicucore.dylib。但是,它不是任何操作系统上受支持的公共API。有关如何在OS X上使用它的说明,请参阅this old message

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

答案 1 :(得分:0)

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

但是,鉴于您确实可以访问API(通过公开公开或将ICU的自定义版本与您的应用程序捆绑在一起),为了使这种消息格式化工作,ICU库必须能够访问以下资源文件: p>

  • 包含您感兴趣的区域设置的选择数据
  • 是否足以支持您尝试使用的选择格式

有关详细信息,请参阅ICU documentation