从资源加载语言特定的字符串?

Har*_*elm 33 string resources android

在我的一个Android应用中,我需要加载特定语言的字符串.例如:

 values:    <string name="txt_help">Help</string>
 values-de: <string name="txt_help">Hilfe</string>
 values-fr: <string name="txt_help">Aider</string>
Run Code Online (Sandbox Code Playgroud)

现在我需要默认(值)文本.

有没有办法加载给定语言"en"的密钥"txt_help"?我找不到可以将语言环境设置为附加参数的方法.

或者我可以创建具有给定语言环境的新ResourceManager并通过此资源对象读取String吗?

提前谢谢了.HJW

Ano*_*mie 45

查看文档,这看起来很有希望:

Resources standardResources = context.getResources();
AssetManager assets = standardResources.getAssets();
DisplayMetrics metrics = standardResources.getDisplayMetrics();
Configuration config = new Configuration(standardResources.getConfiguration());
config.locale = Locale.US;
Resources defaultResources = new Resources(assets, metrics, config);
Run Code Online (Sandbox Code Playgroud)

换句话说,创建一个配置为标准语言环境的新Resources对象.

  • 非常接近......奇怪的是`资源defaultResources =新资源(资产,指标,配置);`行似乎改变了一些东西,以便在调用之后,`getResources()`返回我在这里自定义设置的新语言环境......任何线索为什么会发生这种情况?我想我总是可以将config.locale重新设置回原始版本; 但我不明白如何创建一个新的Resources对象可能会导致我的标准getResources()发生变化. (7认同)
  • @GendoIkari:看起来你是对的.问题是一个Resources对象在内部将其配置(包括语言环境)向下推送到底层的AssetManager对象,因此它是被更改的两个Resources对象的AssetManager.不幸的是,似乎没有任何记录方法来克隆或创建新的AssetManager,只是为了检索现有的AssetManager.所以看起来我们在获取资源之前更改了配置,然后再将其更改回来. (4认同)
  • 有意思...谢谢.我稍微搞砸了代码,所以现在我只调用`new Resources(assets,metrics,config);`constructor; 甚至不需要将其设置为变量.我只是设置配置; 调用构造函数; 得到我的弦; 然后重新设置配置并再次调用构造函数.有用.再次感谢! (2认同)