近日遇到一个银联web支付的坑,特此记录一下。
问题描述
由于某些国产手机rom系统问题,即使系统语言环境为简体中文,但Locale默认还是英文。
#获取本地默认Locale
Locale.getDefault().toString()
#输出结果为 en_US
问题分析
因为网页加载过程中会默认取本地的Locale数据,虽然系统页面为简体中文,但通过Locale取出的数据还是en_US。从而导致,相关进行了i18n处理的网页在中文环境下加载出英文页面。例如加载银联支付网页时,银联会获取本地的语言环境并设置到请求头 “Accept-Language” 中。
问题解决
在使用WebView控件的Activity中加入如下设置:
protected void onCreate(Bundle savedInstanceState) {
initLocale();
....
}
private void initLocale(){
Locale locale = new Locale("zh", "CN");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, null);
}