Home » Android » Can I access to resources from different locale android?

Can I access to resources from different locale android?

Posted by: admin May 14, 2020 Leave a comment

Questions:

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.

How to&Answers:

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

Answer:

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.

Answer:

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

Answer:

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 .