質問

私はいくつかのビューを備えたiPhoneストーリーボードを持っています。たとえば、ナビゲーションアイテムのタイトルに名前が付けられています News, 、他の言語用に翻訳する必要があります。

ストーリーボードに新しいローカリゼーションを追加すると、新しい言語用の現在のストーリーボードの複製が作成されました。ここでは、ナビゲーションアイテムのタイトルを変更できますが、私にとってはあまり役に立たないようです。ストーリーボードに100のビューが含まれており、10の言語をサポートする必要がある場合はどうなりますか?元のストーリーボードで何かを変更する必要がある場合は、すべての言語で同じ変更を加える必要があります。それは非常に奇妙に思えます。これはどのような状況で役立ちますか?

代わりに何ができますか?英語のストーリーボードのみを持っていて、ViewControllerの各要素を使用して手動で翻訳する必要がありますか NSLocalizedString?

役に立ちましたか?

解決

コード内のUI要素のタイトルを変更することにより、ローカリゼーションを行うことができます。

self.title = NSLocalizedString("News", nil);

たとえば、オランダ語でアプリをローカライズしたい場合は、 Dutch.lproj/Localizable.strings:

"News" = "Nieuws";

その後、すべてのUI要素と言語に対してこれを行うことができます。

他のヒント

iOS 6には、「ベースインターナショナル化を使用する」という情報タブの下にプロジェクト設定があります。ボックスをチェックすると、すべての文字列がストーリーボードから、国際化された.Stringsファイルに引き出します。

これにより、ストーリーボードの複数のコピーを使用する必要はありません。

enter image description here

iOS 6の時点で、ベース国際化:すべてのストーリーボードとXIB/NIBファイルを使用することを決定できます。Base.lprojという名前のフォルダーには一度だけ存在します。 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";

ポリグロットのローカリゼーションも役立つかもしれません。 nslocalizedString()をコードで呼び出す代わりに、ストーリーボードでキーを直接指定できます。不必要なアウトレットを避け、ボイラープレートコードを削減できます。

https://github.com/negusoft/polyglot

コマンドラインibtoolを学ぶことをお勧めします。それはあなたのすべてのストーリーボードをローカライズするのに役立ちます。:)こちらはここにあります。 http://www.albertmata.net/articles/introduction-ternationalization-using-storyboards on-ios-5.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top