Objective-C的国际多元化Lib?

Jas*_*son 14 objective-c internationalization ios

我正在国际化我的应用程序,并正在寻找如何处理复数形式的解决方案.我遇到了Mozilla的PluralForm项目,该项目基本上将复数问题抽象为国际化.以下是它的工作原理:

  1. 语言可以遵循许多"复数规则".每种语言都适用于众多复数规则中的一种,而且只有一种(Mozilla的文档有15种可能的复数规则).例如,在具有规则0的语言(例如中文)中,没有复数形式,因此只有一个所需的单词形式.在具有规则1(例如德语)的语言中,每个单词具有两个不同的复数形式.依此类推,取决于规则如何匹配.

  2. 当您编写国际化字符串时,您不仅要传递要国际化的字符串,还要传递要将名词复数化的数字:

    print("You have " + num + " " + PluralForm.get(num, downloads) + ".");

    在Objective-C中,人们可以做到这一点:

    NSString *str = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%d Items"), myNumber];

    当然,上面的Objective-C示例并没有解决复数形式的问题.

  3. 当PluralForm.get函数接收调用时,根据当前使用的语言,它应用复数形式,并从字符串文件中提取适当的国际化字符串,具体取决于它应遵循的特定子规则.

PluralForm的优势很明显(至少对我而言).它从编码器中抽象出实际的语言规则,因此不需要在必须处理复数形式的所有位置复制它们.

我想使用像编写iPhone应用程序时那样的系统.是否有可用的项目或代码将Mozilla的PluralForm移植到objective-c?

Pal*_*ndo 0

从 Mozilla 的来看从 Mozilla 的PluralForm.jsm 实现PluralForm.get在 Objective-C 中实现您自己的 PluralForm.jsm 版本应该很容易。

首先,您从本地化中检索复数规则编号,并使用它来选择实现该规则的适当 getter。有 16 (1)个表达式返回正确复数形式的索引个表达式返回用于给定数字幸运的是,它们似乎是用 JavaScript 子集编写的,该子集也是有效的 C 代码……混合了一些模运算的布尔和三元表达式。

复数形式由翻译人员提供,作为给定单词的本地化字符串中分号分隔的列表。表格的顺序在复数规则列表中描述。您可以用分号将它们分开,并使用 getter 中的索引选择匹配的形式。

从技术上来说,没有问题。唯一的问题是我不知道如何正确导出代码并尊重MPL 许可证

(1) 实施包含布列塔尼的第 17 条规则,但其形式尚未记录,所以......