2012-12-08 43 views
1

我想制作支持英文和瑞典文的Android应用程序。我已经经历了本地化概念。但我想知道有两个按钮在点击英文按钮时应该按照英文加载字符串,并且在瑞典语按钮上点击应该加载瑞典语字符串。我怎样才能做到这一点?根据用户偏好加载资源

+0

是的,你可以这样做,但是因为Android的Settings区域设置条目完全是为了这个目的,所以它会很愚蠢。您将为已经很好解决的标准问题创建非标准解决方案。 – mah

+0

它确实应该通过系统设置完成,但有理由这样做。就我而言,我们必须锁定来自日常用户的所有其他程序和系统设置。由于设备在不同用户之间切换,我必须这样做才能在必要时进行切换。仍然可以解决它,但这就是客户想要的 – codeMagic

回答

0

声明两个按钮,一个用于英语,另一个用于瑞典。您的english enswedish 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来实现自己的目标。

+0

嘿感谢男人:)你帮了我很多! – kunal

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); 
0

我的回答是类似于别人,但我已经添加了一些额外的,可能是重要的

警告

我读过的一切说,它不是一个好主意,让您的应用程序改变的语言,因为它不是不受Android框架支持,可能会导致问题。

说到这里,我已经在我的应用程序中完成了它,尽管它有点痛苦,但它似乎工作至今。以下是我如何做到这一点,以防你想这样做。每种语言都需要一个单独的strings.xml文件。 values.xml文件夹中的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);添加到每个活动,使方向变化,加入到我的每个

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

的onCreate()我允许方向变化的清单还增加了android:configChanges="orientation|locale"到每个活动。我将用户语言首选项存储在可在网站或应用程序内更改的数据库中。希望这可以帮助。