2012-05-22 4 views
2

У меня есть 3 кнопки для изменения языка. Поэтому мне нужно сделать метод, где я мог бы установить слушателей на кнопки, которые могут менять язык при каждом нажатии. Я пробовал это https://stackoverflow.com/a/2900144/1088229, но таким образом он меняет локаль только один раз и кажется, что это больше не работает (если я снова нажимаю, он даже не отвечает). Поэтому я добавил changeLanguageListener() в конец слушателя, поэтому слушатель обновляется.Android: изменение языка программно

Так хорошо, как я решил это или есть другой способ?

private void changeLanguageListener() { 
    final Button butEn = (Button) findViewById(R.id.button_language_en); 
    final Button butLt = (Button) findViewById(R.id.button_language_lt); 
    final Button butRu = (Button) findViewById(R.id.button_language_ru); 
    OnClickListener listener = new OnClickListener() { 

     public void onClick(View v) { 
      Button but = (Button) v; 
      Resources res = getResources(); 
      String current = res.getConfiguration().locale.getCountry(); 
      Log.i("Current", current); 
      String localeString = new String(current); 
      if (but.equals(butEn)) { 
       localeString = "en"; 
      } else if (but.equals(butLt)) { 
       localeString = "lt"; 
      } else if (but.equals(butRu)) { 
       localeString = "ru"; 
      } 
      Log.i("Clicked", localeString); 

      if (!current.equalsIgnoreCase(localeString) && localeString.length() > 0) { 
       // Change locale settings in the app. 
       DisplayMetrics dm = res.getDisplayMetrics(); 
       android.content.res.Configuration conf = res.getConfiguration(); 
       conf.locale = new Locale(localeString.toLowerCase()); 
       res.updateConfiguration(conf, dm); 
       //refresh menu 
       setGridView(); 
       //added this line to get refreshed listener 
       changeLanguageListener(); 
      }    
     } 
    }; 
    butEn.setOnClickListener(listener); 
    butLt.setOnClickListener(listener); 
    butRu.setOnClickListener(listener); 
} 

ответ

2

Таким образом, из-за только два мероприятия (два режима меню), где я позволяю изменить региональные настройки, я просто перезапустить активность сразу после изменения локало, так все обновляется. Не нашли какой-либо другой лучшее решение

1

Я бы не рекомендовал менять язык в вашем приложении. Лучшим решением будет кнопка, которая откроет настройки локали системы. Вы можете использовать для этого следующее намерение.

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCALE, 0); 

Для получения дополнительной информации о настройках локали: http://developer.android.com/reference/android/provider/Settings.html#ACTION_LOCALE_SETTINGS

+0

Основная причина изменения местоположения программно является то, что на языке там нет языка, который мне нужен. Например, мой телефон имеет балтийский языковой пакет, поэтому в нем много языков, в том числе литовский (мой), английский, но нет русского языка (который нам тоже нужен для приложения). –

+2

@Moss: _ «Я бы не рекомендовал менять язык в вашем приложении» _ Почему нет? Существует много случаев, когда приложение может изменить язык, чтобы помочь конечному пользователю. Например, приложение первой помощи, в котором указывается язык, на котором говорит турист, позволяет им понять инструкции фельдшера, пока они обращаются за травмами на чужбине. – ChuongPham

+1

@ChuongPham: ваш случай действительно очень хороший пример того, где изменения в приложении действительно полезны и требуются. Но в общем случае я предпочитаю использовать систему для обработки, на каком языке должно быть приложение. – Moss

2
Resources res = context.getResources(); 
// Change locale settings in the app. 

DisplayMetrics dm = res.getDisplayMetrics(); 

android.content.res.Configuration conf = res.getConfiguration(); 

conf.locale = new Locale(language_code.toLowerCase()); 
res.updateConfiguration(conf, dm); 

Если у вас есть язык конкретное содержание -. Вы можете изменить эту базу на установке ## Heading ##

+4

почему этот код скопирован? http://stackoverflow.com/a/2900144/3736955 –

Смежные вопросы