Android Locale已更改但已翻译的字符串不在应用中

时间:2017-11-23 21:06:42

标签: android localization

以下是我的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_language), "");的值。

问题是没有字符串(有翻译)并且使用getString()方法访问,显示翻译后的文本。

EDIT1:我使用的是Android 8.0

1 个答案:

答案 0 :(得分:0)

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

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

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