0

ローカライズされた文字列のリストを含むテーブルを表示したいと思います。

簡単な方法は次のとおりです。

a)データソースをViewControllerにポイントします

b)配列を定義する

c)ViewControllerに配列を割り当て、ローカライズされたリソース(NSLocalizedString)からの文字列で配列を初期化します(arrayWithObjects)

d)UITableViewDataSource委任メソッドでこの配列を使用します

主に私の懸念は項目b)です。構造がかなり重く見えますが、ローカライズされた文字列のリスト全体を一度に指定してロードできるかどうか疑問に思います。

4

1 に答える 1

3

ファイルで定義されたすべてのキーを含む配列が必要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にロードし、実行時に使用できます。

于 2012-09-03T22:03:18.237 に答える