私がやったこと。私はそのトリックがNSLocalizedStringの代わりにNSLocalizedStringFromTableInBundleを使うことだったと思います。
すべての文字列の場合、あなたはおそらく新しいの文字列を更新するために、どんなアップデートのコードを呼び出すことになるでしょう、この後
NSString * language = @"zh-Hans"; //or whatever language you want
NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"];
if (path) {
self.localeBundle = [NSBundle bundleWithPath:path];
}
else {
self.localeBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"] ];
}
をこのコードを実行する、言語を変更するには、この
someLabel.text = NSLocalizedStringFromTableInBundle(@"Your String to be localized, %@",nil,self.localeBundle,@"some context for translators");
を使用言語、例えばこれをもう一度実行してください。
someLabel.text = NSLocalizedStringFromTableInBundle(@"Your String to be localized, %@",nil,self.localeBundle,@"some context for translators");
アプリを再起動する必要はありません。システム設定にも対応しています(iOS設定で言語を設定しても動作します)。外部ライブラリは必要ありません。脱獄は必要ありません。そしてそれもgenstringsで動作します。もちろん
アプリの設定を永続化するために、あなたはまだ通常の作業を行う必要があります。
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"zh-Hans", nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
を(そして、あなたのviewDidLoadか何かでチェックを行う)
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"];
if (path) {
self.localeBundle = [NSBundle bundleWithPath:path];
}
else {
self.localeBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"] ];
}
チェックをそれが動作するこの回答http://stackoverflow.com/questions/5912018/language-change-only-after-restart- on-iphone –