我看了this google doc。
它说我们必须使用这种格式:
value-b+es/string.xml
例如:value-es/string.xml
但在某处它使用String hello = getResources().getString(R.string.hello_world);
是真的吗?
系统如何理解哪种语言必须选择?
例如我通过这个调用字符串:
ConcurrentDictionary
我必须使用病情吗? (如果是的话怎么样?)......我无法很好地完善文件。
答案 0 :(得分:3)
是。 Android OS可以通过搜索res文件夹从您的应用程序中为用户选择最佳语言。
例如,您可以在res / values-es / strings.xml中定义西班牙语字符串值。
因此,如果用户在手机中将其主要语言设置为西班牙语,Android操作系统将首先从res / values-es / strings.xml文件夹中读取字符串,而不是res / values / strings.xml。
如果res / values-es / strings.xml中缺少某些字符串,那么它将从res / values / strings.xml中引用
答案 1 :(得分:1)
Android从项目的'res'目录加载文本和媒体资源。基于当前设备配置和区域设置。
例如,如果代码加载名为‘R.string.title’
的字符串,Android将通过从匹配的strings.xml
目录中加载相应的‘res/values’
文件,在运行时为该字符串选择正确的值。
AndroidAppProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
在运行时,Android系统根据当前为用户设备设置的区域设置使用适当的字符串资源集。
现在,您可以使用以下命令从res文件夹加载特定的区域设置字符串:
getResources().getString(R.string.hello_world);
例如:
Configuration conf = getResources().getConfiguration();
conf.locale = new Locale("fr"); //french language locale
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Resources resources = new Resources(getAssets(), metrics, conf);
/* get localized string */
String str = resources.getString(R.string.hello_world);
这将从R.string.hello_world
目录加载values-fr/
。
请参阅Doc