TTTLocalizedPluralString
带有计数参数的 NSLocalizedString
自 iOS 7 和 Mac OS X 10.9 Mavericks 以来,Foundation 具有根据复数和语法规则指定本地化字符串的能力。您可以通过查看 Foundation 发行说明中的 本地化属性列表文件 部分来获取更多有关信息。
NSLocalizedString 及其相关宏使本地化 Mac 和 iOS 应用变得相对简单直接。然而,当需要处理基于动态计数值变化的变位字符串时,它可能会遇到问题。在这种情况下,您可能已经看到过类似下面的代码
if (count == 1) {
return NSLocalizedString(@"1 Person", nil);
} else {
return [NSString stringWithFormat:NSLocalizedString(@"%d People", nil), count];
}虽然这适用于英语,但针对其他地区时您会遇到问题。请考虑以下 Unicode 语言复数规则中所描述的例子
- 许多亚洲语言,如日语、韩语、泰语和简体中文,没有名词复数形式
- 阿拉伯语有几个复数形式,包括零、一、二以及一些、许多和其他,它们通过一个相当复杂的十进制 divmod 运算来确定偶奇性。
幸运的是,TTTLocalizedPluralString 为您解决了所有这些问题。您可以像使用 NSLocalizedString 一样使用它,只是在这种情况下,您还有一个用于计数的参数。以下是一个使用 TTTLocalizedPluralString 的例子,与之前相同。
return TTTLocalizedPluralString(count, @"Person", nil);此宏指向一个函数,该函数用于确定当前区域的复数规则,然后执行相应的值进行 NSBundle 本地化字符串查找。在这种情况下,en.lproj/Localizable.strings 会为它提供两个键:分别是 %d Person (单数规则:一) 和 %d Person (单数规则:其他)。其他本地化只需要使用该语言所使用的键(例如,日本使用1,阿拉伯使用6)。
以下是完整的多重规则列表
零一二少数许多其他
支持的区域设置
- 阿拉伯语 (
ar) - 保加利亚语 (
bg) - 加泰罗尼亚语 (
ca) - 简体中文 (
zh-Hans) - 繁体中文 (
zh-Hant) - 克罗地亚语 (
hr) - 捷克语 (
cs) - 丹麦语 (
da) - 荷兰语 (
nl) - 英语 (
en) - 德语 (
de) - 芬兰语 (
fi) - 希腊语 (
el) - 法语 (
fr) - 希伯来语 (
he) - 匈牙利语 (
hu) - 印度尼西亚语 (
id) - 意大利语 (
it) - 日语 (
ja) - 韩语 (
ko) - 拉脱维亚语 (
lv) - 马来语 (
ms) - 挪威语(巴克莫尔)(
nb) - 挪威语(纽诺斯克)(
nn) - 波兰语 (
pl) - 葡萄牙语 (
pt) - 罗马尼亚语 (
ro) - 俄语 (
ru) - 塞尔维亚语 (
sr) - 西班牙语 (
es) - 斯洛伐克语 (
sk) - 斯洛文尼亚语 (
sl) - 瑞典语 (
sv) - 泰语 (
th) - 土耳其语 (
tr) - 乌克兰语 (
uk) - 越南语 (
vi)
联系信息
许可证
TTTLocalizedPluralString 在MIT许可下提供。有关更多信息,请参阅LICENSE文件。