IPhoneのストーリーボードにはいくつかのビューがあります。たとえば、ナビゲーションアイテムのタイトルはNews
という名前で、他の言語に翻訳する必要があります。
ストーリーボードに新しいローカライズを追加すると、新しい言語の現在のストーリーボードの複製が作成されました。ここでは、ナビゲーション項目のタイトルを変更できますが、私にとってはあまり便利ではないようです。ストーリーボードに100ビューが含まれており、10言語をサポートする必要がある場合はどうなりますか?元のストーリーボードで何かを変更する必要がある場合は、すべての言語で同じ変更を行う必要があります。それはとても奇妙に思えます。これはどの状況で役立ちますか?
代わりに何ができますか?英語のストーリーボードのみを用意し、NSLocalizedString
を使用してViewControllerの各要素を手動で翻訳する必要がありますか?
コード内のUI要素のタイトルを変更することにより、ローカライズを行うことができます。
self.title = NSLocalizedString("News", nil);
たとえば、アプリをオランダ語にローカライズする場合は、Dutch.lproj/Localizable.strings
:
"News" = "Nieuws";
その後、すべてのUI要素と言語に対してこれを実行できます。
IOS 6の[情報]タブには、[ベースの国際化を使用する]というプロジェクト設定があります。チェックボックスをオンにすると、すべての文字列がストーリーボードから国際化された.stringsファイルにプルされます。
これにより、ストーリーボードのコピーを複数持つ必要がなくなります。
IOS 6の時点で、Base Internationalizationを使用することを決定できます。すべてのストーリーボードとxib/nibファイルは、Base.lprojという名前のフォルダーに1回だけ存在します。 GUI要素のローカライズは、各ローカライズディレクトリの関連する.stringsファイルに配置されます。
たとえば、「MainStoryboard.storyboard」はBase.lprojに配置されます。 「MainStoryboard.strings」と呼ばれる関連ファイルは、en.lprojおよび適用するローカリゼーションに配置されます。
これは、特にレイアウトの制約と組み合わせて、非常にハンサムです!
こちらのビデオチュートリアルが役に立つかもしれません:
http://www.youtube.com/watch?v=cF1Rf02QvZQ
アプローチは、ローカライズする言語ごとに個別のストーリーボードを用意してから、他のすべての言語の元のストーリーボードで行った変更の伝播をスクリプトに任せることです。
IOS 5の展開ターゲットとストーリーボードを持つアプリの場合、次のようなものを使用して、ストーリーボード上の最初のViewControllerがUITabBarController
であるタブをローカライズします。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// ...
if ([self.window.rootViewController isKindOfClass:UITabBarController.class]) {
UITabBarController *tabBarController = (UITabBarController *) self.window.rootViewController;
// Localize tab items
NSArray *tabBarItems = tabBarController.tabBar.items;
[tabBarItems enumerateObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(UITabBarItem *item, NSUInteger tabIndex, BOOL *stop) {
NSString *keyName = [NSString stringWithFormat:@"tabBarItem%i", tabIndex];
item.title = NSLocalizedString(keyName, @"TabBarItems");
}];
} else {
// The root view controller is not the UITTabBarController
}
// ...
}
私のLocalizable.strings
ファイル:
// MARK: TabBar
"tabBarItem0" = "My First Tab Label";
"tabBarItem1" = "My Second Tab Label";
"tabBarItem2" = "My Third Tab Label";
Polyglot Localizationも役に立つかもしれません。 NSLocalizedString()をコードで呼び出す代わりに、ストーリーボードでキーを直接指定できます。不要なコンセントを避け、定型コードを削減できます。
すべてのストーリーボードのローカライズに役立つコマンドラインibtoolを学ぶことをお勧めします:)ここにチュートリアルがあります -using-storyboards-on-ios-5.html