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