115

アプリでスペイン語、ポルトガル語、英語の 3 つの言語をサポートしたいと考えています。アプリで言語を選択するオプションを提供します。

1) 3 つの描画可能フォルダー drawable-es、drawable-pt、drawable。

2) 3 つの値フォルダー values-es、values-pt、values.言語に応じて String.xml の値を変更します。

言語を選択するためのimageViewがあります。クリックすると、英語、スペイン語、ポルトガル語のオプションで構成されるメニューが開きます。

このコードでオプション選択時にアプリ内にロケールを設定します

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.en:
             Locale locale = new Locale("en"); 
             Locale.setDefault(locale);
             Configuration config = new Configuration();
             config.locale = locale;
             getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
             Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
             break;

        case R.id.pt:
             Locale locale2 = new Locale("pt"); 
             Locale.setDefault(locale2);
             Configuration config2 = new Configuration();
             config2.locale = locale2;
             getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
             break;

        case R.id.es:
             Locale locale3 = new Locale("es"); 
             Locale.setDefault(locale3);
             Configuration config3 = new Configuration();
             config3.locale = locale3;
             getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
             break;     
    }
    return super.onOptionsItemSelected(item);
}

マニフェストで宣言しました - android:configChanges="locale"

動作しますが、いくつかの問題があります。

問題:-

1)言語を選択すると、言語選択のイメージで構成された画面は変わらず、他の画面が切り替わる。

2) 方向変更後、アプリは電話のロケールに応じて言語を復元します。

4

8 に答える 8

182

Webページの抜粋です:http://android.programmerguru.com/android-localization-at-runtime/

ユーザーが言語のリストからアプリを選択すると、アプリの言語を簡単に変更できます。ロケールを文字列として受け入れる以下のようなメソッド(英語の場合は「en」、ヒンディー語の場合は「hi」など)を用意し、アプリのロケールを構成して、言語の変更を反映するように現在のアクティビティを更新します。適用したロケールは、手動で再度変更するまで変更されません。

public void setLocale(String lang) { 
    Locale myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, AndroidLocalize.class); 
    finish();
    startActivity(refresh); 
} 

次のパッケージをインポートしたことを確認してください。

import java.util.Locale; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.content.res.Resources; 
import android.util.DisplayMetrics; 

マニフェストをアクティビティandroid:configChanges = "locale|orientation"に追加します

于 2012-10-18T11:55:46.860 に答える
6

マニフェストから削除するandroid:configChanges="locale"と、アクティビティがリロードされるか、onConfigurationChangedメソッドをオーバーライドする必要があります。

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
    // your code here, you can use newConfig.locale if you need to check the language
    // or just re-set all the labels to desired string resource
}
于 2013-10-29T21:08:20.983 に答える