12

iOSプロジェクトをポルトガル語に翻訳し、pt.lproj / Localizable.stringsファイルを作成し、ソースコードにNSLocalizedString()を追加しました。それはすべてうまくいきます!ちょっとした問題が1つあります。XIBファイル内の文字列が翻訳されないということです...これは仕様によるものですが。

ibtoolコマンドを使用してxというXIBファイルから文字列をリッピングし、x.stringsというファイルに入れることができることを確認しました...しかし、私の質問は、すべてのxibから文字列をプルする方法があるかどうかです。ファイルを作成し、それらをすべて1つの.stringsファイルに入れます(たとえば、Localizable.strings?またはXIBs.stringsと呼ばれる別のファイルでも問題ありませんか?)

4

3 に答える 3

10

xibファイルを翻訳する方法には2つのオプションがあります。NSLocalizedString1つは、UI要素をアウトレットに接続し、マクロを使用してviewDidLoadメソッドで文字列を設定することです。

2番目のオプションは、アプリがサポートする言語ごとに個別のxibを提供することです。手動で作成する必要はありません。次のibtoolコマンドを使用できます(ソース言語が英語で、ターゲットがポルトガル語であると想定しています)。

ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib

プロジェクトで見つかった文字列を収集するには、コマンドを使用できますgenstrings-ただし、このPythonスクリプトを使用してすべての文字列を収集することをお勧めします-翻訳や手動で文字列をアプリに追加/削除する必要がある場合は、この状況をうまく処理できます以前のすべての文字列をマージします

編集

ああ、私はこのトリックを学んだ記事を見つけました

于 2011-12-01T16:37:52.607 に答える
3

私はこれを行うためのカテゴリを作成しました:

@implementation UIView (Localise)

- (void)localise
{
    [self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
        [view localise];
        if ([view isKindOfClass:[UILabel class]]) {
            UILabel *label = (UILabel *)view;
            [label setText:NSLocalizedString(label.text, nil)];
        }
    }];
}

それからあなたの見解では:

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self localise];
}

他のUI要素(textField.placeholder = NSLocal ... blah blah)のサポートを追加する必要がありますが、それでUILabelと子のトリックが実行されます。

おそらくパフォーマンスの面ではそれほど優れていませんが、仕事はします。

于 2013-11-19T17:39:26.510 に答える
0

アプリとローカリゼーションの数によって異なりますが、レイアウトが変更される可能性があるため、通常は個別の.xibファイルを使用します。ローカライズされたファイルをpt.lproj/に配置します。

于 2011-12-01T17:26:55.743 に答える