2012-02-01 41 views
1

在我的應用程序中,我想創建一個設置,用戶可以根據自己的選擇更改語言。爲此,我爲每種語言創建了相應的值文件夾和字符串文件。另外我的代碼片段如下:在我的應用程序中面臨多語言設置的問題?

public class MultiLanguage extends Activity implements OnClickListener { 

    private Button germany, english, french; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.language); 

     english = (Button) findViewById(R.id.english); 
     english.setOnClickListener(this); 

     germany = (Button) findViewById(R.id.germany); 
     germany.setOnClickListener(this); 

     french = (Button) findViewById(R.id.french); 
     french.setOnClickListener(this); 

    } 

    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.english: 
      setLocale("en"); 
      break; 

     case R.id.germany: 
      setLocale("de"); 
      break; 

     case R.id.french: 
      setLocale("fr"); 
      break; 
     } 
    } 
    public void setLocale(String localStr) { 

     Locale localeLang = new Locale(localStr); 
     Locale.setDefault(localeLang); 
     Configuration config = new Configuration(); 
     config.locale = localeLang; 
     getBaseContext().getResources().updateConfiguration(config, 
       getBaseContext().getResources().getDisplayMetrics()); 
     finish(); 
     Intent refreshActivity = new Intent(this, Home.class); 
     refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED); 
     startActivity(refreshActivity); 
    } 

} 

但我從應用出來,並啓動應用程序每次重新選擇的語言成了英語。我沒有得到這個問題的根源。

清單文件,我剛纔也提到了以下行:

android:configChanges="locale" 

任何機構可以糾正我在這裏犯了這個錯誤。

回答

1

你不是想重新發明輪子嗎?

爲什麼不使用用戶在手機上選擇的默認語言環境?這是Android生態系統中的首選方式。

您唯一需要做的是提供資源文件的多個版本(每個期望的區域設置一個)(例如values/strings.xml)。如果您的應用程序資源中找不到用戶的區域設置,則它將默認爲values/strings.xml。否則,它會使用values-[locale]/strings.xml

更多細節:http://developer.android.com/guide/topics/resources/localization.html

4

問題是,您不會在程序啓動之間保存您的語言。堅持使用preferences並在onCreate中閱讀。

1

問題是與你的流量你完成你的活動和,然後開始新的一個意圖所以這樣做:

Intent refreshActivity = new Intent(this, Home.class); 
    refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED); 
    startActivity(refreshActivity); 
    finish(); 
相關問題