2010-10-26 6 views
14

Мне известно о создании каталога новых значений для языка с суффиксом кода языка. Для german: values-de или French: values-fr затем скопируйте наш string.xml в это и переведите каждую запись. И это работает на основе настроек локализации телефона.Пользовательская поддержка нескольких языков

Я хотел знать, можем ли мы обойти настройки телефона и заставить пользователя выбрать его нужный язык внутри приложения?

Мое требование: я хочу указать вариант выбора языка внутри своего приложения и сделать выбор пользователем языка, который он хочет для приложения. Как динамически переключаться между string.xml (для разных языков)? ?

заранее спасибо

+0

Вы можете использовать следующую библиотеку, которая предоставляет список языков, предпочтение экрана настроек, и переопределяет язык в вашем application: https://github.com/delight-im/Android-Languages ​​ – caw

ответ

5

проверить этот пост ... Это то же самое, в принципе.

Changing Locale within the app itself

Locale appLoc = new Locale("en"); 
Locale.setDefault(appLoc); 
Configuration appConfig = new Configuration(); 
appConfig.locale = appLoc; 
getBaseContext().getResources().updateConfiguration(appConfig, 
    getBaseContext().getResources().getDisplayMetrics()); 
11

Создать метод, который устанавливает ваши основные Locale.Lets говорят

public static void setDefaultLocale(Context context,String locale) { 
     Locale locJa = new Locale(locale); 
     Locale.setDefault(locJa); 

     Configuration config = new Configuration(); 
     config.locale = locJa; 

     context.getResources().updateConfiguration(config, context.getResources() 
       .getDisplayMetrics()); 

     locJa = null; 
     config = null; 
    } 

теперь проверить, когда пользователь выбрал локаль. (Здесь в основном я использовал меню для выбора языка).

Configuration config = new Configuration(); 
String newLocale = config.locale.getLanguage().substring(0, 2) 
    .toLowerCase(); 
if ("ja".equalsIgnoreCase(newLocale)) { 
// Call above method with context & newLocale 
} 
// Sequentially you check for Locale & change that. 
+0

Любая причина, по которой вы устанавливаете locJa и config в null в конце setDefaultLocale? Они все равно выйдут из области видимости ... –

+0

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

+1

+1 Хороший материал для объяснения вещей – Naved

1

Если вы хотите, чтобы получить изображения в соответствии с их соответствующими языками, Вы должны создать папку макета ниже, как this.First я взять пример пользовательской локализации.

Locale appLoc = new Locale("xx"); 
Locale.setDefault(appLoc); 
Configuration appConfig = new Configuration(); 
appConfig.locale = appLoc; 
getBaseContext().getResources().updateConfiguration(appConfig, 
    getBaseContext().getResources().getDisplayMetrics()); 

Папка макет должен быть макет-хх и ваша вытяжке папка должна также быть вытяжке-xx.But одна вещь, что когда вы меняете язык, вы должны обновить layout.I используется в моем приложении, принять кнопку и установить фоновое изображение. Но иногда изображения не меняются, поэтому я сделал это.

btn.setBackgroundDrawable(null); 
btn.setBackgroundResource(R.drwable.yourimage); 
0

It is very easy just follow this link

languageToLoad = "hi"; // your language 
     locale = new Locale(languageToLoad); 
     Locale.setDefault(locale); 
     config = new Configuration(); 
     config.locale = locale; 
     getBaseContext().getResources().updateConfiguration(config, 
       getBaseContext().getResources().getDisplayMetrics()); 
     this.setContentView(R.layout.activity_main); 

- Смотри на: http://www.theappguruz.com/blog/multi-language-support-to-android-app#sthash.eGmzq57K.dpuf

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