我使用以下前提条件创建了一个简短的测试应用程序:
我的智能手机在7.0(及以上)上运行。我在我的设置中设置了多种语言English (United States)
& Deutsch (Deutschland)
。
compile-, target-, min-SdkVersion 24
String-Resources
:
来自strings.xml
("default"
)的内容为:
<resources>
<string name="app_name">Test</string>
<string name="test">default</string>
</resources>
来自string.xml
(values-en-rGB
)的内容是:
<resources>
<string name="test">GB Fallback!</string>
</resources>
MainActivity
只有onCreate()
,代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String string = getString(R.string.test);
Log.d("TestString", string);
final LocaleList locaList = LocaleList.getDefault();
for (int i = 0; i < locaList.size(); i++) {
Log.d("AvailableLocale", locaList.get(i).toLanguageTag());
}
}
当我运行App
时,我预计"TestString"
的输出为GB Fallback!
。为什么?因为Android 7.0支持multilingual。 *(见更新)
而不是GB Fallback!
我总是得到默认输出。这意味着default
。
AvailableLocale
的输出始终与手机设置中的设置保持同步。
因此。为什么我从default
获得getString(R.string.test)
。我是否想念Android文档中的多语言内容?
为什么我声称我得到GB Fallback!
。原因是multilingual功能。文档显示了一个很好的表:
我会尝试将它映射到我的情况:
(抱歉,我的图片错了。我的意思不是de-GB
。当然是en-GB
那么,这里有什么问题?