2009-07-07 4 views

答えて

11

複数のローカライズされたnibファイルを作成する方法もあります。これは、ローカリゼーションのニーズが非常に単純で、開発終了時に専門のソフトウェアローカリゼーション担当者にリソースを渡すだけの場合に最適です。

開発中にローカライズしていて、UIが急速に変化している場合は、各UI tweekが各ローカルバージョンのペン先に複製される必要があるため、重複したnibファイルに大きな苦労があります。これを避けるには、通常はビューコントローラの-viewDidLoadメソッドで、ローカライズされた文字列の設定を処理するために、ビューコントローラにコードを記述する必要があります。ローカライズされたテキストを持つすべてのコントロールがIBOutletであることを確認し、それらをIBのビューコントローラに配線します。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    hello.text = NSLocalizedString(@"Hello", @"Hello label"); 
    world.text = NSLocalizedString(@"world", @"world label"); 
    // ... etc 
} 

後のあなたの-initメソッドが実行されるまで、あなたのペン先でオブジェクトが完全に作成されていないので、あなたは-viewDidLoadでビューセットアップのこのタイプの操作を行います。その後、あなたのビューコントローラの-viewDidLoadは次のようになります。 -viewDidLoad-initの後に表示されますが、ビューが表示される前に実行されます。

3

ロケールごとに複数のバージョンの.nibファイルを作成できます。それらの文字列を簡単に編集できるツールもあります。アップルはこれにpretty good documentationを持っています。

2

私は解決策も探していましたが、必ずしもiPhoneではなくXCode/IBが一般的です。すべての参考文献は、状態を示すために内部的にキーが必要であり、ローカライズされた文字列を、そのキーに対応するラベルまたはテキストセルに表示する必要があるという事実を扱っていませんでした。私は最初のステップで標準的なアプローチを見つけることができませんでした。共有ユーザーのキーのキー値がデフォルトで表示され、そのキー値のローカライズされた文字列がラベルに表示されます。

私は、多くのコーディングを必要とせず、ibのバインディングに準拠したソリューションを見つけました。

まず、Localizable.stringsファイルを提供します。

"MyKeyValue" = "Localized display label"; 

これで、NSLocalizedString(aKeyValue、nil)でキー値をローカライズできます。

NSLocalized Stringを扱うバリュートランスフォーマが見つかりませんでした。 だから私はローカライズされた文字列にキーの値を変換するために、クラスKeyToLocalizedStringTransformerを作成:

@interface KeyToLocalizedStringTransformer : NSValueTransformer {} 

@implementation KeyToLocalizedStringTransformer 

+ (Class)transformedValueClass 
{ 
    return [NSString class]; 
} 

+ (BOOL)allowsReverseTransformation 
{ 
    return NO; 
} 

- (id)transformedValue:(id)aValue 
{ 
    NSString *NLString = [NSString stringWithString:NSLocalizedString(aValue,nil)]; 
return NLString; 
} 

製造するための最終ステップは、例えばトランスを登録することです

NSValueTransformer *transformer = [[KeyToLocalizedStringTransformer alloc] init]; 
[NSValueTransformer setValueTransformer:transformer forName:@"KeyToLocalizedStringTransformer"]; 

今、あなたはあなただけNSUnArchiveFromDataというように見ていた場合(単純に名前を入力テキストフィールドまたはセルのバインディングの値の変圧器を使用することができます...:+初期化中)

私はここで新しいと "評判がない"ため、あなたは共有ユーザーのデフォルトコントローラー、コントローラーキー:値、モデルキーパス:MyStateKeyと値へのバインディングを想像する必要があります説明したように変圧器。

結果として、ラベル付きのnl複製されたペン先で何もしないでください。単に、Localizable.stringsの文字列を翻訳してください。

0

iOS 7 & Xcode 5では、可能な限りNSLocalizedStringを使用しないでください。好ましい方法は「ベースローカライゼーション」と呼ばれ、ストーリーボードを通して機能します。それはあなたに多くの仕事を節約します。あなたが 'ベースローカリゼーション'のためのgoogleの場合は、あなたに行くための十分なチュートリアルを見つける

関連する問題