У меня такой вопрос: у меня есть активность входа/регистрации, которая по умолчанию использует русскую версию strings.xml. Итак, когда пользователь заходит в приложение - он видит текст на русском языке. Но в этом действии есть кнопка для выбора другого языка. Когда он нажимает эту кнопку, я открываю другое действие, в котором он может выбрать, какой язык использовать (английский/испанский/немецкий/и т. д.). Когда он выбирает язык (скажем, немецкий). Как я могу с этого момента показать пользователю текст, который теперь следует использовать из немецкой версии strings.xml? И еще - как сделать так: если локаль пользователя из России, Украины, Грузии --- то использовать русскую версию strings.xml, а если локаль пользователя из любой другой страны - пользовательскую английскую версию strings.xml? Спасибо.
Локализация андроид приложения. Ресурсы одной строки для нескольких стран
Ответы (2)
Я настоятельно рекомендую использовать localise.
У нас есть приложение с 6 вкусами и более чем на 16 языках. Это был бы кошмар, если бы этой библиотеки не существовало.
У них есть руководство по использованию пользовательской локали: но вкратце:
// Create a new Locale object
Locale locale = new Locale("ru");
Locale.setDefault(locale);
// Create a new configuration object
Configuration config = new Configuration();
// Set the locale of the new configuration
config.locale = locale;
// Update the configuration of the Accplication context
getResources().updateConfiguration(
config,
getResources().getDisplayMetrics()
);
Что вы хотите сделать, это:
Имейте список переводов контента с учетом языка/региона в формате пар ключ-значение. Вы можете добиться этого в одном файле или иметь отдельные файлы и называть их в соответствии с комбинацией язык-локаль. Я предпочитаю последнюю версию, более простую в обслуживании.
Далее во время запуска приложения вы хотите прочитать текущую локаль телефона с помощью
Locale current = getResources().getConfiguration().locale;
Сопоставьте это значение с файлами содержимого (в зависимости от фреймворка), созданными выше, и вы получите мгновенную локализацию.