2011-06-20 12 views
6

アプリケーションの言語をユーザー設定に応じて設定したいと思いますが、これまでのところどのようにしたいのですか。Androidの設定でアプリケーションの言語を設定する

私はデフォルト値:strings.xmlを設定しています。また、値はスペイン語でstrings.xmlです。私は、言語を選んだ気になるものを選ぶことができる、好みのアクティビティにユーザを導くメニューオプションを持っています。

public class Preference extends PreferenceActivity implements 
     OnSharedPreferenceChangeListener { 
...... 
// Set up a listener whenever a key changes 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 


...} 
//(......) 

//and here I have the listener so when the language pref changes value the locale gets changed. 
    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
      String key) { 
     if (key.equals("listPref2")) { 
      String idioma = sharedPreferences.getString("listPref2", "catala"); 
      if ("castella".equals(idioma)) { 
       idioma = "es_ES"; 

       Locale locale = new Locale(idioma); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getApplicationContext().getResources().updateConfiguration(config, 
         getBaseContext().getResources().getDisplayMetrics()); 
      } 
     } 
    } 

私は、言語を変更するとき、私は後で戻ってくるか、言語がen_USのロケールデフォルトに戻って取得するエミュレータを再起動したときにそう、それは動作しますが、その後:

は、だからここにいくつかのコードの抽出物でありますアプリの言語がデフォルトに再び変更されます。それを整理するために私は何ができますか?

私はすべての私の活動からアクセスすることができますこの設定を取得することができますし、毎回ロケールを設定するが、私は少し重いそれがより多くの方法でそれを見つけることを見つけるエレガントな方法

私がしたいのは、ユーザーが言語を設定して2日後に戻ったときに、言語を再度変更する必要がないということです。

アイデア?

答えて

11

それは誰かを助けるかもしれません。私は、メインの活動のマニフェストにfolowing追加しました:

android:configChanges="locale"

ユーザーが、私は確認ボタンを入れているし、このボタンをlnagagesがリセットされる理由であるメインの活動にあなたをもたらし好みchosesが続い

setContentView(R.layout.list_event);

:私は前にこのメソッドを呼び出して、私はそれらの20のように持っているすべての活動で

public static void updateLanguage(Context context, String idioma) { 
    if (!"".equals(idioma)) { 
     if ("castella".equals(idioma)) { 
      idioma = "es_ES"; 
     } else if ("catala".equals(idioma)) { 
      idioma = "ca_ES"; 
     } 
     Locale locale = new Locale(idioma); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getResources().updateConfiguration(config, null); 
    } 
} 

エンド:

は、私は、ロケールを変更するには、このコードを持っている静的なクラスを持っています

これらの方法では、画面を回転させるとアクティビティが言語を変更しません。 ここに私を助けたブログへのリンクがあります: http://adrianvintu.com/blogengine/post/Force-Locale-on-Android.aspx

1

MainActivity onCreateメソッドでロケールを設定する必要があると思います。 onSharedPreferenceChangedの方法と同じ方法で設定します。

+1

私はあなたが言ったことを行っていますが、これはメインアクティビティでのみロケールを変更します。私はすべての私の活動の始めに同じコードを追加するだけです。ありがとう – vallllll

+0

私は地元のことを試みたことがないと認めなければなりません。ユーザー設定に基づいているように見えます。あなたはこれを見ましたか? http://developer.android.com/resources/tutorials/localization/index.html – bytebender

+0

はい既定の言語と2つの言語(スペイン語とカタロニア語)を既に設定しています。ユーザーがロケールを選択できるようにする必要があります。電話でのみロケールを決定するだけでは不十分です。 – vallllll

関連する問題