TTTLocalizedPluralString 1.0.0

TTTLocalizedPluralString 1.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新版本2018年3月

Mattt 维护。



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)

联系信息

Mattt

许可证

TTTLocalizedPluralString 在MIT许可下提供。有关更多信息,请参阅LICENSE文件。