1

我在 Android 应用程序中有几个语言文件:value/strings.xml、value-en/strings.xml、...等 可以将这些文件的内容加载到某些数组或其他内容中。例如,我想在运行时将默认文本字符串和英文字符串加载到 2 个不同的数组中。

谢谢

阿林

4

2 回答 2

1

创建一个这样的方法:

Resources getResourcesByLocale( Context context, String localeName ) {
    Resource res = context.getResources();
    Configuration conf = new Configuration(res.getConfiguration());
    conf.locale = new Locale(localeName);
    return new Resources(res.getAssets(), res.getDisplayMetrics(), conf);
}

您可以获得您定义的任何语言环境的资源,例如:

Resources res_en = getResourcesByLocale(context, "en");
Resources res_de = getResourcesByLocale(context, "de");
Resources res_fr = getResourcesByLocale(context, "fr");

String some_name_en = res_en.getString(R.string.some_name);
String some_name_fr = res_fr.getString(R.string.some_name);
// etc...

此外,如果您没有为某些语言环境定义字符串,则不需要注意异常,因为无论如何res/values/*都会加载默认值 (from )。

于 2012-10-09T21:09:24.493 回答
0

其实情况就是这样。想象一下我有这样的场景:一些中国人打开应用程序。他的手机设置为 ch locale。应用程序默认为 xx 作为语言,这意味着我有 2 个语言文件 values/strings.xml(例如默认为西班牙语)和另一种语言文件 values-en/strings.xml 为英语。默认对他来说没有意义,所以英语将是最适合他理解的,即使他不太懂。因此,在应用程序启动时,我打开语言设置(android 语言设置),除非他选择英语,否则任何选择都会将应用程序设置为西班牙语。我强迫他基本上用英语更改电话区域设置,只是为了使用我的应用程序。总的来说,android 的概念是错误的,因为我需要能够以我想要的任何语言查看应用程序,而无需更改设备语言。


我所做的: - 我在 values 文件夹中创建了另一个 string_xx.xml 文件。现在,对于翻译字符串名称 = “txtTranslation”,我在 string_xx 文件中拥有“en_txtTranslation”键。R.java 将它们全部加载并在我的应用程序中,基于全局 var selectedLanguage = xx,我使用以下代码附加写入字符串:

public String translate(String text)
{
      String appLanguage = UtilsCentral.getUserLanguage(getApplicationContext());
      if (appLanguage != "")
      {
          return getString(getResources().getIdentifier(appLanguage + "_" + text, "string", this.getPackageName()));  
      }
      else 
      {
          return getString(getResources().getIdentifier(text, "string", this.getPackageName()));
      }
}

实际上,在创建活动时,我需要使用 .text = tarnslate("txtTranslation") 设置所有视图

注意:UtilsCentral.getUserLanguage(getApplicationContext()) 返回应用语言(用户选择)

结论,还有更多无用的工作,但让我做我需要的,我认为是正常的。

于 2012-09-26T08:23:24.223 回答