В моем приложении у меня есть выбор выбора языка.
Существует три языка: английский, немецкий и испанский. Когда я выбираю параметр, весь язык приложения должен быть изменен.
Как я могу сделать это возможным?
В моем приложении у меня есть выбор выбора языка.
Существует три языка: английский, немецкий и испанский. Когда я выбираю параметр, весь язык приложения должен быть изменен.
Как я могу сделать это возможным?
Вы хотите, чтобы вы использовали другой язык, чем язык по умолчанию в телефоне? У меня это в одном приложении, и это то, что я должен был сделать.
Добавьте это в объявление своей деятельности в AndroidManifest.xml
<activity
android:name=".ui.SomeActivity"
android:configChanges="locale"
:
:
</activity>
А затем вызовите в своей работе такой метод из onCreate
:
public static void setLanguage(Context context, String languageToLoad) {
Log.d(TAG, "setting language");
Locale locale = new Locale(languageToLoad); //e.g "sv"
Locale systemLocale = SystemLocale.getInstance().getCurrentLocale(context);
if (systemLocale != null && systemLocale.equals(locale)) {
Log.d(TAG, "Already correct language set");
return;
}
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
Log.d(TAG, "Language set");
}
Вы просто добавляете папку значений в соответствии с языком.
Например, я добавил 3 языка: английский, арабский и хинди.
В папке res
создайте values-ar
для арабского и values-hi
для хинди для хранения всех строк, используемых в приложении.
Теперь у меня есть список языков. Поэтому, когда пользователь нажимает на один из языков, язык приложения будет изменен, и язык телефона останется таким же.
Вот код.
listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
String language = ((TextView) view).getText().toString();
if (language.equals("English")) {
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources()
.updateConfiguration(
config,
getBaseContext().getResources()
.getDisplayMetrics());
Toast.makeText(ChangeLanguage.this, "Locale in English",
Toast.LENGTH_LONG).show();
} else if (language.equals("Arabic")) {
Locale locale = new Locale("ar");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources()
.updateConfiguration(
config,
getBaseContext().getResources()
.getDisplayMetrics());
Toast.makeText(ChangeLanguage.this, "Locale in Arabic",
Toast.LENGTH_LONG).show();
}else if (language.equals("Hindi")) {
Locale locale = new Locale("hi");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources()
.updateConfiguration(
config,
getBaseContext().getResources()
.getDisplayMetrics());
Toast.makeText(ChangeLanguage.this, "Locale in Hindi",
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ChangeLanguage.this,
"Locale in not changed!", Toast.LENGTH_LONG).show();
}
/*
* Toast.makeText(getApplicationContext(), language,
* Toast.LENGTH_SHORT) .show();
*/
GetterSetter.getInstance().setLanguage(changelanguage);
startActivity(new Intent(ChangeLanguage.this,
MainSettings.class));
main.tabhost.setCurrentTab(3);
}
});