web-dev-qa-db-ja.com

端末の現在の言語を取得する

Androidデバイスで現在選択されている言語を取得する方法を教えてください。

547
Pinki

お使いのデバイスの選択した言語を取得したい場合は、これが役立ちます。

Locale.getDefault().getDisplayLanguage();
780
DeRagan

私は私のAndroid 4.1.2デバイスでLocaleメソッドをチェックしました、そして結果:

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
705
trante

私にとってうまくいったのは、

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

Resource.getSystem()は、システムリソースのみ(アプリケーションリソースは不可)へのアクセスを提供し、現在の画面には設定されていない(ディメンション単位を使用できない、方向などによって変更されない)グローバル共有Resourcesオブジェクトを返します。

getConfiguration.localeは現在推奨されていないため、Android Nougatでプライマリロケールを取得するための推奨方法は次のとおりです。

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());
76
Sarpe

現在のロケールから言語を「抽出」することができます。標準のJava APIを介して、またはAndroid Contextを使用してロケールを抽出できます。たとえば、以下の2行は同じです。

String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = Java.util.Locale.getDefault().getDisplayName();
43
Johan Pelgrim

他の人の時間や混乱を防ぐために、私は上記のJohan Pelgrimが提案した2つの方法を試してみましたが、デフォルトの場所が変更されたかどうかにかかわらず同等です。

したがって、私のデバイスのデフォルト設定は英語(United Kindom)であり、この状態では予想どおりJohanの回答の両方の文字列が同じ結果になります。その後、電話の設定でロケールを変更して(italiano(Italia)に言って)再実行すると、Johanの答えにある両方のStringsがロケールをitaliano(Italia)にします。

したがって、私はJohanの最初の投稿が正しいと思い、gregmのコメントは正しくないと思います。

34
airewyre

ロケール参照 で説明されているように、言語を取得するための最良の方法は次のとおりです。

Locale.getDefault().getLanguage()

このメソッドは、 ISO 639-1規格に準拠した言語IDの文字列を返します

17
Opsenas

これが使えます

boolean isLang = Locale.getDefault().getLanguage().equals("xx");

"xx"が "en"、 "fr"、 "sp"、 "ar"などの言語コードの場合

14
Simon K. Gerges

に追加するJohan Pelgrimの回答

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);
}

そして

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 ...
}
6
armandino

システムリソースからロケールを取得することができます。

PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("Android");
String language = resources.getConfiguration().locale.getLanguage();
5
stefan.nsk

2つの言語があります。

OSのデフォルト言語:

Locale.getDefault().getDisplayLanguage();

アプリケーションの現在の言語:

getResources().getConfiguration().locale.getDisplayLanguage();//return string
4
ayed abboushi

aPIレベルが24以上の場合はLocaleList.getDefault().get(0).getLanguage()を、それ以外の場合はLocale.getDefault.getLanguage()を使用してください。

private fun getSystemLocale(): String {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        return LocaleList.getDefault().get(0).getLanguage();
    } else {
        return Locale.getDefault.getLanguage();
    }
}

参照: https://developer.Android.com/guide/topics/resources/multilingual-support

3
clybe

あなたは現在のキーボードを調べるためにこのコードを使うことができます

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();
3
Ramkailash

上記の答えは、単純な中国語と伝統的な中国語を区別しません。 "zh_CN"、 "zh_TW"、 "en_US"などを返すLocale.getDefault().toString()は動作します。

参照先: https://developer.Android.com/reference/Java/util/Locale.html 、ISO 639-1は旧式です。

3
rensq

あなたが言語を選ぶならば、あなたはこのギリシャ語をタイプすることができないと役に立つかもしれません。

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
user462990
public class LocalUtils {

    private static final String LANGUAGE_CODE_ENGLISH = "en";


    // returns application language eg: en || fa ...
    public static String getAppLanguage() {
        return Locale.getDefault().getLanguage();
    }

    // returns device language eg: en || fa ...
    public static String getDeviceLanguage() {
        return ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getLanguage();
    }

    public static boolean isDeviceEnglish() {
        return getDeviceLanguage().equals(new Locale(LANGUAGE_CODE_ENGLISH).getLanguage());
    }

    public static boolean isAppEnglish() {
        return getAppLanguage().equals(new Locale(LANGUAGE_CODE_ENGLISH).getLanguage());
    }


}

Log.i("AppLanguage: ",     LocalUtils.getAppLanguage());
Log.i("DeviceLanguage: ",  LocalUtils.getDeviceLanguage());
Log.i("isDeviceEnglish: ", String.valueOf(LocalUtils.isDeviceEnglish()));
Log.i("isAppEnglish: ",    String.valueOf(LocalUtils.isAppEnglish()));
1
S.R

デバイスの言語を取得する正しい方法は次のとおりです。

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

それが役に立てば幸い。

1
andrea.rinaldi
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
    // your code here
}
1
Pratibha Sarode

この解決策は私のために働いた。これにより、Androidデバイスの言語(アプリのローカル言語ではない)が返されます。

String locale = getApplicationContext().getResources().getConfiguration().locale.getLanguage();

これは "en"、 "de"、 "fr"、あるいはあなたのデバイス言語が設定されているものは何でも返します。

1
Arjun
Locale.getDefault().getDisplayLanguage()

English, Dutch, Frenchのように、言語のWritten名を教えてくれます。

Locale.getDefault().getLanguage()

例えば、language codeとなります。en, nl, fr

どちらのメソッドもStringを返します

他の人は、デバイスの言語に対して良い答えを与えました。

app言語を使用する最も簡単な方法は、app_langキーをstrings.xmlファイルに追加して指定することです。各言語の言語も同様です。

これにより、アプリのデフォルト言語がデバイスの言語と異なる場合、サービスのパラメーターとして送信することを選択できます。

1
htafoya

私の解決策はこんな感じです

@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());
            }

表示---> ja

0
biyoalp

現在の言語を確認したい場合は、@Sarpe(@Thorbear)の答えを使用してください。

val language = ConfigurationCompat.getLocales(Resources.getSystem().configuration)?.get(0)?.language
// Check here the language.
val format = if (language == "ru") "d MMMM yyyy г." else "d MMMM yyyy"
val longDateFormat = SimpleDateFormat(format, Locale.getDefault())
0
CoolMind

これはデバイスの国を取得するためのコードです。 Androidのすべてのバージョンと互換性がありますオレオ。

解決策:ユーザーが国を取得するよりも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
Abhiode