Java Android中的语言本地化问题。应用程序没有';t从strings.xml加载必要的资源

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加载英语值。谁能解释一下为什么会发生这种情况

我有一个可以本地化为多种语言的应用程序。但我有一个大麻烦。我有默认的文件值/strings.xml,其中我默认用英语存储字符串,我有文件夹值uk/strings.xml(用于乌克兰本地化)。我正在SharedReferences中保存所选本地化。问题是,当应用程序启动时没有选择任何语言首选项(但设备的系统语言是乌克兰语,我选中了),我的应用程序必须从values uk/strings.xml加载乌克兰语字符串,但它从values/strings.xml加载英语值。谁能解释一下为什么会发生这种情况,以及我如何解决这个问题。多谢各位

我也有同样的问题。然后我学习了很多教程。最后,我在我的android应用程序中为所有印度语言使用了本地化。请查看我的代码片段:

 @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”)。