2012-02-01 14 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のエコシステムで推奨される方法です。

リソースファイルの複数のバージョン(希望するロケールごとに1つ)を指定するだけです(例: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(); 
関連する問題