解决HanziToPinyin中Collator.getAvailableLocales()在小米、HTC One等手机上获取本地语言环境不匹配转换拼音失败BUG

原因:
让我们看看源码是怎么写的,我做了一下修复,稍后再介绍:

public static HanziToPinyin getInstance() {  
    synchronized (HanziToPinyin.class) {  
        if (sInstance != null) {  
            return sInstance;  
        }  
        // Check if zh_CN collation data is available  
        final Locale locale[] = Collator.getAvailableLocales();  
        Locale newChina = new Locale("zh", "HANS", "CN");//这部分是我做的修复,解决HTC兼容性问题  
        for (int i = 0; i < locale.length; i++) {  
            if (locale[i].equals(Locale.CHINA) || locale[i].equals(newChina)) {  
                // Do self validation just once.  
                if (DEBUG) {  
                    Log.d(TAG, "Self validation. Result: " + doSelfValidation());  
                }  
                sInstance = new HanziToPinyin(true);  
                return sInstance;  
            }  
        }  
        Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled");  
        sInstance = new HanziToPinyin(false);  
        return sInstance;  
    }  
}  

上面的代码可以看到做了一下检测,看看是不是支持中文,而HTC手机里返回的是zh-Hans-CN,所以自然会返回失败,但是手机确实支持中文,经过调试以后发现返回的Locale数组里有这个东西zh-Hans-CN,我们再看下zh-Hans-CN是什么

zh-Hans 简体中文  
zh-Hans-CN 大陆地区使用的简体中文  
zh-Hans-HK 香港地区使用的简体中文  
zh-Hans-MO 澳门使用的简体中文  
zh-Hans-SG 新加坡使用的简体中文  
zh-Hans-TW 台湾使用的简体中文  
zh-Hant 繁体中文  
zh-Hant-CN 大陆地区使用的繁体中文  
zh-Hant-HK 香港地区使用的繁体中文  
zh-Hant-MO 澳门使用的繁体中文  
zh-Hant-SG 新加坡使用的繁体中文  
zh-Hant-TW 台湾使用的繁体中文  

可以看出,Hans是简体中文,Hant是繁体中文。而这样划分更明确。貌似Win8也是这样划分的。
解决方案:
解决方案我已经在原因里贴上去了,其实也就是加入对hans这样的判断,希望兼容5.0,感觉5.0应该也会这样写吧。

转自

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值