makeとgnu sedでローカライズ

genstrings便利なんだけど、使うたびに全部やり直すはめになる。ので、自動化。

1、プロジェクトのディレクトリにMakefileを用意します。このMakefileはgenstringsを使用してLocalized.stringsを生成します。

LocalizeFiles=XspfMLabelMenuView.m \
			  XspfMMainWindowController.m \
			  XspfMLibraryViewController.m \
			  XspfMCoverFlowViewController.m \
			  XspfManager.m

Localizable: ${LocalizeFiles}
	genstrings -o English.lproj $^
	(cd English.lproj; ${MAKE} $@;)
	genstrings -o Japanese.lproj $^
	(cd Japanese.lproj; ${MAKE} $@;)

checkLocalizable:
	(cd English.lproj; ${MAKE} $@;)
	(cd Japanese.lproj; ${MAKE} $@;)

こんな感じ。


2、Japanese.lproj等にMakefileを用意します。こちらは置換用。

SED=/usr/local/bin/sed

Loaclize_template=Localizable.strings.sed
temp_file=l.text
working_enc=utf-8

Localizable: Localizable.strings
	/usr/bin/iconv -f utf-16 -t ${working_enc} $< | ${SED} -f ${Loaclize_template} > ${temp_file}
	/usr/bin/iconv -f ${working_enc} -t utf-16 ${temp_file} > $<
	/bin/rm ${temp_file}

checkLocalizable:
	plutil Localizable.strings

gnu sedはUTF16を扱えないようなので一旦UTF8に変換して戻してます。
Mac OS X 10.3位に入ってたsedはUTF8も扱えなかったのでgnu sed使ってます。


3、置換用のLocalizable.strings.sedを用意します。

s/Blue/ブルー/2
s/Gray/グレー/2
s/Green/グリーン/2
s/None/なし/2
s/Orange/オレンジ/2
s/Purple/パープル/2
s/Red/レッド/2
s/Yellow/イエロー/2

$a\
/* Favorites */\
"Favorites" = "お気に入り";\
\
/* Library */\
"Library" = "ライブラリ";

とか。


さらに

make Localizable

だけのシェルスクリプトターゲットを追加しておくと便利。

もちろん置換スクリプトはrubyでもpythonでもなんでもOK。