更改应用后更改的应用语言

时间:2016-06-15 14:29:19

标签: android android-preferences multilingual

我在我的应用程序的设置菜单中创建了一些包含几种语言的ListPreference。我使用以下代码根据用户选择更改语言:

findPreference("language_list").setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            String loadLanguage =  (String) newValue;
            Locale locale = null;
            if (loadLanguage.equals("en")) {
                locale = new Locale("en");

            } else if (loadLanguage.equals("ku")) {
                locale = new Locale("ku");

            } else if(loadLanguage.equals("ar")){
                locale = new Locale("ar");

            }else if(loadLanguage.equals("tr")){
                locale = new Locale("tr");
            }
            else if(loadLanguage.equals("fr")){
                locale = new Locale("fr");
            }

            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            getActivity().getResources().updateConfiguration(config,
                    getActivity().getResources().getDisplayMetrics());
            return true;
        }
    });

代码有效,但需要重新启动应用程序(退出并再次启动),直到完全完成语言更改。使用上面的代码,应用程序的某些部分将保留,即使它们不起作用也不会更改。

你可以告诉我我该怎么办?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以以hacky方式以编程方式重新启动应用程序,如@Oleg Koshin here

所述

答案 1 :(得分:0)

您可以致电

recreat();

完成语言更改后。

赞:

    findPreference("language_list").setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

    @Override public boolean onPreferenceChange(Preference preference, Object newValue) {  
String loadLanguage = (String) newValue;  
Locale locale = null; 
 if (loadLanguage.equals("en")) { 
 locale = new Locale("en"); 
 } else if (loadLanguage.equals("ku")) { 
 locale = new Locale("ku"); 
 } else if(loadLanguage.equals("ar")){ 
 locale = new Locale("ar");
  }else if(loadLanguage.equals("tr")){
  locale = new Locale("tr"); 
 } else if(loadLanguage.equals("fr")){  
locale = new Locale("fr");
  }  
Locale.setDefault(locale); 
 Configuration config = new Configuration(); 
 config.locale = locale; 
getActivity().getResources().updateConfiguration(config, getActivity().getResources().getDisplayMetrics());  
recreat();   
return true;  
}  
});