我有一个带有嵌入式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”的标题。
additionalHttpHeaders - 要在此URL的HTTP请求中使用的其他标头, 指定为从名称到值的映射。 请注意,如果此地图包含 此WebView默认设置的任何标头,例如 那些控制缓存,接受类型或用户代理,他们的 值可以通过此WebView的默认值覆盖。
有问题的部分以粗体突出显示。
所以问题是 - 如何覆盖WebView的默认值以满足首选用户语言?
目前问题出现在Android 2.3中,我还没有在其他版本上查看。
答案 0 :(得分:1)
经过一些调查后,结果显示它是服务器端框架Yii中的bug,当Accept-Language
标头中提到优先级相同的优先级时,它们没有正确排序。例如,如果给出两种语言省略权重(默认为1.0),则无法保证Yii将选择第一种语言。在我的情况下它花了第二个。不幸的是,bug的修复最终从主干中消除了。
对于Android,似乎总是根据系统设置中选择的当前用户语言传递http标头。对大多数用例来说都没问题,因此不需要(尝试)覆盖标题。