Zer*_*ato 5 string android locale
我有一段代码,我正在尝试使用 Spinner View 组件更改应用程序中的语言。在处理这个问题时,我开始意识到我可能没有使用最流畅的方法,但更有趣的是,我注意到两个看起来相同的字符串在比较时并不相等。为什么会这样,如果我想“检查”语言是否是某种语言,我该怎么办?
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...
}
Run Code Online (Sandbox Code Playgroud)
Locale.toString()返回此 Locale 对象的字符串表示形式,包括语言、国家/地区、变体、脚本和扩展名,无论可用,如下所示:Run Code Online (Sandbox Code Playgroud)language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions语言总是小写,国家总是大写,脚本总是标题,扩展总是小写。
例如en_US,en
而Locale.toLanguageTag()返回相同的内容(语言、国家和变体),但作为标签。这里Tag指的是某些IETF 的 BCP 47标准(BCP = 'Best Current Practice')定义的语言、国家和变体的一些代码。
例如en-US
,我能看到的唯一区别是_和-或者也可能是某些语言/国家/地区代码。
简而言之,它们都返回了String;一个返回Locale 的正常字符串表示,而后者返回一个字符串作为表示 locale 的格式良好的 IETF BCP 47 语言标签。
该文档还建议toString仅在调试模式下使用:
此行为旨在支持调试并仅与预期语言、国家/地区和变体字段的 toString 以前的使用兼容。要将 Locale 表示为用于交换目的的 String,请使用 toLanguageTag()。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
2836 次 |
| 最近记录: |