2015-08-28 97 views
0

一个任务由以下内容组成:需要为用户提供应用程序界面(ru,en,uk,以及默认选择en)的语言更改的可能性。为了实现这个功能,它已经完成:手动应用程序的本地化

1)创建资源文件夹:values,values - uk,values - ru,values - en,其中文件strings.xml包含内容转换。

2)通过Spinner获取并写入SharedPreferences语言ID。

3)在本土化的onCreate应用程序启动时:

SharedPreferences preferences = context.getSharedPreferences(Constants.APP_PREFERENCES, Context.MODE_PRIVATE); 
String lang = preferences.getString(Constants.LANGUAGE, "default"); 
    if (lang.equals("default")) { 
    lang=context.getResources().getConfiguration().locale.getCountry(); 
    } 
    Locale locale = new Locale(lang); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    Log.i("Lang change", "Locale=" + locale); 
    context.getResources().updateConfiguration(config, 
    context.getResources().getDisplayMetrics()); 

几乎所有的拉起和应用,但不是全部。也就是说,在某些地方(在某些对话和BaseAdapters中,NavigationDrawer)会精确地提取系统语言的本地化。例如,在设备上的乌克兰本地化,默认情况下是英语,而俄罗斯是选择在一个应用程序,然后在一个应用程序在更高的指示位置总拉动除基本俄罗斯以外的乌克兰内容。

突破了onConfigurationChanged()来处理:

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    locale = new Locale(lang); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config, null); 
} 

和从机器人的manifest.xml每个活动清洗:configChanges = “区域设置”。

没有帮助。

问题在哪里?

回答

0

我找不到你的代码中的问题。但这里是我如何改变app.app的语言,也许它可以帮助你。它工作正常;

//get sharedPreferences 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    //get default local for first initialization 
    String defaultLanguage = this.getResources().getConfiguration().locale.getLanguage(); 
    Configuration configuration = new Configuration(); 
    //check language preference everytime onCreate of all activities, if there is no choise set default language 
    Locale newLocaleLanguage = new Locale(sharedPreferences.getString("newLanguagePref",defaultLanguage)); 
    //finally setdefault language/locale according to newLocaleLanguage. 
    Locale.setDefault(newLocaleLanguage); 
    configuration.locale = newLocaleLanguage; 
    getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics()); 

你应该写这个代码在的onCreate method.And所有活动,就应该写信给你sharedPreferences与您的设置页面上newLanguagePref标签。