Androidデバイスで現在選択されている言語を取得するにはどうすればよいですか?
Androidデバイスで現在選択されている言語を取得するにはどうすればよいですか?
回答:
デバイスの選択した言語を取得したい場合、これはあなたを助けるかもしれません:
Locale.getDefault().getDisplayLanguage();
Locale.getDefault().getLanguage();
して、通常の言語コード(「de」、「en」など)を取得できます。
Locale.getDefault().toString()
は、ロケールを完全に識別する文字列を提供することを好みます(例: "en_US")。
Android 4.1.2デバイスのロケールメソッドとその結果を確認しました。
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
Locale.getDefault().getDisplayLanguage()
戻るものもあります"English"
私のために働いたのは:
Resources.getSystem().getConfiguration().locale;
Resources.getSystem()
システムリソースのみ(アプリケーションリソースなし)へのアクセスを提供し、現在の画面用に構成されていない(寸法単位を使用できない、方向に基づいて変更されないなど)グローバル共有リソースオブジェクトを返します。
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());
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())
getLocales
です。回答を更新しました。
現在のロケールから言語を「抽出」できます。標準のJava APIまたはAndroidコンテキストを使用して、ロケールを抽出できます。たとえば、次の2行は同等です。
String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();
Locale.setDefault()
事前に他のロケールで呼び出すだけで、異なる結果が得られます。
他の時間や混乱を避けるために、上記のJohan Pelgrimが提案した2つの代替案を試してみたことと、デフォルトの場所が変更されているかどうかに関係なく、デバイスでは同等のものを共有したいと思います。
したがって、私のデバイスのデフォルト設定は英語(United Kindom)であり、この状態では予想どおり、ヨハンの回答の両方の文字列は同じ結果になります。次に、電話の設定でロケールを変更して(たとえばitaliano(Italia)に)、再実行すると、ヨハンの答えの両方の文字列でロケールがitaliano(Italia)になります。
したがって、Johanの元の投稿は正しいと思い、gregmのコメントは正しくないと思います。
これを使えます
boolean isLang = Locale.getDefault().getLanguage().equals("xx");
「xx」が「en」、「fr」、「sp」、「ar」などの言語コードの場合....など
ロケールリファレンスで説明されているように、言語を取得する最良の方法は次のとおりです。
Locale.getDefault().getLanguage()
このメソッドは、ISO 639-1標準に従って言語IDの文字列を返します
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
ヨハン・ペルグリムの答えに追加するには
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
言語を選択した場合、このギリシャ語を入力できない場合に役立つことがあります。
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
現在の言語を確認したい場合は、@ 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())
DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault()).format(Date())
。
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
// your code here
}
デバイスの言語を取得する正しい方法は次のとおりです。
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()
Written
たとえば、言語の名前が表示されます。English, Dutch, French
Locale.getDefault().getLanguage()
あなたを与えるだろうlanguage code
例えば、:en, nl, fr
どちらのメソッドも文字列を返します
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()));
他の人はデバイスの言語に対して良い答えを出しました、
必要に応じてアプリの言語を、それを行うための最も簡単な方法は、追加することでapp_lang
、あなたの鍵strings.xml
ファイルを、同様にlangsごとにLANGを指定します。
そうすることで、アプリのデフォルト言語がデバイスの言語と異なる場合、サービスのパラメーターとしてそれを送信することを選択できます。
public void GetDefaultLanguage( ) {
try {
String langue = Locale.getDefault().toString(); // ---> en_US
/*
Log.i("TAG", Locale.getDefault().getLanguage() ); // ---> en
Log.i("TAG", Locale.getDefault().getISO3Language() ); // ---> eng
Log.i("TAG", Locale.getDefault().getCountry() ); // ---> US
Log.i("TAG", Locale.getDefault().getISO3Country() ); // ---> USA
Log.i("TAG", Locale.getDefault().getDisplayCountry() ); // ---> United States
Log.i("TAG", Locale.getDefault().getDisplayName() ); // ---> English (United States)
Log.i("TAG", Locale.getDefault().toString() ); // ---> en_US
Log.i("TAG", Locale.getDefault().getDisplayLanguage() ); //---> English
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
langue = Locale.getDefault().toLanguageTag(); // ---> en-US
url_Api = getUrlMicrosoftLearn(langue);
Log.i("TAG", url_Api );
Log.i("TAG", langue );
}else{
langue = langue.replace("_","-"); // ---> en-US
url_Api = getUrlMicrosoftLearn(langue);
Log.i("TAG", url_Api );
Log.i("TAG", langue );
}
}catch (Exception ex) {
Log.i("TAG", "Exception:GetDefaultLanguage()", ex);
}
}
public String getUrlMicrosoftLearn(String langue) {
return "https://docs.microsoft.com/"+langue+"/learn";
}
私の解決策はこのようなものです
@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());
}
表示---> en
デバイスの国を取得するコードは次のとおりです。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;
}