59

変数を NSLocalizedString への入力パラメーターとして使用しようとしましたが、返されるのは入力パラメーターだけです。私は何を間違っていますか?変数文字列値を NSLocalized 文字列のインデックスとして使用することは可能ですか?

たとえば、ローカライズされたバージョンを表示したい文字列がいくつかあります。ただし、定数文字列ではなく、変数を NSLocalizedString のパラメーターとして使用したいと考えています。同様に、NSLocalizedString のパラメーターに書式設定要素を含めたいので、同じ書式設定パラメーターで文字列のローカライズされたバージョンを取得できます。次のことができますか?

ケース 1: 変数 NSLocalizedstring:

NSString *varStr = @"Index1";
NSString *string1 = NSLocalizedString(varStr,@"");

ケース 2: フォーマットされた NSLocalizedString:

NSString *string1 = [NSString stringWithFormat:NSLocalizedString(@"This is an %@",@""),@"Apple"];

(変数には、固定された文字列セットだけでなく、何でも含めることができることに注意してください。)

ありがとう!

4

8 に答える 8

125

「This is an Apple/Orange/whatever」のローカライズされたバージョンを返したい場合は、次のようにします。

NSString *localizedVersion = NSLocalizedString(([NSString stringWithFormat:@"This is an %@", @"Apple"]), nil);

NSLocalizedString()(つまり、との入れ子[NSString stringWithFormat:]が逆になっています。)

フォーマットをローカライズしたいが、代入された値をローカライズしたくない場合は、次のようにします。

NSString *finalString = [NSString stringWithFormat:NSLocalizedString(@"SomeFormat", nil), @"Apple"];

そしてあなたのLocalizable.strings

SomeFormat = "This is an %@";
于 2010-08-10T04:17:30.180 に答える
22

多くのプロジェクトで使用している非常に役立つ定義を 1 つ追加したいだけです。

Android の可能性に触発されて、この関数をheader prefixファイルに追加しました。

#define NSLocalizedFormatString(fmt, ...) [NSString stringWithFormat:NSLocalizedString(fmt, nil), __VA_ARGS__]

これにより、次のようなローカライズされた文字列を定義できます。

 "ExampleScreenAuthorizationDescriptionLbl"= "I authorize the payment of %@ to %@.";

次の方法で使用できます。

self.labelAuthorizationText.text = NSLocalizedFormatString(@"ExampleScreenAuthorizationDescriptionLbl", self.formattedAmount, self.companyQualifier);
于 2014-06-02T06:57:34.050 に答える
10

迅速な場合:

let myString = String(format: NSLocalizedString("I authorize the payment of %d ", comment: ""), amount)
于 2017-04-13T14:56:16.540 に答える
4

ターゲットエントリの欠落が原因であることが判明しました。現在のビルド ターゲットに Localizable.string ファイルが含まれていることを確認するだけで、問題は解決しました。

于 2010-11-14T09:18:47.343 に答える
2

ローカライズされた文字列に複数の変数がある場合、次の解決策を使用できますか。

Localizable.strings 内

"winpopup" = "#name# wins a #type# and get #points# points(s)"; 

stringByReplaceingOccurrencesOfString を使用して値を挿入します

NSString *string = NSLocalizedString(@"winpopup", nil); //"#name# wins a #type# and get #points# points(s)"
NSString *foo = [string stringByReplacingOccurrencesOfString:@"#name#" withString:gameLayer.turn];
NSString *fooo = [foo stringByReplacingOccurrencesOfString:@"#type#" withString:winMode];
NSString *msg = [fooo stringByReplacingOccurrencesOfString:@"#points#" withString:[NSString stringWithFormat:@"%i", pkt]];
NSLog(@"%@", msg);
于 2012-04-13T10:02:09.067 に答える
0

これは私のために働く:

NSMutableString *testMessage = [NSMutableString stringWithString:NSLocalizedString(@"Some localized text", @"")];
testMessage = [NSMutableString stringWithString:[testMessage stringByAppendingString:someStringVariable]];
于 2020-11-18T15:09:18.607 に答える
0

あなたのアイデアはうまくいくはずです。しかし、入力パラメーターを取得している場合は、入力パラメーターが Localizable.strings ファイルのキーとして見つからなかったことを意味します。そのファイルの構文と場所を確認してください。

于 2010-08-10T04:58:35.167 に答える