Могу ли я получить доступ к ресурсам из разных локалей android?
У меня есть две локали в моем приложении. Могу ли я получить доступ к ресурсам, например массиву строк из другой локали, без изменения текущей локали? Я имею в виду, что с кодированием я не люблю менять его в настройках.
4 ответа
Лучшее решение было бы (если вы используете API 17):
@NonNull
protected String getEnglishString() {
Configuration configuration = getEnglishConfiguration();
return getContext().createConfigurationContext(configuration).getResources().getString(message);
}
@NonNull
private Configuration getEnglishConfiguration() {
Configuration configuration = new Configuration(getContext().getResources().getConfiguration());
configuration.setLocale(new Locale("en"));
return configuration;
}
Вот код, который работает для меня, если cMK - это массив строк из текущей локали, а cEN - массив строк из другой локали.
cMK = getResources().getStringArray(R.array.cities);
Configuration confTmp =new Configuration( getResources().getConfiguration());
confTmp.locale = new Locale("en");
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Resources resources = new Resources(getAssets(), metrics, confTmp);
/* get localized string */
cENG = getResources().getStringArray(R.array.cities);
Текущий язык не изменился, и в этом была суть.
Да, ты можешь. Вы должны создать новый Resources
объект, указывающий намерение Configuration
,
В Java 7 (не Android) Locale может быть установлен по-разному для ресурсов формата и по-разному для отображения:
Locale.setDefault(DISPLAY, Locale.PL);
Locale.setDefault(FORMAT, Locale.US);
Подобная тема: Изменение локали внутри самого приложения.