Android cihazında geçerli dili nasıl seçebiliriz?
Android cihazında geçerli dili nasıl seçebiliriz?
Yanıtlar:
Cihazınızın seçili dilini almak istiyorsanız, bu size yardımcı olabilir:
Locale.getDefault().getDisplayLanguage();
Locale.getDefault().getLanguage();
Normal dil kodunu almak için kullanabilirsiniz (örn. "De", "en").
Locale.setDefault("ru")
ve sistem ayarlarındaki dil İngilizce olarak ayarlanırsa, yöntem "ru"Locale.getDefault().getLanguage()
döndürür , ancak "en" döndürmez . Gerçek SYSTEM yerel ayarını / dilini almanın başka bir yöntemi var mı? Burada belgelenmiş bir çözüm bulamadım , ama daha zarif bir çözüm var mı?
Locale.getDefault().toString()
Hangi yerel tam olarak tanımlayan bir dize verir, örneğin "en_US" tercih ederim .
Android 4.1.2 cihazımda Yerel ayar yöntemlerini ve sonuçları kontrol ettim:
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()
geri dönen"English"
Benim için işe yarayan şuydu:
Resources.getSystem().getConfiguration().locale;
Resources.getSystem()
yalnızca sistem kaynaklarına erişim sağlayan (uygulama kaynağı yok) ve geçerli ekran için yapılandırılmamış (boyut birimlerini kullanamaz, yönlendirmeye bağlı olarak değişmez, vb.) genel bir paylaşılan Kaynaklar nesnesi döndürür.
Artık getConfiguration.locale
kullanımdan kaldırıldığı için Android Nougat'ta birincil yerel ayarı almanın tercih edilen yolu:
Resources.getSystem().getConfiguration().getLocales().get(0);
Önceki Android sürümleriyle uyumluluğu garanti etmek için olası bir çözüm basit bir kontrol olacaktır:
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;
}
Güncelleme
Destek kitaplığından başlayarak 26.1.0
, Android sürümünü kontrol etmeniz gerekmez, çünkü geriye dönük uyumlu bir yöntem sunargetLocales()
.
Sadece arayın:
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())
getLocales
yoludur. Cevabımı güncelledim.
Dili geçerli yerel ayardan 'ayıklayabilirsiniz'. Yerel Java'yı standart Java API'sı veya Android Bağlamı kullanarak ayıklayabilirsiniz. Örneğin, aşağıdaki iki çizgi eşdeğerdir:
String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();
Locale.setDefault()
Önceden başka bir yerel ayar ile arayın ve farklı sonuçlar elde edin.
Diğerlerine zamandan ve / veya karışıklıktan tasarruf etmek için Johan Pelgrim tarafından önerilen iki alternatifi denediğimi paylaşmak istedim ve cihazımda eşdeğerler - varsayılan konum değiştirilsin ya da değiştirilmesin.
Cihazımın varsayılan ayarı İngilizce'dir (United Kindom) ve bu durumda beklendiği gibi Johan'ın cevabındaki her iki Tel de aynı sonucu verir. Daha sonra telefon ayarlarında yerel ayarı değiştiririm (italiano'ya (Italia) diyelim) ve yeniden çalıştırırsam Johan'ın cevabındaki her iki Dizge de yerel ayarı italiano (Italia) olarak verir.
Bu nedenle Johan'ın orijinal gönderisinin doğru ve gregm'in yorumunun yanlış olduğuna inanıyorum.
Locale referansında açıklandığı gibi, dil almanın en iyi yolu:
Locale.getDefault().getLanguage()
bu yöntem ISO 639-1 standardına göre dil tanıtıcılı dize döndürür
Bunu kullanabilirsiniz
boolean isLang = Locale.getDefault().getLanguage().equals("xx");
"xx", "en", "fr", "sp", "ar" .... gibi herhangi bir dil kodu olduğunda vb.
API düzeyi 24 veya üstü ise, LocaleList.getDefault().get(0).getLanguage()
başka bir kullanımLocale.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();
}
}
başvuru: https://developer.android.com/guide/topics/resources/multilingual-support
Johan Pelgrim'in cevabına eklemek için
context.getResources().getConfiguration().locale
Locale.getDefault()
eşdeğerdir çünkü android.text.format.DateFormat
sınıf her ikisini birbirinin yerine kullanır, ör.
private static String zeroPad(int inValue, int inMinDigits) {
return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}
ve
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 ...
}
Sistem kaynaklarından yerel ayar almaya çalışabilirsiniz:
PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("android");
String language = resources.getConfiguration().locale.getLanguage();
Yukarıdaki yanıtlar basit çince ve geleneksel çince arasında ayrım yapmaz.
Locale.getDefault().toString()
"zh_CN", "zh_TW", "en_US" vb. döndüren çalışır.
Referanslar: https://developer.android.com/reference/java/util/Locale.html , ISO 639-1 ESKİDİR.
Klavye akımını bulmak için bu kodu kullanabilirsiniz
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();
İki dil var.
İşletim sisteminin varsayılan dili:
Locale.getDefault().getDisplayLanguage();
Mevcut Uygulama Dili:
getResources().getConfiguration().locale.getDisplayLanguage();//return string
Bir dil seçerseniz bu Yunanca yazamazsınız.
getDisplayLanguage().toString() = English
getLanguage().toString() = en
getISO3Language().toString() = eng
getDisplayLanguage()) = English
getLanguage() = en
getISO3Language() = eng
Şimdi Yunanca ile dene
getDisplayLanguage().toString() = Ελληνικά
getLanguage().toString() = el
getISO3Language().toString() = ell
getDisplayLanguage()) = Ελληνικά
getLanguage() = el
getISO3Language() = ell
Geçerli bir dili kontrol etmek istiyorsanız, @Sarpe (@Thorbear) yanıtını kullanın:
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
}
Cihazınızın dilini almanın doğru yolu şudur:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return context.getResources().getConfiguration().getLocales().get(0);
} else {
return context.getResources().getConfiguration().locale;
}
Umarım yardımcı olur.
Locale.getDefault().getDisplayLanguage()
Written
Örneğin, Dil için bir ad verecektir.English, Dutch, French
Locale.getDefault().getLanguage()
language code
Örneğin, size :en, nl, fr
Her iki yöntem de String döndürür
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()));
Diğerleri cihaz dili için iyi cevaplar verdiler,
uygulama dilini yapmanın en kolay yolu dilek için bir app_lang
anahtar eklemektir .strings.xml
dosyası ve yanı DİLLER'de her biri için lang belirtin.
Bu şekilde, uygulamanızın varsayılan dili cihaz dilinden farklıysa, bunu hizmetleriniz için parametre olarak göndermeyi seçebilirsiniz.
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";
}
Benim çözümüm böyle
@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);
}
ve sonra
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Log.e("Locale", getCurrentLocale().getLanguage());
} else {
Log.e("Locale", getCurrentLocale2().toString());
}
gösterilen ---> tr
cihaz ülkesini almak için kod. Android bile tüm sürümleri ile uyumlu oreo.
Çözüm: Kullanıcının ülkeden daha fazla SIM kartı yoksa telefon kurulumu veya geçerli dil seçimi sırasında kullanılır.
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;
}