0

WebView が埋め込まれた Android アプリケーションがあります。この WebView を介して表示される Web ページにカスタム言語設定を適用する必要があります。この関連する回答を見つけて、試してみました。

具体的には、コードは次のとおりです。

Map<String, String> headers = new HashMap<String, String>();
String lang = Locale.getDefault().getLanguage(); // for example, returns "ru"
headers.put("Accept-Language", lang); // also tried "ru", "ru_RU", "ru;q=0.8,en;q=0.6", etc.
mWebView.loadUrl("http://localhost/", headers);

何も機能しません。サーバー側では、常に「en_us」でヘッダーを取得します。

Androidのドキュメントによると:

additionalHttpHeaders - この URL の HTTP 要求で使用される追加のヘッダー。名前から値へのマップとして指定されます。このマップに、この WebView によってデフォルトで設定されるヘッダー (キャッシングを制御するもの、受け入れタイプまたはユーザー エージェントなど) が含まれている場合、それらの値は、この WebView のデフォルトによってオーバーライドされる可能性があることに注意してください。

問題のある部分は太字で強調表示されています。

問題は、WebView のデフォルトをオーバーライドして、ユーザーの優先言語に合わせる方法です。

現在、問題は Android 2.3 で発生しており、他のバージョンではまだ確認していません。

4

1 に答える 1

1

いくつかの調査の結果、これはサーバー側フレームワーク Yii のバグであることが判明しました。これは、優先言語Accept-Languageが同じ優先度でヘッダーに記載されている場合に、優先言語を適切にソートしません。例えば、重みが省略された (デフォルトでは 1.0 を意味する) 2 つの言語が指定された場合、Yii が最初の言語を選択するという保証はありません。私の場合、2番目にかかりました。残念ながら、バグの修正は最終的にトランクから削除されました。

Android に関しては、システム設定で選択された現在のユーザー言語に従って、常に http ヘッダーを渡しているようです。ほとんどのユースケースで問題ないため、ヘッダーをオーバーライドする (しようとする) 必要はありません。

于 2013-02-28T21:43:58.137 に答える