我有一段代码,我正在尝试使用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...
}
答案 0 :(得分:4)
如the documentation中所述:
Locale.toString()
返回此Locale对象的字符串表示形式,包括语言,国家,变体,脚本和扩展,以及可用的内容,如下所示:language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions
语言总是小写,国家总是大写,脚本总是标题,扩展总是小写 例如
en_US
,en
而 Locale.toLanguageTag()会返回相同的内容(语言,国家/地区和变体),但作为标记。这里Tag
表示由某些 IETF的BCP 47 标准(BCP ='最佳当前实践')定义的语言,国家和变体的代码。
例如en-US
我能看到的唯一区别是_
和-
或者某些语言/国家/地区代码。
简而言之,他们都返回String
;一个返回 Locale的正常字符串表示,而后者返回一个字符串作为表示区域设置的格式良好的IETF BCP 47语言标记。
The documentation还建议仅在调试模式下使用toString
:
此行为旨在支持调试,并与之前仅使用期望语言,国家/地区和变体字段的toString一致。要将Locale表示为字符串以进行交换,请使用toLanguageTag()。
希望它有所帮助。
答案 1 :(得分:-1)