10

我的应用程序中有两个语言环境。我可以在不更改当前语言环境的情况下访问资源,例如来自不同语言环境的字符串数组吗?我的意思是编码我不喜欢在设置中更改它。

4

4 回答 4

32

更好的解决方案是(如果您使用的是 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;
}
于 2015-11-10T11:41:19.393 回答
9

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

当前的语言环境没有改变,这就是重点。

于 2012-06-04T09:35:33.847 回答
2

是的你可以。您必须创建一个新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

于 2012-06-03T22:54:52.677 回答
0

在 Java 7(所以不是 android)中,可以为格式资源设置不同的区域设置,并为显示设置不同的区域设置:

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

类似的线程:在应用程序本身内更改区域设置

于 2013-01-30T10:32:45.527 回答