ローカリゼーションまたは Localizable.strings を NSBundle 外のディレクトリから読み取る方法はありますか?
サーバー経由でダウンロードされたファイルからアプリにローカリゼーションを読み込ませようとしていますが、これを行う良い方法はありますか?
前もって感謝します。
ローカリゼーションまたは Localizable.strings を NSBundle 外のディレクトリから読み取る方法はありますか?
サーバー経由でダウンロードされたファイルからアプリにローカリゼーションを読み込ませようとしていますが、これを行う良い方法はありますか?
前もって感謝します。
ファイルを手動で読み取る独自の MyLocalizedString 関数を作成する必要があります。NSPropertyListSerialization
.strings ファイルは、実際には古いタイプのプロパティ リストであるため、次のようなクラスを使用して読み取ることができます。
id plist = [NSPropertyListSerialization
propertyListWithData:[NSData dataWithContentsOfFile:stringsFilePath]
options:0
format:NULL
error:&error];
plist
単なる NSDictionary であるため、次のように結果から文字列値を読み取ることができます。
[plist objectForKey:@"my_string"];
文字列検索ごとにファイル全体を解析しないように、おそらく何らかのキャッシュを実装する必要があります。
およびその他の関連するコマンド ライン ツールを使用している場合genstrings
は、次のオプションを使用してカスタム ルックアップ関数の名前を指定できます。
Usage: genstrings [OPTION] file1.[mc] ... filen.[mc]
...[snip]...
-s substring substitute 'substring' for NSLocalizedString.
これらの文字列ファイルがサーバーにアップロードされている場合、最初にそれらをバイナリ plist 形式に変換することで、アプリのパフォーマンスを少し改善できます (これはビルド中に Xcode が通常行うことです)。
plutil -convert binary1 myStrings.strings
自分でピースを組み立てる必要があります。それを行うための組み込み機能はありません。ローカライゼーションは、開発言語文字列をキーとし、ローカライズされた文字列を値とするシリアル化された辞書にすることができます。編集に最も便利な plist としてシリアル化するか、よりコンパクトなキー付きアーカイブを使用してシリアル化できます。