在我当前的应用程序中,我有显示一条消息的代码,例如“5 个项目已处理”。为了保持短语语法正确,即是否应该是“5 项”或“5 项”,我使用以下代码:
int numItems = 5;
NSString *myString = [[NSString alloc] initWithFormat:@"%d Item%@ Processed", numItems, (numItems == 1 ? @"" : @"s")];
这目前工作正常。但我正在本地化我的应用程序,并希望确保文本在我将应用程序翻译成的所有语言中的语法正确。我可以做这样的事情:
int numItems = 5;
NSString *myString = (numItems == 1 ?
NSLocalizedStringWithTable(@"%d Item Processed", @"myApp", @"singular version") :
NSLocalizedStringWithTable(@"%d Items Processed", @"myApp", @"plural version"));
然而,并非所有语言对复数的操作都有相同的规则!例如,在俄语中(请原谅我在这里的非常具体的例子),以最后一个数字 1 结尾的数字(即 21、31,但不是11)修饰的名词采用主格,以 2-4 结尾的数字采用单数属格, 和 5+ 采用复数属格。这将需要更严肃的逻辑来处理如何以语法正确的方式对特定名词进行复数,并且这种逻辑与英语逻辑不匹配。因此,理论上,我的 Objective-C 代码中不能有语法逻辑,而应该在字符串文件中有语法逻辑。有没有办法做到这一点?人们如何为他们的应用程序翻译动态文本以保持语法正确?