nibtoolの.strings辞書をibtool用の辞書に変換するコマンドラインツールを
作成して、自分のプロジェクトで使えたので公開します。
感想や不具合などあれば、お知らせいただけるとうれしいです。
http://kirika.la.coocan.jp/archive/misc/nib2ibstr.rb.txt
(使い方)
nibtool用の.stringsファイルと対象の.nibファイルを入力として、ibtool用の
.stringsファイルを生成することができます。
% nib2ibstr.rb --help
Usage: nib2ibstr.rb -i nib.strings -o ib.strings -n English.lproj/MainMenu.nib
nib2ibstr.rb -i nib.strings -o ib.strings -t ib-org.strings
-o, --output-ibstr=STRINGS output ibtool .strings [default: stdout]
-t, --template-ibstr=STRINGS template ibtool .strings
-n, --target-nib=NIBFILE target .nib file
(背景)
Leopardでnibtoolが廃止され、ibtoolというコマンドになりました。
今までnibtoolにより
% nibtool -w Japanese.lproj/MainMenu.nib -d Japanese.strings \
English.lproj/MainMenu.nib
とローカライズできましたが
% ibtool --write Japanese.lproj/MainMenu.nib \
--strings-file Japanese.strings English.lproj/MainMenu.nib
というようにオプションが変わりました。それだけでなく変換に利用する
.stringsファイルの形式も変更されています。
たとえば nibtool では
-----------------------------------------------------
/* NSMenuItem : <title:Copy> (oid:290) */
"Copy" = "コピー";
-----------------------------------------------------
となっていたものが、
-----------------------------------------------------
/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "290"; */
"290.title" = "コピー";
-----------------------------------------------------
のように書く必要があります。
(処理内容)
(1)対象の.nibファイルからibtoolの--generate-stringsの機能を利用してibtool用の.stringsファイルを作成します。
(2)nibtool用の.stringsと(1)で作成されたファイルの表記が一致するエントリを翻訳後の値で置換します。
"290.title" = "Copy"; /* (1)ibtoolから生成した翻訳元の.stringsファイル */
^^^^
"Copy" = "コピー"; /* nibtoolで利用していたファイル */
^^^^ ~~~~~~
一致 この文字で置き換え
↓
"290.title" = "コピー"; /* (2)変換後 */
このように値ベースの置換ですから、完全にうまくいくとは限りません。
ですが、今までのnibtoolの仕様を考えると、実用的な結果が得られると思っています。
--
kimura wataru