2016-05-27 60 views
0

私は多言語をサポートするアプリケーションで作業しています。すべてがうまくいっています。しかし、実行時に言語を変更する必要があります。
私はそれをこのようにやっている -ランタイム中にlocalizable.stringsまたはNSLocalizedString(キー、コメント)を更新する方法

NSArray* languages = [NSArray arrayWithObjects:@"es",@"en" nil]; 
[[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

それがうまく機能しています。

NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0]; 

このlangIDは正しい言語を示しています。しかし、再起動するまで、アプリはその言語を変更していない。

localizable.stringsファイルまたはNSLocalizedString(キー、コメント)をリフレッシュする方法はありますか?または、再起動せずにそれを行う他の方法?

+0

https://github.com/maximbilan/ios_language_manager あなたは、このソリューションでこれを行うことができます。 –

答えて

0

実行時にアプリケーション言語を変更するには、2つの異なるストーリーボードを作成して手動で行っています。 NSUserDefaultsに言語の設定を保存しましたが、AppleLanguagesのキーではなく、AppDelegateのdidFinishLaunchingWithOptionsという方法でストーリーボードを選択しました。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainEnglish" bundle:nil]; 
UINavigationController *navigationcontroller=[[UINavigationController alloc]init]; 
RegistorViewController *registor=[storyboard instantiateViewControllerWithIdentifier:@"Registor"]; 
[self.window setRootViewController:navigationcontroller]; 
[self.window makeKeyAndVisible]; 
[navigationvontroller pushViewController:registor animated:NO]; 
3

これはすでにStackOverflowで何度も質問されています(iOS change language at runtimeのようなものを検索してください)。

NSLocalizedStringを使用している場合、実行時に言語を変更することはできません。本当に必要な場合は、代わりにカスタムローカリゼーションシステムを使用する必要があります。さらに良いことに、単にそれをしないでください。それは予期せぬことです。結局のところ、ユーザーはシステム設定で自分の好みの言語(およびその順序)を設定することができます。

Someone even asked an Apple engineerと、これが応答である:一般的に

、あなたのアプリケーション内から(AppleLanguages県キーを使用することによって)のiOSシステム言語を変更しないでください。これは、設定アプリで言語を切り替えるための基本的なiOSユーザーモデルに反し、ドキュメント化されていない設定キーも使用します。つまり、将来、キー名が変更される可能性があります。

アプリケーションで言語を切り替える場合は、手動でバンドル内のリソースファイルをロードすることで実行できます。この目的のために、NSBundle:pathForResource:ofType:inDirectory:forLocalization:を使用できますが、アプリケーションがローカライズされたデータのすべての読み込みを担当することに注意してください。

+0

答えに感謝します。私は2つの異なる言語のための2つのストーリーボードを別々に作成し、それに応じて呼びました。 –

関連する問題