使用特定语言环境中的字符串从默认语言环境中获取字符串

kat*_*tit 16 android localization

好的,我知道标题声音疯了:)

这就是我想要的.我的应用程序已本地化为设备用户,但我发送回服务器的信息需要全部为英文.我的默认应用语言环境英语.

例如,我有数组:

  • 苹果
  • 桔子
  • 桃子

我有本地化的数组:

  • Яблоки
  • Апельсины
  • Персики

当俄罗斯用户看到列表并选择几个项目时 - 我需要获得相应的英文版本.

我想我的答案归结为如何做getString()并传递locale?或者如何在特定区域设置中获取阵列?

wje*_*hak 24

即使设备上的默认语言环境不同,下面的代码也会检索波兰语的本地化字符串:

Configuration conf = getResources().getConfiguration();
conf.locale = new Locale("pl");
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Resources resources = new Resources(getAssets(), metrics, conf);
/* get localized string */
String str = resources.getString(R.string.hello);
Run Code Online (Sandbox Code Playgroud)

我希望这也适用于其他资源类型,如数组,所以它应该足以用"en"替换"pl"...

  • 另外,为避免修改当前配置,请执行以下操作:`Configuration conf = new Configuration(getResources().getConfiguration());` (9认同)
  • 请考虑主演https://code.google.com/p/android/issues/detail?id=67672 (3认同)

Cal*_*lin 5

如果您使用 JB 2.2.x 或更高版本(基本上 API >= 17),您可以使用createConfigurationContext执行以下操作:

public String translate(Locale locale, int resId) {  
    Configuration config = new Configuration(context.getResources().getConfiguration()); 
    config.setLocale(locale);   
    return context.createConfigurationContext(config).getText(resId);
}
Run Code Online (Sandbox Code Playgroud)


sor*_*rin 1

您必须通过其他内容来标识元素,例如 id,甚至英文名称。

不可能获取给定本地化字符串的原始字符串。原因之一是字符串的本地化不是传递函数,但还有很多其他原因导致这不是一个好的方向。