2013/04/17

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

前回のに続いて、2番目の assets ディレクトリに国際化リソースを配置する場合について検討する。


まず、モジュールプロジェクト内で
assets/
      values/
            strings.xml
      values-ja/
            strings.xml
のように、言語リソースを配置しておくと、ビルド後のモジュール内では jar の中に統合され、最終的にモジュールを読み込んだ Ti アプリ内の
/assets/
以下にそのまま配置される。

Android アプリにおいて、assetsディレクトリは、いわゆるリソースを置くresディレクトリに対して、読み取り専用のローデータの置き場所とされている。例えば、sqliteのもとのDBなんかを置いておいて、アプリ起動時に書き込み可能な領域 ( 例えば、/data/data/{パッケージ名}/app_data/ )にコピーしたり、固定的な画像やhtmlなどを置くのに使われる。
読み出しには通常のFileではなく、一部の例外を除いて、AssetsManager経由での読み取りになる。

ということは、assetsディレクトリの国際化リソースを置いた場合には、Android OS のリソースハンドリングの支援は使えず、全て自前で(!?)処理しなければならないことになる。例えば、/assets/values/string.xml , /assets/values-ja/strings.xml などのリソースファイルから所望の実行時のロケールに対応した文字列を得るには、少なくとも
  isis AssetsStrings.java
のようなことになる(もちろん、これはかなり粗い実装です)。

strings.xml だけ相手にすればいいのならまだしも、レイアウト関連の xml などに埋め込まれた文字列リソースにも対応するとなると、相当面倒なことになる。やってやれないこともないだろうが、車輪の再発明どころの騒ぎではなくなることになるだろう。

ということで、Android の場合、国際化リソースを /assets/ に置くのは特別な理由がない限り、選択肢に入れなくてよいだろう。




0 件のコメント:

コメントを投稿