2012-12-08 105 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"到每個活動。我將用戶語言首選項存儲在可在網站或應用程序內更改的數據庫中。希望這可以幫助。