用例:记录显示给用户的错误消息。
但是,您不希望日志中的消息取决于用户设备的区域设置。另一方面,您不想仅仅为了您的(技术)日志记录而更改用户设备的区域设置。这可以实现吗?我在 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 中一样?