Могу ли я получить доступ к ресурсам из разных локалей 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,

Ссылка: http://developer.android.com/reference/android/content/res/Resources.html#Resources%28android.content.res.AssetManager,%20android.util.DisplayMetrics,%20android.content.res.Configuration% 29

В Java 7 (не Android) Locale может быть установлен по-разному для ресурсов формата и по-разному для отображения:

Locale.setDefault(DISPLAY, Locale.PL);
Locale.setDefault(FORMAT, Locale.US);

Подобная тема: Изменение локали внутри самого приложения.

Другие вопросы по тегам