ObjecTips

Swift & Objective-C で iOS とか macOS とか

Localizable.strings ファイルを Cocoa で読み書きする

ローカライズに用いる Localizable.strings ファイルは NSDictionary で簡単に読み書きができる。
例えば以下のような Localizable.strings があった時

/* 
  Localizable.strings
  Test
*/

"Yes" = "はい";
"No" = "いいえ";
"Cancel" = "キャンセル";
"Title" = "タイトル";
読み込み
    NSURL *URL; // URL to read
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL:URL];
    NSLog(@"%@", dict);

ログ出力

{
    Cancel = "\U30ad\U30e3\U30f3\U30bb\U30eb";
    No = "\U3044\U3044\U3048";
    Title = "\U30bf\U30a4\U30c8\U30eb";
    Yes = "\U306f\U3044";
}
書き出し
    NSURL *temporaryURL = [[NSURL fileURLWithPath:NSTemporaryDirectory()] URLByAppendingPathComponent:@"temporary.strings"];
    [dict.descriptionInStringsFileFormat writeToURL:temporaryURL atomically:YES encoding:NSUTF8StringEncoding error:nil];

書き出されたファイル

"Yes" = "\U306f\U3044";
"Cancel" = "\U30ad\U30e3\U30f3\U30bb\U30eb";
"No" = "\U3044\U3044\U3048";
"Title" = "\U30bf\U30a4\U30c8\U30eb";

NSDictionary を使った時には以下の難点がある

  • 書き出し後のファイルのキーの順序がソートされて元の並びと異なってしまう
  • コメントが消えてしまう
  • 日本語がユニコードのエスケープシーケンスの形になってしまう

という事で、単純にファイル内のキーと値を読み込む分には良いけど値を加工して書き出す場合にはオススメできない。

関連