Can I access to resources from different locale android?

前端 未结 4 1576
执念已碎
执念已碎 2020-12-01 19:26

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

相关标签:
4条回答
  • 2020-12-01 19:33

    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 .

    0 讨论(0)
  • 2020-12-01 19:34

    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

    0 讨论(0)
  • 2020-12-01 19:40

    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.

    0 讨论(0)
  • 2020-12-01 19:46

    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;
    }
    
    0 讨论(0)
提交回复
热议问题