0

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

具体来说,代码是:

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 默认设置的任何标头,例如控制缓存、接受类型或 User-Agent 的标头,则它们的值可能会被此 WebView 的默认值覆盖

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

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

目前这个问题发生在 Android 2.3 中,我还没有在其他版本上检查它。

4

1 回答 1

1

经过一番调查,结果发现这是服务器端框架 Yii 中的一个错误Accept-Language,当在标题中以相同优先级提到首选语言时,它没有正确排序首选语言。例如,如果给定两种语言的权重(默认为 1.0),则无法保证 Yii 会选择第一种。就我而言,它花了第二个。不幸的是,该错误的修复最终从主干中消除了。

至于 Android,它似乎总是根据系统设置中选择的当前用户语言传递 http 标头。大多数用例都可以,因此无需(尝试)覆盖标头。

于 2013-02-28T21:43:58.137 回答