Android - Locale.toString()和Locale.toLanguageTag()之间有什么区别?

时间:2017-10-09 16:50:45

标签: android string locale

我有一段代码,我正在尝试使用Spinner视图组件更改应用程序中的语言。在使用这个时,我已经意识到我可能没有使用最流畅的方法,但更有趣的是,我注意到两个看起来相同的字符串在比较时并不相同。为什么会这样,如果我想“检查”某种语言是否属于某种语言,我该怎么办呢?

if (myLocale.toLanguageTag()=="sv") 
{
    //Changing language from Swedish to English
}
else 
{
    Toast.makeText(parent.getContext(),
      myLocale.toString(), Toast.LENGTH_SHORT).show();
   //Here, the toast will tell me what myLocale.toString is "sv", 
   //and so is myLocale.toLanguageTag(). Yet they are not equal...
}

2 个答案:

答案 0 :(得分:4)

the documentation中所述:

  

Locale.toString()返回此Locale对象的字符串表示形式,包括语言,国家,变体,脚本和扩展,以及可用的内容,如下所示:

language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions
     

语言总是小写,国家总是大写,脚本总是标题,扩展总是小写   例如en_USen

Locale.toLanguageTag()会返回相同的内容(语言,国家/地区和变体),但作为标记。这里Tag表示由某些 IETF的BCP 47 标准(BCP ='最佳当前实践')定义的语言,国家和变体的代码。
例如en-US
我能看到的唯一区别是_-或者某些语言​​/国家/地区代码。

简而言之,他们都返回String;一个返回 Locale的正常字符串表示,而后者返回一个字符串作为表示区域设置的格式良好的IETF BCP 47语言标记

The documentation还建议仅在调试模式下使用toString

  

此行为旨在支持调试,并与之前仅使用期望语言,国家/地区和变体字段的toString一致。要将Locale表示为字符串以进行交换,请使用toLanguageTag()。

希望它有所帮助。

答案 1 :(得分:-1)

使用.equals()进行字符串比较。 A good explanation can be found here

if ("sv".equals(myLocale.toLanguageTag()))