Локализация сообщений с динамическими существительными во множественном числе (например, «5 элементов обработано») на iPhone с помощью Objective-C

В моем текущем приложении у меня есть код, который отображает сообщение, например, «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, но я должен иметь грамматическую логику в файле строк. Есть ли способ сделать это? Как люди переводят динамический текст для своих приложений, чтобы он оставался грамматически правильным?

34
задан Jason 25 February 2011 в 21:33
поделиться