2014-02-07 69 views
0

這裏的這個問題對我來說很有幫助。我從來沒有嘗試過應用程序的本地化。所以我在這裏是全新的。但我仍然面臨一些問題。 我有這樣的語言列表;Android中的多語言本地化

<string-array name="languages"> 
    <item>English</item> 
    <item>Finnish</item> 
    <item>French</item> 
    <item>German</item> 
    <item>Slovakian</item> 
    <item>Polish</item> 
</string-array> 

我想在應用程序啓動時將默認設置爲英語。當語言改變時,我希望在整個活動中運行相同的語言。在上面的鏈接中,方法public void setLocale(String localeCode),在我的情況下,localeCode是什麼。這裏的區域設置代碼是什麼,Locale locale = new Locale(localeCode); 。我知道這裏可能是Locale.setDefault(Locale.ENGLISH); 。我已經完成了這樣的事情,我知道這是廢話,因爲它不符合我的期望。你能幫我一個正確的道路嗎?在此先感謝

public class Base_Activity extends Activity { 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 

    final Spinner spinner = (Spinner) menu.getItem(0).getActionView() 
      .findViewById(R.id.spinner); 

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      this, R.array.languages, R.layout.spinner_row); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

     // private String currentLanguage; 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 

      // currentLanguage = spinner.getSelectedItem().toString(); 

      Locale locale = null; 
      switch (arg2) { 
      case 0: 
       locale = new Locale("en_US"); 
       break; 
      case 1: 
       locale = new Locale("fi"); 
       break; 
      case 2: 
       locale = new Locale("fr"); 
       break; 
      case 3: 
       locale = new Locale("de"); 
       break; 
      case 4: 
       locale = new Locale("sk"); 

       break; 
      case 5: 
       locale = new Locale("pl"); 
       break; 

      default: 
       locale = new Locale("en_US"); 
       break; 
      } 
      Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, 
        getBaseContext().getResources().getDisplayMetrics()); 

      startActivity(); 

     } 

     private void startActivity() { 
      overridePendingTransition(0, 0); 
      Log.i("DEBUG", "GATEWAY"); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      Locale.setDefault(Locale.ENGLISH); 

     } 

    }); 
    return super.onCreateOptionsMenu(menu); 
}} 
+0

嘗試通過評論Locale.setDefault(locale);檢查以下鏈接:http://developer.android.com/reference/java/util/Locale.html#setDefault%28java.util.Locale%29 – Rama

+0

@Rama你能否簡單地解釋一下,不要理解你。 – bShah

+0

希望下面的鏈接給你答案:http://stackoverflow.com/questions/ 2264874 /更改區域內應用程序本身 – Rama

回答

0

嘗試這裏面onITemSelectedListener

Locale locale = null ; 

    switch (arg0) { 
    case 0: 
     locale = new Locale("en_US"); 
     break; 
    case 1: 
     locale = new Locale("fi"); 
     break; 
    case 2: 
     locale = new Locale("fr"); 
     break; 
    case 3: 
     locale = new Locale("de"); 
     break; 
    case 4: 
     locale = new Locale("sk"); 

     break; 
    case 5: 
     locale = new Locale("pl"); 
     break; 

    default: 
     locale = new Locale("en_US"); 
     break; 
    } 

    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    this.getApplicationContext().getResources().updateConfiguration(config, null); 
+0

這對我來說很難理解,c.locale = currentLanguage沒有采用,它表示將字符串currentLanguage改爲Locale,這是不可能的,請你稍微解釋一下。 – bShah

+0

ckeck編輯答案.. – Sonali8890

+0

不應該是開關(arg2),呵呵?? – bShah

0

檢查我這樣做的方式。 1.您必須爲資源文件夾下的不同語言創建不同的「值」文件夾: 即...值 - fr(for france),values-en(for engish) 2.現在將不同語言的字符串數據在「string.xml」中爲相關值文件夾

  1. 然後將數據設置爲基於本地語言的視圖。 當您更改,然後語言刷新你的數據字段如下:

    gameTitle.setString(GameActivity.gameActivity.getResources()的getString(R.string.Jimmy_Jigsaw);

    希望它能幫助你

+0

我有這麼多的字符串,你想我爲每個字符串做嗎?正如你在上面提到的那樣。我已經完成了您之前說過的所有操作,例如製作文件夾/res/values-en/strings.xml。當我選擇一種語言時,它不會同時刷新。這只是我的問題。 – bShah