Java Android中的语言本地化问题。应用程序没有';t从strings.xml加载必要的资源
我有一个可以本地化为多种语言的应用程序。但我有一个大麻烦。我有默认的文件值/strings.xml,其中我默认用英语存储字符串,我有文件夹值uk/strings.xml(用于乌克兰本地化)。我正在SharedReferences中保存所选本地化。问题是,当应用程序启动时没有选择任何语言首选项(但设备的系统语言是乌克兰语,我选中了),我的应用程序必须从values uk/strings.xml加载乌克兰语字符串,但它从values/strings.xml加载英语值。谁能解释一下为什么会发生这种情况,以及我如何解决这个问题。多谢各位 我也有同样的问题。然后我学习了很多教程。最后,我在我的android应用程序中为所有印度语言使用了本地化。请查看我的代码片段:Java Android中的语言本地化问题。应用程序没有';t从strings.xml加载必要的资源,java,android,xml,string,localization,Java,Android,Xml,String,Localization,我有一个可以本地化为多种语言的应用程序。但我有一个大麻烦。我有默认的文件值/strings.xml,其中我默认用英语存储字符串,我有文件夹值uk/strings.xml(用于乌克兰本地化)。我正在SharedReferences中保存所选本地化。问题是,当应用程序启动时没有选择任何语言首选项(但设备的系统语言是乌克兰语,我选中了),我的应用程序必须从values uk/strings.xml加载乌克兰语字符串,但它从values/strings.xml加载英语值。谁能解释一下为什么会发生这种情况
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
//SharedPreferences.Editor edit=getSharedPreferences("pref",MODE_PRIVATE).edit();
switch (id){
case R.id.action_assamese:
setLocale("as");
return true;
case R.id.action_bihari:
setLocale("bh");
return true;
case R.id.action_english:
setLocale("en");
return true;
case R.id.action_gujarati:
setLocale("gu");
return true;
case R.id.action_hindi:
setLocale("hi");
return true;
case R.id.action_kannada:
setLocale("kn");
return true;
case R.id.action_kashmiri:
setLocale("ks");
return true;
case R.id.action_malayalam:
setLocale("ml");
return true;
case R.id.action_marathi:
setLocale("mr");
return true;
case R.id.action_oriya:
setLocale("or");
return true;
case R.id.action_sanskrit:
setLocale("sa");
return true;
case R.id.action_tamil:
setLocale("ta");
return true;
case R.id.action_telgu:
setLocale("te");
return true;
case R.id.action_urdu:
setLocale("ur");
return true;
}
return super.onOptionsItemSelected(item);
}
public void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
}
有关更多详细信息,请参见本教程
我希望它可以帮助您。如果设置了
重新配置(“en”、“de”、“ru”…)
,请始终检查您的build.gradle(应用程序)
android/defaultConfig。如果是,则只有列出的资源会留在项目中。显示一些代码如何加载语言??嗯,但根据android文档,如果应用程序的文件夹名称值XX与设备系统设备语言匹配,则它会加载该文件夹中的所有字符串,而不是默认文件夹中的字符串。Soryy,但是/res/values给了我无效的目录名错误((虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。好的,我将更新它,但此链接提供完整的教程。因此我可以添加某些部分。或者我必须复制该教程中的所有文本或者我必须分享教程。谢谢。你救了我一天。我忘记了构建中的这一行。gradleAt-last找出我的翻译不起作用的原因仅仅是因为我在gradle中写了这一行(重新配置:“en”)。