用例: 记录用户显示的错误消息。
然而,您不希望在日志中出现依赖于用户设备语言环境的消息。 另一方面,您也不想仅为了技术日志记录而更改用户设备的语言环境。 这是否可以实现? 我在stackoverflow上找到了几个潜在的解决方案:
- 如何从Android中获取不同语言环境的字符串?
- 我可以访问来自不同区域设置的Android资源吗?
- android - 使用特定语言环境的字符串获取默认语言环境中的字符串
- 甚至可能是 android-在应用程序内部更改语言环境
然而,它们都会导致更改我的设备语言环境(直到下一次配置更改)。
无论如何,我的当前解决方法是这样的:
public String getStringInDefaultLocale(int resId) {
Resources currentResources = getResources();
AssetManager assets = currentResources.getAssets();
DisplayMetrics metrics = currentResources.getDisplayMetrics();
Configuration config = new Configuration(
currentResources.getConfiguration());
config.locale = DEFAULT_LOCALE;
/*
* Note: This (temporiarily) changes the devices locale! TODO find a
* better way to get the string in the specific locale
*/
Resources defaultLocaleResources = new Resources(assets, metrics,
config);
String string = defaultLocaleResources.getString(resId);
// Restore device-specific locale
new Resources(assets, metrics, currentResources.getConfiguration());
return string;
}
坦白说,我不喜欢这种方法。它不够高效,并且考虑到并发等问题,可能会导致某些视图显示在“错误”的语言环境下。
那么,有什么想法吗?也许可以使用ResourceBundle,就像标准Java一样实现这个功能?