58

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

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

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

4

7 に答える 7

109

iOS 6では、[情報]タブの下に[ベースの国際化を使用する]というプロジェクト設定があります。このチェックボックスをオンにすると、すべての文字列がストーリーボードから国際化された.stringsファイルにプルされます。

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

ここに画像の説明を入力してください

于 2012-10-04T16:18:09.307 に答える
39

iOS 6以降、BaseInternationalizationの使用を決定できます。すべてのストーリーボードおよびxib/ nibファイルは、Base.lprojという名前のフォルダーに1回だけ存在します。GUI要素のローカリゼーションは、各ローカリゼーションディレクトリの関連する.stringsファイルに配置されます。

たとえば、「MainStoryboard.storyboard」はBase.lprojに配置されます。「MainStoryboard.strings」と呼ばれる関連ファイルは、en.lprojおよび適用するローカリゼーションに配置されます。

これは、特にレイアウトの制約と組み合わせると、非常にハンサムです。

于 2012-07-21T17:54:50.520 に答える
11

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

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

たとえば、アプリをオランダ語でローカライズする場合は、次の場所にありますDutch.lproj/Localizable.strings

"News" = "Nieuws";

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

于 2011-12-06T16:27:24.740 に答える
6

このビデオチュートリアルはここで役立つかもしれません:

http://www.youtube.com/watch?v=cF1Rf02QvZQ

アプローチは、ローカライズする言語ごとに個別のストーリーボードを用意し、スクリプトに、他のすべての言語の元のストーリーボードで行った変更の伝達を任せることです。

于 2012-03-13T00:47:15.300 に答える
3

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";
于 2013-03-27T09:20:09.637 に答える
2

PolyglotLocalizationも役立つ場合があります。コードでNSLocalizedString()を呼び出す代わりに、ストーリーボードでキーを直接指定できます。不要なコンセントを避け、ボイラープレートコードを減らすことができます。

https://github.com/negusoft/Polyglot

于 2015-10-12T19:36:33.433 に答える
1

すべてのストーリーボードをローカライズするのに役立つコマンドラインibtoolを学ぶことをお勧めします:)ここにチュートリアルがありますhttp://www.albertmata.net/articles/introduction-to-internationalization-using-storyboards-on-ios- 5.html

于 2012-08-02T22:59:16.830 に答える