2013/04/12

Titanium module ios の国際化リソースはどう配置すべきなのか?

昨日@k0sukeyさんのTiAppirater を i18n するよ!に触発されて、ios用Titanium Moduleへのリソース、特に国際化リソース周りについて調べ始めた。

はじめ、@k0sukeyさんの方法とは違って、モジュールのプロジェクトディレクトリの"assets"に国際化リソースをほうりこめば、Titaniumがよろしくやってくれるのではないかと考えたが、そうはいかなかった。
確かに"assets"に置いておけば、配布用のモジュールに必要なリソースが同梱されるし、モジュールを読み込んだTi アプリにも同梱される。しかし、それらは、アプリが通常参照するリソースバンドルではなく、
modules/<module id>/
以下に配置されて、イメージなど、モジュールの他のassetsリソースと同様に扱われてしまう。その結果、モジュール側から、
NSLocalizedStringFromTable
しても、見に行く場所が違うので、空振りに終わる訳だ。

解決策の方向は2通りあるだろう
1)builder.py, localecompiler.py等々、ロケール関係のモジュールのビルド方法を修正して"assets"に国際化リソースがある場合は、アプリケーションの国際化リソースにマージするように修正する
2)モジュール内から国際化リソースを参照する場合には、modules/<module id>/から参照するように、NSLocalizedStringFromTableInBundleを使用する

1)は、短期間では、ちょっと手に負えないので、2)の方針を元に修正を加えてみた。
isis/TiAppirater
とりあえず、動いているようだ。

しかし元になるライブラリがソースで提供されている場合は、ソースを修正すれば何とかなるが、バイナリ提供の場合、2)の方法は使えない。

根本的には、1)の方法があってしかるべきだと思う。
あるいは、ios環境でのライブラリ提供の際の、国際化リソースの明確なルールがどこかにないものだろうか ....

注)
"platform"ディレクトリに置いても、ios用モジュールの場合何の効果もないようだ。モジュール開発に関しては、このディレクトリはAndroid専用といえるのかもしれない。

注)
現在いろいろなところで提供されているモジュールがこうした国際化などの細かい点が考慮されていないことが多いのはとても残念なことだ。




0 件のコメント:

コメントを投稿