android studio中的多语言支持

时间:2017-02-10 17:43:17

标签: android multilingual

我看了this google doc

它说我们必须使用这种格式:

value-b+es/string.xml

例如:value-es/string.xml 但在某处它使用String hello = getResources().getString(R.string.hello_world);

是真的吗?

系统如何理解哪种语言必须选择?

例如我通过这个调用字符串:

ConcurrentDictionary

我必须使用病情吗? (如果是的话怎么样?)......我无法很好地完善文件。

2 个答案:

答案 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