Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android语言环境已更改,但应用程序中没有翻译的字符串_Android_Localization - Fatal编程技术网

Android语言环境已更改,但应用程序中没有翻译的字符串

Android语言环境已更改,但应用程序中没有翻译的字符串,android,localization,Android,Localization,以下是我的Android应用程序的应用程序代码: public class MyApplication extends Application { private Locale locale = null; @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig);

以下是我的Android应用程序的应用程序代码:

public class MyApplication extends Application
{
    private Locale locale = null;

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        if (locale != null)
        {
            newConfig.locale = locale;
            Locale.setDefault(locale);
            getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
        }
    }

    @Override
    public void onCreate()
    {
        super.onCreate();
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
        Configuration config = getBaseContext().getResources().getConfiguration();

        String lang = settings.getString(getString(R.string.pref_language), "");
        if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang))
        {
            locale = new Locale(lang);
            Log.i("Locale" , lang);
            Locale.setDefault(locale);
            config.locale = locale;
            getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
        }
    }
}
我必须更改
settings.getString(getString(R.string.pref_语言),“”)的值来自我的应用程序的设置活动

问题是使用
getString()
方法访问的字符串(具有翻译)中没有一个显示翻译文本


EDIT1:我使用的是Android 8.0

当您使用
getString(R.string.pref\u语言)
时,只要提供翻译,调用就会从匹配的
Locale.getDefault()
语言返回字符串

如果未提供翻译,它将返回默认语言,即在
values/strings.xml
文件中使用的语言


所有翻译的值都在
values xx
文件夹中,其中xx是该语言的两个字母的ISO代码。

在android 8中,区域设置的行为发生了变化,现在每个活动上下文都将采用其区域设置,即如果您在Activity1中更改了Activity1的区域设置,那么Activity2将保持默认区域设置


解决方案是更改每个活动的区域设置,您的问题将得到解决。

Log.i(“区域设置”,lang)
返回我设置的语言的2位代码(hi),我还提供了用
getString()
引用的字符串的翻译,但我仍然没有得到翻译后的值。。。我记得我第一次遇到类似的问题时。我来自挪威,这里有两种书面语言,尼诺尔斯克语和博克马尔语。起初,我试图为no提供翻译,但我需要为nb(bokmal)和nn(nynorsk)提供翻译。你会面临类似的问题吗?你在使用安卓8吗?安卓8在本地版上有一些变化是的,安卓8.0从这个答案中得到了一些提示:它现在起作用了。我面临着同样的问题。。如何更改每个活动的区域设置?我是否应该在setContentView()方法仍然不起作用之前在onCreate中执行此操作。系统的区域设置已更改,但未获取该区域设置的字符串文件值。我可以看到应用程序中的日期更改为该语言环境。