T

Titaniumとi18nとXcode

UPDATE: Titnaium mobile SDK 1.7系だとLocalizable.stringsが壊れてちゃんと動かない!自前でXMLをパースしてテキストに変換して対応した。

Titanium Mobileにはプロジェクト/i18n/locale(jaとかenとか)/strings.xmlというファイルを置くだけで国際化対応できる仕組みが用意されているのだけれど、Xcodeとの相性が悪い。Titaniumでビルドした後、Xcodeからコード署名やら何やらをしてリビルドすると、文字列の変換をやってくれなくなるのだ。普通にTitaniumからビルドして実機で確認したりリリースまでやってしまえば問題ないのだけれど、なかなかそうもいかない(ソースコードで納品するとか)場合は困ってしまう。というか、実装としてこれはいかがなものか。

そこでいろいろ調べてみたのだけれど、Titaniumでビルドを実行して作成される.appの中にi18n以下に作成したロケールの分だけ「en.lproj/Localizable.strings」「ja.lproj/Localizable.strings」みたいなファイルが作成されているのがわかった。これらはiOSの国際化対応の仕組みで利用される言語ファイルなのだが、どうやらTitaniumがビルド時にi18nディレクトリ以下を走査してXMLから生成しているようだ。でも、Xcodeがビルドする際には当然ながらi18nディレクトリなんか見ないので、一度クリーンしてビルドすると無から有は生まれないように、各ロケール用ファイルは無視されてしまう。

もっとも単純なやり方は、いったんTitaniumからビルドして、transport.pyなどで必要なファイルをプロジェクト/build/iphone以下にコピーする。それから、作成された.appファイルをプロジェクト/build/iphone/build以下のどこかから探してきて、右クリックでもなんでもいいからパッケージの中身を表示、中にある「ロケール名.lproj/Localizable.strings」をどこかにコピーしてバックアップする。Xcodeからプロジェクトファイルを開き、Resouces以下とかにこのLocalizable.stringsを追加したら、ちゃんと動作した。命名規則でこのファイル名ならローカライゼーション用のリソースだと判定されるらしい。

Localizable.stringsはUTF-16で記述されているので、読み込んだ際は盛大に文字化けするので驚かされるが、文字エンコーディングを指定すれば直る。

Posted by on 5月 7, 2011 in Apple

コメントを残す