Android开当前Locale,不会违约(Android get current Locale,

2019-07-18 08:32发布

我如何在Android的用户的当前语言环境?

我可以得到默认的一个,但是这可能不是当前是否正确?

基本上我想从目前的语言环境的两个字母的语言代码。 不是默认的一个。 没有Locale.current()

Answer 1:

默认的Locale在运行时从系统属性设置您的应用程序的静态构造函数,所以将代表Locale 时,应用程序的启动该设备上的选择。 通常情况下,这是好的,但它确实意味着,如果用户更改其Locale你的应用程序运行后,设置的值getDefaultLocale()可能不会立即更新。

如果您需要陷阱事件这样的一些原因,在你的应用程序,你可能反而试图获取Locale从可用资源Configuration对象,即

Locale current = getResources().getConfiguration().locale;

您可能会发现这个值更快速地经过设置更改如果您的应用程序是必要的更新。



Answer 2:

的Android N(API级24)更新(没有警告):

   Locale getCurrentLocale(Context context){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            return context.getResources().getConfiguration().getLocales().get(0);
        } else{
            //noinspection deprecation
            return context.getResources().getConfiguration().locale;
        }
    }


Answer 3:

如果您使用的是Android的支持库,你可以使用ConfigurationCompat代替@ Makalele的方法来摆脱废弃警告的:

Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);

或科特林:

val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]


Answer 4:

getDefault的文档:

返回用户的首选区域。 这可能已被覆盖与setDefault(区域)这个过程。

另外从Locale文档:

默认的语言环境是适合于涉及数据呈现给用户的任务。

好像你应该使用它。



Answer 5:

 private Locale getLocale(Context context){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            return context.getResources().getConfiguration().getLocales().get(0);
        } else{
            //noinspection deprecation
            return context.getResources().getConfiguration().locale;
        }
    }


文章来源: Android get current Locale, not default