Смотрите здесь мой ответ
Android Font in more then one langauge on single screen
, например, если вы хотите, чтобы ваше приложение для поддержки как на английском и арабские строки (в дополнение к строк по умолчанию), вы можете просто создать два дополнительных ресурса каталоги под названием /res/values-en
(для английских строк.xml) и /res/values-ar
(для арабских строк.xml).
В файлах strings.xml
имена ресурсов совпадают.
Например, файл может /res/values-en/strings.xml
выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello in English!</string>
</resources>
Принимая во внимание, /res/values-ar/strings.xml файл будет выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">مرحبا في اللغة الإنجليزية</string>
</resources>
также , файл /res/values-ur_IN/strings.xml будет выглядеть так для урду:
ur_IN для india ur_PK для pakisthan
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">انگریزی میں خوش!!</string>
</resources>
файл макета по умолчанию в/RES/директории макета, который отображает строку ссылается на строку имя переменной @ строки/привет, без учета языковой или директории строка ресурса находится.
Операционная система Android определяет, какая версия для загрузки во время выполнения (французский, английский или по умолчанию).Компоновка с управлением TextView для отображения строки может выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello" >
</LinearLayout>
Строка доступ программно обычным способом:
String str = getString(R.string.hello);
Для изменения языка необходимо нравится, что изменение lang ..
btn_english.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
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, getResources().getString(R.string.lbl_langSelectEnglis), Toast.LENGTH_SHORT).show();
}
});
btn_arbice.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Locale locale = new Locale("ar");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, getResources().getString(R.string.lbl_langSelecURdu), Toast.LENGTH_SHORT).show();
}
});
btn_urdu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Locale locale = new Locale("ur_IN");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(HomeActivity.this, getResources().getString(R.string.lbl_langSelectEnglis), Toast.LENGTH_SHORT).show();
}
});
Неужели вам по существу нужно перезапустить мероприятие? Как только вы измените локаль, это не просто сразу обновит весь текст приложения. –
@ cricket_007 Да, это то, что я делаю, но я думал, что может быть лучшее решение для этого. – User16119012
Не знаю, что я знаю, без ручного вызова метода setText на все –