获取设备当前语言

720

我们如何获取Android设备中当前选择的语言?


17
这里大部分答案是关于应用程序语言的。考虑到你可以在代码中设置应用程序的默认语言环境,Sarpe 给出的答案是正确的——那会给你设备的语言环境。请注意保持原文意思不变,使翻译通俗易懂。 - Victor Ionescu
@VictorIonescu 感谢您的评论。Sarpe的答案是获取设备区域设置的正确答案。请参考此链接:https://dev59.com/lW855IYBdhLWcg3wq2TL#28498119 - Varad Mondkar
这个回答解决了你的问题吗?如何在Android 13中从应用程序语言识别设备语言? - k4dima
32个回答

3
如果您选择的语言无法输入希腊字母,那么这个希腊字母表可能会对您有所帮助。
getDisplayLanguage().toString() = English
getLanguage().toString() = en 
getISO3Language().toString() = eng
getDisplayLanguage()) = English
getLanguage() = en
getISO3Language() = eng

现在尝试用希腊语来操作。
getDisplayLanguage().toString() = Ελληνικά
getLanguage().toString() = el
getISO3Language().toString() = ell
getDisplayLanguage()) = Ελληνικά
getLanguage() = el
getISO3Language() = ell

2

有两种语言。

操作系统默认语言:

Locale.getDefault().getDisplayLanguage();

应用程序当前的语言:

getResources().getConfiguration().locale.getDisplayLanguage();//return string

4
不是这样的,如果你在应用中更改了语言环境,即使第一次也会显示更改后的值而不是系统默认值。 - To Kra

2
Locale.getDefault().getDisplayLanguage()

会为语言提供书面名称,例如英语、荷兰语、法语

Locale.getDefault().getLanguage()

会给你一个语言代码,例如:en, nl, fr

这两种方法都返回字符串


1
获取设备语言的正确方式如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    return context.getResources().getConfiguration().getLocales().get(0);
} else {
    return context.getResources().getConfiguration().locale;
}

希望它有所帮助。

1
下面的代码将返回类似于US的国家代码。
Locale.getDefault().getCountry()

0

你可以使用 .setLanguage(Locale.forLanguageTag(Locale.getDefault().getLanguage())); 这很好


Locale.getDefault().getLanguage() ---> en
Locale.getDefault().getISO3Language() ---> eng Locale.getDefault().getCountry() ---> US Locale.getDefault().getISO3Country() ---> USA Locale.getDefault().getDisplayCountry() ---> United States Locale.getDefault().getDisplayName() ---> English (United States) Locale.getDefault().toString() ---> en_US Locale.getDefault().getDisplayLanguage()---> English Locale.getDefault().toLanguageTag() ---> en-US
- undefined

0
在Jetpack Compose中,从@Composable内部提供了一个更新的答案。
val locale = Locale.current
// locale.language

0

以下是获取设备国家代码的代码。适用于所有版本的安卓,包括奥利奥。

解决方案:如果用户没有SIM卡,则获取他在手机设置期间使用的国家或当前语言选择。

public static String getDeviceCountry(Context context) {
    String deviceCountryCode = null;

    final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        if(tm != null) {
            deviceCountryCode = tm.getNetworkCountryIso();
        }

    if (deviceCountryCode != null && deviceCountryCode.length() <=3) {
        deviceCountryCode = deviceCountryCode.toUpperCase();
    }
    else {
        deviceCountryCode = ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getCountry().toUpperCase();
    }

  //  Log.d("countryCode","  : " + deviceCountryCode );
    return deviceCountryCode;
}

0

我的解决方案是这样的

@SuppressWarnings("deprecation")
public String getCurrentLocale2() {
    return Resources.getSystem().getConfiguration().locale.getLanguage();
}

@TargetApi(Build.VERSION_CODES.N)
public Locale getCurrentLocale() {
    getResources();
    return Resources.getSystem().getConfiguration().getLocales().get(0);
}

然后

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Log.e("Locale", getCurrentLocale().getLanguage());
            } else {
                Log.e("Locale", getCurrentLocale2().toString());
            }

显示 ---> 中文


0

如果您使用Jetpack Compose

在可组合的函数内部

Context.applicationContext.resources.configuration.locales.get(0).language 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接