4

iPhone シミュレーターの設定アプリを使用して言語を切り替えることは、ローカリゼーションの微調整をテストする PITA の方法です。アプリを再起動せずにデバッグ設定を使用して、アプリでその場でローカリゼーション (en/fr/es/etc) を切り替える方法を見つけようとしています。

NSBundle は、任意のローカリゼーションからローカライズされたリソースを要求する方法を提供します。

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName

しかし、文字列管理サブシステムに相当するものは見つかりません。これらの 質問から、登録済みのデフォルトをオーバーライドできるように思えますが、これは間抜けに聞こえ、アプリの再起動が必要です。

ここに他の戦略はありますか?NSLocalizedString を、デバッグ ビルドで独自に機能するものでラップした場合、特定の.stringsファイルをロードするための最短パスは何ですか? これらの文字列テーブルにアクセスして、自分で生で解析せずにプログラムでアクセスする方法はありますか?

ありがとう。

4

3 に答える 3

3

私が理解したこれを行う唯一の方法は、この答えによって提案された微妙なトリックを使用することです。NSLocalizedString()ローカリゼーションの「オーバーライド」を認識し、それが設定されているかどうかに基づいて文字列を取得する方法を選択する関数をラップすることができます。オーバーライドする場合は、ローカリゼーションのディレクトリから「サブバンドル」を作成し、そのバンドルから文字列をプルできます。その要点は次のとおりです。

if (CurrentLocalization != nil) {
    NSBundle * locBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:CurrentLocalization ofType:@"lproj"]];
    return [locBundle localizedStringForKey:key value:nil table:nil];
} else {
    return NSLocalizedString(key, @"");
}    

于 2010-06-28T16:24:05.063 に答える
0

アプリから選択して特定の言語を使用するコツは、選択した言語に応じて NSLocalizedString に特定のバンドルを強制的に使用させることです。

ここに私が書いた投稿がありますhttp://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

ここに 1 つのサンプル アプリのコードがあります https://github.com/object2dot0/Advance-Localization-in-ios-apps

于 2011-05-01T17:37:21.830 に答える
-1

AppleLanguagesデフォルトを優先言語で構成される配列に設定します。最も優先度の高い言語が最初になります。たとえば、英語だけを気にする場合は、次のように設定します。'("en");'

于 2010-06-25T12:45:41.123 に答える