現在のアプリには、「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コードに文法ロジックを含めることはできませんが、文字列ファイルに文法ロジックを含める必要があります。これを行う方法はありますか?文法的に正しいままになるように、アプリの動的テキストをどのように翻訳しますか?