私のアプリが表示される言語/ロケールをユーザーが選択できるようにすることに興味があります。正しいバンドルをロードする方法、正しい文字列ファイルを選択する方法などを考えましたが、制御できないたとえば、コントロールを切り替えます。iOS:ユーザーのロケールを偽装する方法はありますか?
システムに、このアプリケーションが現在のシステム設定ではなく特定の言語で動作するようにする方法はありますか?
私のアプリが表示される言語/ロケールをユーザーが選択できるようにすることに興味があります。正しいバンドルをロードする方法、正しい文字列ファイルを選択する方法などを考えましたが、制御できないたとえば、コントロールを切り替えます。iOS:ユーザーのロケールを偽装する方法はありますか?
システムに、このアプリケーションが現在のシステム設定ではなく特定の言語で動作するようにする方法はありますか?
少なくともハッキーな方法は、NSUserDefaults
経由です。ロケールはAppleLocale
(ロケールIDは文字列)で、言語はAppleLanguages
(言語IDの配列)の最初の一致によって決まります。あなたのアプリはのこれらのデフォルト値をに上書きすることができます。アプリによってオーバーライドされているかどうかを確認するには、[defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"]
のようなものを使用できます。上書きを削除するには、-removeObjectForKey:
を使用します。
どのようにしても、言語を変更するときはおそらくrelaunch the appにする必要があります。 OS XとiOSアプリケーションは、実行時に言語を変更するようには設計されていません(OS Xでは、新しく起動されたアプリケーションのみが言語の変更を認識し、iOSではシステムを使用して言語を変更します)。
私は、この機能を追加して、スイッチング言語を開発/テストしやすくしました。これがApp Storeのレビュープロセスに失敗するかどうかはわかりません。
ありがとう@tc。これはおそらくこれから離れていくものだと思われますが、詳細な選択肢に感謝します。 – Mike
Whoa-whoo。 'method_setImplementation(class_getInstanceMethod([NSLocale class]、@ selector(currentLocale))、(IMP)spoofedImpl);'? –
何も言わずにそれを行うには? – Mike
NSLocaleのカテゴリを作成して、クラスメソッドの選択したロケールを返そうとしましたか? –