2011-09-13 10 views
0

私のアプリケーションでは、英語の一部の場所でいくつかのメッセージを表示したいと思います。そのためには、ユーザーが選択したローカリゼーションに関係なく、メッセージを常にEnglish.lproj/Localizable.stringsファイルから読み取る必要があります。 NSLocalizedStringメソッドは、現時点ではローカライズされた文字列を返すので、この目的には使用できません。デフォルト(または開発用)ローカリゼーションリソースファイルから文字列を読み込む方法を提案してください。Cocoa/Obj-c:優先ローカライゼーションに関係なく英語のlocalizable.stringsから文字列を取得する方法

答えて

0

NSLocalizedStringFromTableを試しましたか?文字列に使用するファイルを指定できます。あなたは手動でそれを行うために必要があるとしている

+0

-1は機能しません。これにより、言語ではなく '.strings'ファイルの名前を指定することができます。 –

4

は、次のように:だから

- (NSString *)englishLocalizedStringForKey:(NSString *)key inTable:(NSString *)table { 
    if (table == nil) { 
    table = @"Localizable"; 
    } 

    NSString *path = [[NSBundle mainBundle] pathForResource:table 
                ofType:@"strings" 
               inDirectory:nil 
              forLocalization:@"en"]; 
    if (path == nil) { 
    return nil; 
    } 

    NSData *data = [NSData dataWithContentsOfFile:path]; 
    id plist = [NSPropertyListSerialization propertyListWithData:data 
                 options:0 
                 format:NULL 
                 error:NULL]; 

    if (![plist isKindOfClass:[NSDictionary class]]) { 
    return nil; 
    } 

    return [plist objectForKey:key]; 
} 

、ここで何が起こっているのです。

  • あなたはen.lprojフォルダ内のファイルであれば
  • リターンnil{table}.stringsのパスを探すnil
  • に渡すことが起こった場合@"Localizable"をデフォルト、パラメータからテーブル(文字列はファイル)の名前を取得します。存在しません
  • ファイルのデータの塊として読み取る
  • ブロブをプロパティリストとしてデコードしようとしました。 .stringsファイルは古いスタイルのplistの形式であるので、これは動作しますので、我々は我々がNSDictionary背中を取得していない場合は、私たち
  • ためNSDictionaryにそれを構築するために、このplistのパーサーを使用nil
  • リターンを返すことができるものは何でも要求キー(鍵が見つからない場合nilを返すことがあります。)

読み取りおよびデシリアライズビットが潜在的に高価なことができますのための辞書は持っているので、私はどこかのプロパティに適切な情報をキャッシュするお勧めします。

+1

それは私のために働いてくれてありがとう。私がここで行った変更のみは、辞書自体のファイルを読むことです。 NSDictionary * dictionary = [NSDictionary dictionaryWithContentsOfFile:path]; – Abhijeet

+0

ああ、いいですか?pathForResource:ofType:inDirectory:forLocalization: – Monolo

1

これらの特殊文字列を独自の文字列テーブルに配置し、そのテーブルを英語のローカリゼーションに配置することをおすすめします。ベネディクトが提案するように、この方法でNSLocalizedStringFromTable()を使用することができます。ローカライゼーション機能は、要求されたファイルが見つかるまで、ユーザーの優先検索順序を使用してロケールを検索します。

この方法の利点は、この表にのみ表示される文字列の翻訳を避けることができることです。

+0

しかし、これらの特別なメッセージもローカライズする必要があります。だから私は別のファイルに入れられません。 – Abhijeet

関連する問題