私の要件は、ローカライズされた XIB をアプリ内から切り替えることです。通常、XIB をローカライズして [設定] から言語を変更すると、特定の言語にローカライズされた XIB が自動的に読み込まれます。
以下の画像のような XIB があります。
アプリケーション内のボタンタップで特定の言語が選択されたときに、XIB をロードしたいと考えています。このようなアプリケーションのソース コードは、ここにあります。
これどうやってするの?
私の要件は、ローカライズされた XIB をアプリ内から切り替えることです。通常、XIB をローカライズして [設定] から言語を変更すると、特定の言語にローカライズされた XIB が自動的に読み込まれます。
以下の画像のような XIB があります。
アプリケーション内のボタンタップで特定の言語が選択されたときに、XIB をロードしたいと考えています。このようなアプリケーションのソース コードは、ここにあります。
これどうやってするの?
簡単な方法を作成して問題を解決しました。以下を参照してください
-(void)changeControllersForLanguage:(NSString *)language{
NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]; //Detecting specific language lproj folder
if (path) {
//Creating Local Bundle from the language specific bundle path
NSBundle *localeBundle = [NSBundle bundleWithPath:path];
NSArray *controllers=self.tabBarController.viewControllers;
for(UIViewController *view in controllers){
[localeBundle loadNibNamed:NSStringFromClass([view class]) owner:view options:nil];
}
}
}
次に、ボタンタップで以下のように関数を呼び出します
- (IBAction)toggleLanguage:(id)sender {
UIButton *btn=(UIButton *)sender;
switch (btn.tag) {
case 1://French
[self changeControllersForLanguage:@"fr"];
break;
case 2://English
[self changeControllersForLanguage:@"en"];
break;
default:
break;
}
}
それは本当にうまくいきました.. :)