如何从Android的WebView覆盖Accept-Language标头

时间:2013-02-25 11:14:27

标签: android webview http-headers http-accept-language

我有一个带有嵌入式WebView的Android应用程序。我需要为通过此WebView呈现的网页应用自定义语言设置。我找到this related answer并尝试了一下。

具体来说,代码是:

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 documentation

  

additionalHttpHeaders - 要在此URL的HTTP请求中使用的其他标头,   指定为从名称到值的映射。 请注意,如果此地图包含   此WebView默认设置的任何标头,例如   那些控制缓存,接受类型或用户代理,他们的   值可以通过此WebView的默认值覆盖

有问题的部分以粗体突出显示。

所以问题是 - 如何覆盖WebView的默认值以满足首选用户语言?

目前问题出现在Android 2.3中,我还没有在其他版本上查看。

1 个答案:

答案 0 :(得分:1)

经过一些调查后,结果显示它是服务器端框架Yii中的bug,当Accept-Language标头中提到优先级相同的优先级时,它们没有正确排序。例如,如果给出两种语言省略权重(默认为1.0),则无法保证Yii将选择第一种语言。在我的情况下它花了第二个。不幸的是,bug的修复最终从主干中消除了。

对于Android,似乎总是根据系统设置中选择的当前用户语言传递http标头。对大多数用例来说都没问题,因此不需要(尝试)覆盖标题。