我在Android应用程序中有几个语言文件:value / strings.xml,value-en / strings.xml,...等 可以在某些数组或其他内容中加载此文件的内容。例如,我想在运行时在两个不同的数组中加载默认文本字符串和英文字符串。
由于
阿林
答案 0 :(得分: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/*
)。
答案 1 :(得分:0)
实际上情况就是这样。想象一下,我有这样的场景:一些中文打开应用程序。他的移动电话设置为ch语言环境。应用程序默认为xx作为语言,这意味着我有2个语言文件值/ strings.xml(例如默认为spanish)和另一个语言value-en / strings.xml for english。默认对他来说没有意义,所以英语对他的理解是最合适的,即使他不太了解它。因此,在应用程序启动时,我打开语言设置(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())返回应用程序语言(用户选择)
结论,有更多无用的工作,但让我做我需要的,我认为是正常的。