12

I have two locale in my application. Can I access to resources, for example string array from different locale without to change current locale ? I mean with coding I don't like to change it in Settings.

vikifor
  • 455
  • 1
  • 5
  • 17

4 Answers4

36

The better solution would be (if you're on 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;
}
Eugen Martynov
  • 19,888
  • 10
  • 61
  • 114
9

Here is the code that work for me if cMK is String array from current locale and cEN is string array from diffrent locale

 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);

The current locale isn't changed and that was the point.

vikifor
  • 455
  • 1
  • 5
  • 17
2

Yes, you can. You have to create a new Resources object specifying the intending Configuration.

Reference: http://developer.android.com/reference/android/content/res/Resources.html#Resources%28android.content.res.AssetManager,%20android.util.DisplayMetrics,%20android.content.res.Configuration%29

K-ballo
  • 80,396
  • 20
  • 159
  • 169
0

In Java 7 (so not android) Locale can be set differently for format resources and different for display:

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

Similar thread: Changing Locale within the app itself .

Community
  • 1
  • 1
Waldemar Wosiński
  • 1,490
  • 17
  • 28