2011-12-01 8 views
12

iOSプロジェクトをポルトガル語に翻訳しています.pt.lproj/Localizable.stringsファイルを作成しました。NSLocalizedString()をソースコードに追加しました。それはすべて動作します!ちょっとした問題がありますが、XIBファイル内の文字列は翻訳されません。iOS Localizable.stringsファイル(XIBファイル用)

ibtoolコマンドを使ってxというXIBファイルから文字列を取り除いてx.stringsというファイルに入れることができますが、私の質問は文字列を引き出す方法ですすべてのxibファイルから1つの.stringsファイル(例:Localizable.strings?またはXIBs.stringsという別のファイルでも問題ありません)に入れてください。

答えて

10

xibファイルの変換方法は2通りあります。 1つは、NSLocalizedStringマクロを使用して、UI要素をアウトレットに接続し、viewDidLoadメソッドで文字列を設定することです。

第2の選択肢は、アプリがサポートする言語ごとに別々のxibを提供することです。あなたはibtoolコマンドを使用することができ、それらを手動で作成する必要はありません(私はあなたのソース言語が英語であると仮定し、目標はポルトガル語です):

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

あなたはgenstringsコマンドを使用することができ、プロジェクトで見つかった文字列を収集するには - しかし、私は、すべての文字列を収集するために、このpython scriptの使用をお勧めします - あなたはあなたのアプリケーションに文字列を追加/削除する必要がある場合には、うまく変換および/または手動でマージすることなく、状況に対処することができ、以前のすべての文字列

編集

ああと私はアプリとローカリゼーションの数に依存するだろうが、レイアウトが変更される可能性があるため、一般的に、私は、別の.xibファイルを好む

+0

さて、これを行う簡単な方法はありません。私は約40のnibファイルがあるので、私はIBOutletsルートをやろうと思っていますが、いくつかの文字列はそれらの間で共有されています(そして私たちは最終的に10の言語がほしいと思っています。 NIBを通過し、ラベルなどが他の言語用のテキストを少しでも受け入れることができるようにします(それ以外の場合は同じです)。とにかく、助けてくれてありがとう! – Javawag

0

からこのトリックを学んだarticleを見つけました。ローカライズされたファイルをpt.lproj /に置きます。

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と子供のためのトリックをするでしょう。

おそらくパフォーマンスはあまり良くありませんが、仕事をします。

関連する問題