resource - strings xml android studio
Ottieni la lingua corrente nel dispositivo (14)
Come possiamo ottenere la lingua corrente selezionata nel dispositivo Android?
Aggiungere alla risposta di Johan Pelgrim
context.getResources().getConfiguration().locale
Locale.getDefault()
sono equivalenti perché la classe android.text.format.DateFormat
utilizza entrambi in modo intercambiabile, ad es
private static String zeroPad(int inValue, int inMinDigits) {
return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}
e
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 ...
}
Ci sono due lingue.
Lingua predefinita del sistema operativo:
Locale.getDefault().getDisplayLanguage();
Lingua corrente di applicazione:
getResources().getConfiguration().locale.getDisplayLanguage();//return string
Come descritto in Impostazioni locali, il modo migliore per ottenere la lingua è:
Locale.getDefault().getLanguage()
questo metodo restituisce una stringa con ID lingua secondo ISO 639-1 standard
Ho controllato i metodi locali sul mio dispositivo Android 4.1.2 e i risultati:
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
La mia soluzione è così
@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);
}
e poi
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Log.e("Locale", getCurrentLocale().getLanguage());
} else {
Log.e("Locale", getCurrentLocale2().toString());
}
mostrato ---> en
Le risposte sopra non distinguono tra cinese semplice e cinese tradizionale. Locale.getDefault().toString()
funziona che restituisce "zh_CN", "zh_TW", "en_US" e così via.
Riferimenti a: https://developer.android.com/reference/java/util/Locale.html , ISO 639-1 è VECCHIO.
Puoi 'estrarre' la lingua dalla locale corrente. È possibile estrarre le impostazioni internazionali tramite l'API Java standard o utilizzando il contesto Android. Ad esempio, le due righe seguenti sono equivalenti:
String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();
Puoi provare ad ottenere le impostazioni locali dalle risorse di sistema:
PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("android");
String language = resources.getConfiguration().locale.getLanguage();
Puoi usare questo codice per scoprire la corrente della tastiera
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();
Se desideri ottenere la lingua selezionata del tuo dispositivo, questo potrebbe aiutarti a:
Locale.getDefault().getDisplayLanguage();
Se si desidera eseguire attività specifiche per gli utenti residenti in India che parlano l'hindi, utilizzare di seguito le condizioni
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
//Block executed only for the users resides in India who speaks Hindi
}
ecco il codice per ottenere il Paese del dispositivo. Compatibile con tutte le versioni di Android anche oreo.
Soluzione: se l'utente non ha la scheda SIM di quella del Paese, viene utilizzata durante la configurazione del telefono o la selezione della lingua corrente.
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;
}
Locale.getDefault().getDisplayLanguage()
ti darà il nome Written
per la lingua, ad esempio English, Dutch, French
Locale.getDefault().getLanguage()
ti fornirà il language code
, ad esempio: en, nl, fr
Entrambi i metodi restituiscono String
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
// your code here
}