2011年6月4日土曜日

Android他言語機能2.1の留意点

Androidには他言語対応させるのは簡単です。
res/フォルダ以下のフォルダを必要な言語数だけ作れば良いのです。
一般的に、デフォルトフォルダは英語用ファイルを入れます。
他の言語にはハイフン+言語の略称を入れます。例えば、日本語なら-jaをデフォルトフォルダ名とします。

ここまでは、簡単ですが…

WebViewで、ローカルhtmlファイルを表示したいとき問題がはっせいします。
他のファイルのようにres/raw(英語版)とres/raw-ja(日本語版)にhtmlファイルを入れて
以下のように実行する。
webView.loadUrl("file:///android_res/raw/index.html");

2.2以降であればきちんと出力されるが、2.1だと「ファイルが見つかりません」的な表示になる。
2.1の場合、htmlを出力させるにはres直下では配置しても表示されない。
もともと、htmlはassetsフォルダ直下に配置して出力するもので、多くの本やサイトには
webView.loadUrl("file:///android_asset/index.html");

で書かれる。
だけど・・・・assetsはres直下じゃないから、-jaが効かないです。

はてさて、どうしましょう?

発想を変えてみましょう。
フォルダで分離できないなら、ソースコードで分離すればいいですよね。
さて、ソースコードで言語を区別するにはどうしましょうか?

端末の言語を調べるにはLocaleクラスがあります。
そこで、
String mlocale = getResources().getConfiguration();
    mm  = mlocale.locale.getLanguage();
    mmm = mlocale.locale.getDisplayCountry();
    if (mm == "ja" || mmm == "JP) {
        //日本語htmlで表示
    webView.loadUrl("file:///android_asset/indexja.html");
    }else{
        //英語htmlで表示
        webView.loadUrl("file:///android_asset/index.html");
    }

としてみる。が、しかし・・・
英語しか表示されない。そこでgoogle先生に調べてもらったところ、
夢茶爺&苦茶爺のPC奮戦備忘録 さん
にて、紹介されえていました。
if ( Locale.JAPAN.equals(Locale.getDefault() ) {
        // 日本語の処理
    webView.loadUrl("file:///android_asset/indexja.html");
    } else {
        // 英語の処理
    webView.loadUrl("file:///android_asset/index.html");
    }

これで、うまくいきます。
夢茶爺&苦茶爺のPC奮戦備忘録 さんは日本AndroidのMLを参考にされたそうです。
日本Androidの会 Sue さん

というかんじです。お疲れ様でした。

0 件のコメント:

コメントを投稿