ファイルで定義されたすべてのキーを含む配列が必要Localizable.strings
ですか?
ファイルは辞書を含むplist形式のOld-ASCII-Styleに対応する形式であるため、これは実際には非常に簡単.strings
です(通常、このOld-ASCII-Styleplist形式で囲む必要がある囲み中括弧は辞書は黙って無視されます)。
Localizable.strings
したがって、ファイルのコンテンツをにロードするだけで、準備は完了NSDictionary
です。
NSString* stringsPath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings"];
NSDictionary* locStringsDict = [NSDictionary dictionaryWithContentsOfFile:stringsPath];
NSLog(@"locStringsDict = %@", locStringsDict);
NSArray* localizedStrings = locStringsDict.allValues;
NSLog(@"All localized strings in current language = %@", localizedStrings);
もちろん、ローカライズされた文字列の一部のみが必要な場合は、次のことができます。
- 必要な文字列を別の「.strings」ファイル(別名、別の文字列テーブル)に配置します
- または、必要な文字列に対応するすべてのキーのNSArrayを作成し、それらをループして、これらのキーのローカライズされた文字列のNSArrayを構築し、
NSLocalizedString
各キーエントリを呼び出します。
[編集]
strings
ファイルは、最終的なアプリケーションに埋め込まれる前にバイナリplistにコンパイルされているように見えることに注意してください(サンプルプロジェクトでテストしただけです)。したがって、アプリケーションが実行されると、Localizable.strings
ファイルはバイナリplistになります(つまり、ファイルの元のコンテンツは返され[NSString stringWithContentsOfFile:stringsPath encoding:0 error:nil]
ませんLocalizable.strings
が、一部のバイナリデータはジャンク文字列として解釈され、元のファイルにはアクセスできなくなります)
したがって、キーの順序を維持したい場合、他の唯一のオプションはstrings
、実行時ではなく、コンパイル前に元のファイルを解析することです。そのための最良の選択は、おそらくIMHOが、たとえばいくつかの単純なXSLTスタイルシートを使用して、そこからキーstrings
を使用してファイルをXML Plistに変換し、そこから抽出することです。plutil -convert xml1 Localizable.strings -o -
スタイルシートは、抽出されたキーを、それらのキーのNSArrayを期待される順序で表す新しいXML plistに直接変換することもできるため、コードによってこのplistをNSArrayにロードし、実行時に使用できます。