我正在与在应用程序上设置语言环境作斗争。
我想要的是有一个切换按钮:我想让用户在默认系统区域设置和固定语言(例如“en”)之间切换。
我得到了一小段代码,取自 SO 上的另一张票(谢谢):
private static void setThisLocale(Locale locale) {
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
ctx.getResources().updateConfiguration(config, ctx.getResources().getDisplayMetrics());
Log.d("locale", "locale set: " + locale.getLanguage());
}
此函数设置语言环境,它看起来可以工作。
问题是,在此之后,defaultLanguage 仍然设置,我无法再检测到哪个是原始语言环境。所以,我不能回去!例如:
defaultLocale = ctx.getResources().getConfiguration().locale;
或者
defaultLocale = Locale.getDefault();
两者都会返回“en”,即使在更改它之前默认语言环境是......说......“it”。
很奇怪,即使在手动重启应用程序后它也不会改变,看起来 Android 存储了任何应用程序的默认语言环境。因此,即使在应用程序启动时检查哪个是默认语言环境也不起作用。
返回原始默认区域设置的唯一方法是重新安装应用程序,然后按钮一次,允许我在原始默认区域设置和“en”之间切换,直到它开始交替“en”和永远的“en”。
由此看来,任何应用程序都存储了默认语言环境,尽管我不知道。
当然,一个糟糕的编程补丁可能是仅当我发现它与“en”不同时才记住默认语言环境,但这不会检测到真正的系统语言环境,我想找到更好的东西。
有没有办法检测哪个是系统的真实默认语言环境,而不仅仅是为应用程序设置的最新默认语言环境?
找到了。正确答案是:
defaultLocale = Resources.getSystem().getConfiguration().locale;