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文件。