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