如何在Android设备中选择当前语言?


当前回答

基本的Kotlin答案:

Locale.getDefault().language

其他回答

对我有用的是:

Resources.getSystem().getConfiguration().locale;

Resources. getsystem()返回一个全局共享资源对象,该对象仅提供对系统资源(不包括应用程序资源)的访问,并且没有为当前屏幕配置(不能使用维度单位,不会根据方向改变等等)。

因为getConfiguration。locale现在已经被弃用,在Android牛轧糖中获取主locale的首选方法是:

Resources.getSystem().getConfiguration().getLocales().get(0);

为了保证与之前的Android版本的兼容性,可能的解决方案是一个简单的检查:

Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    locale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else {
    //noinspection deprecation
    locale = Resources.getSystem().getConfiguration().locale;
}

更新

从支持库26.1.0开始,你不需要检查Android版本,因为它提供了一个方便的向后兼容getLocales()方法。

简单地调用:

ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());

获取设备语言的正确方法如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    return context.getResources().getConfiguration().getLocales().get(0);
} else {
    return context.getResources().getConfiguration().locale;
}

希望能有所帮助。

如果你想要获得你的设备所选择的语言,这可能会帮助你:

Locale.getDefault().getDisplayLanguage();

你可以使用Locale.getDefault().getLanguage();要获得常用的语言代码(例如:“德”、“en”)

再加上约翰·佩尔格里姆的回答

context.getResources().getConfiguration().locale
Locale.getDefault()

是等价的,因为android.text.format.DateFormat类可以互换使用这两者。

private static String zeroPad(int inValue, int inMinDigits) {
    return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}

and

public static boolean is24HourFormat(Context context) {
    String value = Settings.System.getString(context.getContentResolver(),
            Settings.System.TIME_12_24);

    if (value == null) {
        Locale locale = context.getResources().getConfiguration().locale;

    // ... snip the rest ...
}

如Locale引用中所述,获取语言的最佳方法是:

Locale.getDefault().getLanguage()

该方法根据ISO 639-1标准返回带有语言id的字符串