Android 银联Web支付 中英文显示BUG

近日遇到一个银联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);
}

你可能感兴趣的:(Android 银联Web支付 中英文显示BUG)