Localizable.strings ファイルを plutil で読み込んで変換する
plutil -- property list utility コマンドで Localizable.strings (strings file format) を読み込む事が出来るらしいので試してみる。
元ファイルは以下
/* Localizable.strings Test */ "Yes" = "はい"; "No" = "いいえ"; "Cancel" = "キャンセル"; "Title" = "タイトル";
変換オプションは
plutil -convert <fmt> <filepath>
で fmt は xml1, binary1, json の3つ
XML
コマンド
plutil -convert xml1 <filepath>
結果
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Cancel</key> <string>キャンセル</string> <key>No</key> <string>いいえ</string> <key>Title</key> <string>タイトル</string> <key>Yes</key> <string>はい</string> </dict> </plist>
JSON
コマンド
plutil -convert json <filepath>
結果
{"Yes":"はい","Cancel":"キャンセル","No":"いいえ","Title":"タイトル"}
Binary Plist
コマンド
plutil -convert binary1 <filepath>
結果
中身のテキストはXMLと同じで、フォーマットが binary plist 形式になっている。
JSONフォーマットオプション
JSON変換用のオプションで空白と改行を入れて human-readable にする
plutil -convert json -r <filepath>
結果
{ "Yes" : "はい", "Cancel" : "キャンセル", "No" : "いいえ", "Title" : "タイトル" }
拡張子オプション
ファイルを上書きせず元ファイルと同じディレクトリへ指定した拡張子でファイルを書き出す。
plutil -convert json -e json <filepath> plutil -convert xml1 -e xml <filepath> plutil -convert binary1 -e plist <filepath>
書き出し先オプション
書き出し先のファイルパスを指定
plutil -convert json -o <output_filepath> <filepath>
lint
ファイルフォーマットが正しいかどうかを調べ、セミコロンが抜けている箇所などを教えてくれる
plutil -lint <filepath>
結果
<filepath>: OK
CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 8. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug. <filepath>: Unexpected character / at line 1
という事で plutil の中身は CFPropertyListCreateFromXMLData
で動いているらしい。
plutil を使った時の難点
そもそも strings file format での書き出しが出来ないので読み込みにしか使えないのがイマイチ。
関連