web-dev-qa-db-ja.com

フォーマットプレースホルダーを使用して文字列をローカライズするにはどうすればよいですか?

NSLocalizedStringでプレースホルダーを含む文字列をローカライズするにはどうすればよいですか?

例えば:

[NSString stringWithFormat:@"You can afford %i at %@%li.",[kCash integerValue]/self.price, kYen,  self.price]

これをローカライズするにはどうすればよいですか?文字列を複数のローカライズされた文字列に分割しますか?次に、さまざまな文の構造と文法をどのように処理しますか?

39
Moshe

ローカライズされた文字列にプレースホルダーを含めます。それ以外の場合と同様に、これが適切な唯一の方法です。前述のように、さまざまなWordの順序を考慮することはできません。

これらの線に沿った何か:

[NSString stringWithFormat:NSLocalizedString(@"Foo %i", @"Foo %i"), 123]
20
Matti Virkkunen

NSLocalizedStringはプレースホルダーを変更しないため、stringWithFormatは通常どおりそれらを使用できます。あなたの例では、番号付きのプレースホルダーを使用することはおそらく良い考えです-

    [NSString stringWithFormat:@"You can afford %1$i at %2$@%3$li.",
                              [kCash integerValue]/self.price, kYen,  self.price]

詳細はこちら: NSString stringWithFormatで引数の位置/インデックスを指定する方法はありますか?

50
Alan Rowarth

これに対する別のアプローチは、ローカライズされたファイルにあります。

key = "String with %@ placeholder"; 

そしてあなたの実装では:

[NSString stringWithFormat: NSLocalizedString(@"key", ""), @"string replacing placeholder"];

引数はいくつでも使用できます。ローカリゼーションファイル全体で一貫している必要があります。

7
Chris

この方法はより効率的です:

[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Key", @"Comment for localised string"), value];
0
Umit Kaya