我正在使我的应用程序国际化,并且正在寻找一种解决复数形式的方法。我遇到了Mozilla's PluralForm项目,该项目从本质上抽象了国际化的复数问题。运作方式如下:
print("You have " + num + " " + PluralForm.get(num, downloads) + ".");
在Objective-C中,这样做会大不相同:
NSString *str = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%d Items"), myNumber];
当然,上面的Objective-C示例并不能解决复数形式的问题。
PluralForm的优势是显而易见的(至少对我而言)。它从编码器中提取了实际的语言规则,因此不必在必须处理复数形式的所有位置重复它们。
我想在对iPhone应用程序进行编程时使用类似的系统。是否有可用的项目或代码将Mozilla的PluralForm移植到Objective-c?
最佳答案
Smartling(翻译管理平台)发布了open source library,用于管理iOS中的复数形式。在与众多存在iOS复数问题的客户打交道,但没有找到能够满足我们和客户需求的解决方案后,我们决定建立自己的解决方案。
该库采用复数字符串的键,并根据CLDR复数规则扩展它们以包含复数形式。该库提供了NSLocalizedString的替代功能,称为SLPluralizedString来进行查找。
英文源文件如下所示:
"%d Items Processed##{one}" = "1 Item Processed";
"%d Items Processed##{other}" = "%d Items Processed";
然后,您将使用SLPluralizedString函数来查找字符串:
SLPluralizedString(@”%d Items Processed”, numItems, @”Number of items processed”);
俄语翻译文件应具有与该语言对应的适当数量的键/值:
"%d Items Processed##{one}" = "%d элемент обработан";
"%d Items Processed##{few}" = "%d элемента обработано";
"%d Items Processed##{many}" = "%d элементов обработано";
"%d Items Processed##{other}" = "%d элемента обработано";
实际的代码无需根据语言进行更改。一个函数可以在所有语言中工作,并返回适当的翻译后的字符串。
随时分享评论,改进等。
关于objective-c - 用于Objective-C的国际多元化图书馆?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5130844/