2

我正在与在应用程序上设置语言环境作斗争。

我想要的是有一个切换按钮:我想让用户在默认系统区域设置和固定语言(例如“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;
4

0 回答 0