USP Browser 開発日誌 assetsリソースを言語別にする

どうも、Nです。
順調とまではいかないものの、開発は進んでおります今日この頃です。

Androidはリソースフォルダに修飾子(values-ja)などを用いることで、
多言語化が容易になっています。
また、API v8からはWebViewでもリソースを簡単に読み込むことができます。

WebView webView;

webView.loadUrl("file:///android_res/raw/help.html");

ですから、v8移行ではヘルプの多言語化も容易です。

しかし、API v7以下では、この方法が使えないそうで、
assetsフォルダにヘルプを配置するのが簡単だそうです。
ヘルプファイルをassets/docs/help.htmlに配置しているものとします。

WebView webView;

webView.loadUrl("file:///android_asset/docs/help.html");

大して変わらないようにも見えますが、assetsフォルダは修飾子による多言語化ができません。
例えば、英語か日本語化で切り替える場合、次のようにしなければなりません。
日本語のヘルプファイルをassets/docs-ja/help.htmlに配置しているものとします。

String locale;
String url;
WebView webView;

locale = getResources().getConfiguration().locale.getLanguage();
// url = "file:///android_asset/docs-" + locale + "/help.html"としてはいけない。
// 想定した言語を利用する端末以外で表示できない。
if (locale.equals("ja")) {
	url = "file:///android_asset/docs-ja/help.html";
} else {
	url = "file:///android_asset/docs/help.html";
}
webView.loadUrl(url);

このようにプログラム上で多言語化をするのも可能ですが、スマートじゃありません。
多言語化というか、UI周りの処理はできたら全部リソースに任せたいです。

というわけで、strings.xmlにファイルパスを定義しましょう。
res/values/strings.xmlに英語版(標準)のヘルプファイルのURLを記述します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="help_url">file:///android_asset/docs/help.html</string>
</resources>

res/values-ja/strings.xmlに日本語版のヘルプファイルのURLを記述します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="help_url">file:///android_asset/docs-ja/help.html</string>
</resources>

アクティビティでは、次のようなコードを記述すれば大丈夫です。

WebView webView;

webView.loadUrl(getString(R.string.help_url));

簡潔ですし、ヘルプだけ手動で多言語化という馬鹿げたこともしないでよくなります。
言語を増やした際も、res/values-??/strings.xmlに対象のURLを記述するだけでOKです。
今回は、v7以下でもWebViewの内容を多言語化したかったのでこういう方法を使いましたが、
assetsフォルダ内の多言語化に関してかなり使えるテクニックではないでしょうか。

  1. コメント 0

  1. トラックバック 0

return top