7

簡単に言えば、正の整数 [9, 393, 3, 993] があり、それを特定の言語 [٩, ٣٩٣ ,٣ ,٩٣٩] にローカライズしたいと考えています。

を使用するNSNumberFormatterと、ユーザーのロケールに従って番号がローカライズされます。ただし、それをオーバーライドして、数値を翻訳するロケールを選択したいと考えています。

私は次のことを試しましたが、うまくいきませんでした:

// user locale is @"en"
NSNumberFormatter* formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterNoStyle];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ar"]];


[formatter setMinimumIntegerDigits:padding];
return [formatter stringFromNumber:@(num)];

返される文字列は英語です。


の非常によく似たコード スニペットがありますが、期待どおりに動作することに注意してくださいNSDateFormatter。オブジェクトは、設定されたNSDateFormatterロケールに従います。

4

1 に答える 1

4

アプリのロケールが狂ってしまうという非常に特殊なケースに遭遇したようです。

次のようなものを使用して、アプリのデフォルトのロケールを変更しています。

[[NSUserDefaults standardUserDefaults] setObject:@[@"ar"] forKey:@"AppleLanguages"];

次に、優先言語を取得し、それからロケール オブジェクトを作成しようとしました。

NSString* langPrefix = [NSLocale preferredLanguages][0];

NSLocale最後に、返されたオブジェクトから新しいオブジェクトを作成します。コードをテストするときは、アプリ内から言語を変更し、Xcode を使用してアプリを閉じます。NSUserDefaultsは同期しないと想定していますが、synchronizeメソッドを呼び出しても、まだ失敗します。

要するに、ローカリゼーションのテストは、アプリをデプロイして行う必要があり、デバイスが Xcode から切断された後に行う必要があります。これにより、アプリはライフサイクルのすべての段階で適切に実行されます。

于 2012-12-07T18:52:24.223 に答える