Androidデバイスで現在選択されている言語を取得する方法を教えてください。
お使いのデバイスの選択した言語を取得したい場合は、これが役立ちます。
Locale.getDefault().getDisplayLanguage();
私は私の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
私にとってうまくいったのは、
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());
現在のロケールから言語を「抽出」することができます。標準のJava APIを介して、またはAndroid Contextを使用してロケールを抽出できます。たとえば、以下の2行は同じです。
String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = Java.util.Locale.getDefault().getDisplayName();
他の人の時間や混乱を防ぐために、私は上記のJohan Pelgrimが提案した2つの方法を試してみましたが、デフォルトの場所が変更されたかどうかにかかわらず同等です。
したがって、私のデバイスのデフォルト設定は英語(United Kindom)であり、この状態では予想どおりJohanの回答の両方の文字列が同じ結果になります。その後、電話の設定でロケールを変更して(italiano(Italia)に言って)再実行すると、Johanの答えにある両方のStringsがロケールをitaliano(Italia)にします。
したがって、私はJohanの最初の投稿が正しいと思い、gregmのコメントは正しくないと思います。
ロケール参照 で説明されているように、言語を取得するための最良の方法は次のとおりです。
Locale.getDefault().getLanguage()
このメソッドは、 ISO 639-1規格に準拠した言語IDの文字列を返します
これが使えます
boolean isLang = Locale.getDefault().getLanguage().equals("xx");
"xx"が "en"、 "fr"、 "sp"、 "ar"などの言語コードの場合
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 ...
}
システムリソースからロケールを取得することができます。
PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("Android");
String language = resources.getConfiguration().locale.getLanguage();
2つの言語があります。
OSのデフォルト言語:
Locale.getDefault().getDisplayLanguage();
アプリケーションの現在の言語:
getResources().getConfiguration().locale.getDisplayLanguage();//return string
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
あなたは現在のキーボードを調べるためにこのコードを使うことができます
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();
上記の答えは、単純な中国語と伝統的な中国語を区別しません。 "zh_CN"、 "zh_TW"、 "en_US"などを返すLocale.getDefault().toString()
は動作します。
参照先: https://developer.Android.com/reference/Java/util/Locale.html 、ISO 639-1は旧式です。
あなたが言語を選ぶならば、あなたはこのギリシャ語をタイプすることができないと役に立つかもしれません。
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
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()));
デバイスの言語を取得する正しい方法は次のとおりです。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return context.getResources().getConfiguration().getLocales().get(0);
} else {
return context.getResources().getConfiguration().locale;
}
それが役に立てば幸い。
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
// your code here
}
この解決策は私のために働いた。これにより、Androidデバイスの言語(アプリのローカル言語ではない)が返されます。
String locale = getApplicationContext().getResources().getConfiguration().locale.getLanguage();
これは "en"、 "de"、 "fr"、あるいはあなたのデバイス言語が設定されているものは何でも返します。
Locale.getDefault().getDisplayLanguage()
English, Dutch, French
のように、言語のWritten
名を教えてくれます。
Locale.getDefault().getLanguage()
例えば、language code
となります。en, nl, fr
どちらのメソッドもStringを返します
他の人は、デバイスの言語に対して良い答えを与えました。
app言語を使用する最も簡単な方法は、app_lang
キーをstrings.xml
ファイルに追加して指定することです。各言語の言語も同様です。
これにより、アプリのデフォルト言語がデバイスの言語と異なる場合、サービスのパラメーターとして送信することを選択できます。
私の解決策はこんな感じです
@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
現在の言語を確認したい場合は、@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())
これはデバイスの国を取得するためのコードです。 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;
}