根据用户偏好加载资源

时间:2012-12-08 13:33:07

标签: android string localization resources runtime

我想制作支持英语和瑞典语的Android应用程序。我已经完成了本地化概念。但我想点击英文按钮有两个按钮应该按照英语加载字符串,点击瑞典按钮应加载瑞典字符串。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

Sv =瑞典语... en =英语...... 在languageToLoad中输入您的语言代码:

    String languageToLoad  = "Sv"; // your language
    Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, 
    getBaseContext().getResources().getDisplayMetrics());
    this.setContentView(R.layout.main);

答案 1 :(得分:0)

宣布两个按钮,一个用于英语,另一个用于瑞典语。您的english en代码和swedish sv的代码然后以这种方式使用Localization ..

            Locale myLocale = new Locale(lang);
            Resources res = getResources();
            DisplayMetrics dm = res.getDisplayMetrics();
            Configuration conf = res.getConfiguration();
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);

检查这个简单的example以实现目标。

答案 2 :(得分:0)

我的回答与其他人类似,但我添加了一些可能很重要的附加内容

警告

我读到的所有内容都说,让您的应用更改语言并不是一个好主意,因为Android框架不支持它并且可能会导致问题。

话虽如此,我已经在我的应用程序中完成了它,虽然它有点痛苦,但它似乎工作到目前为止。这是我如何做到这一点,以防你想这样做。每种语言都需要一个单独的strings.xml文件。 values文件夹中的strings.xml作为默认值,然后可能是一个strings.xml,比如说是西班牙语字符串的values-es文件夹。我使用以下代码根据用户选择的单选按钮更改配置设置

`

final Configuration LANG_CONFIG = ChooseLocale.this.getResources().getConfiguration();
                    Locale newLocale = new Locale("English");
                    curLang = ChooseLocale.this.getLanguage();
                    if ((curLang.equals("English")) || (curLang.equalsIgnoreCase("Ingles")))
                    {
                        newLocale = new Locale("en_US");
                    }
                    else
                    {
                        newLocale = new Locale("es");
                    }
                    Toast.makeText(getApplicationContext(), newLangToast + " " + curLang , Toast.LENGTH_SHORT).show();
                    Configuration config = getBaseContext().getResources().getConfiguration();
                    Locale.setDefault(newLocale);
                    config.locale = newLocale;
                    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

                    SharedPreferences.Editor editor = langPref.edit();
                    editor.putString(LANG_PREF, curLang);
                    editor.commit();
`

使用此行更新配置

是最重要的
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());

我从我的getLanguage()函数中获取了本地,可以根据需要进行处理。我还必须添加

@Override public void onConfigurationChanged(Configuration newConfig) { newConfig = Globals.getUserLanguage(this); super.onConfigurationChanged(newConfig);到每个允许更改方向的活动,并将其添加到我的onCreate()每个

final SharedPreferences langPref = getSharedPreferences (LANG_PREF, 0); if (Globals.langConfig != null) this.onConfigurationChanged(Globals.langConfig);

我还在清单中的每个活动中添加了android:configChanges="orientation|locale",以便更改方向。我将用户语言首选项存储在可以在网站上或应用程序内更改的数据库中。希望这会有所帮助。