Как изменить язык приложения, когда пользователь выбирает язык?

Я хочу, чтобы мое приложение поддерживало три языка: испанский, португальский и английский. И дать возможность выбрать язык в приложении. Я сделал

1) 3 выталкиваемых папок для выдвижных папок, drawable-pt, drawable.

2) 3 значения значений папки-es, values-pt, values.Change String.xml значения в соответствии с языками.

У меня есть ImageView, чтобы выбрать язык. Когда откроется меню, это вариант, который состоит из английского, испанского, португальского.

Я установил Locale внутри приложения при выборе опции с помощью этого кода

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); } 

Я объявляю в Manifest- android: configChanges = "locale"

Он работает, но у него есть проблема.

Проблема: –

1) Когда язык выбран, экран, который содержит изображение выбора языка, не изменяется, а другие экраны меняются.

2) После того, как приложение для изменения ориентации изменит язык поиска в соответствии с языком телефона.

Это выдержка для веб-страницы: http://android.programmerguru.com/android-localization-at-runtime/

Просто изменить язык своего приложения, когда пользователь выбирает его из списка языков. Возьмем такой метод, как ниже, который принимает локаль как String (например, «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); startActivity(refresh); finish(); } 

Убедитесь, что вы импортировали следующие пакеты:

 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"

Вы должны либо удалить 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 }