Wie bekomme ich den IETF BCP47 Sprachcode in Android API <21

Gibt es einen klugen Weg, um den BCP47 Sprachcode in Android für APIs weniger als 21 zu bekommen? In API Level 21+ ist der Locale.toLanguageTag genau das, was ich brauche. Wie bekommst du das in niedrigeren API Levels?

  • Android - Wie kann man einen im Uniformen erstellten Empfänger aufheben?
  • Berechtigung zum Lesen von Daten von SD-Karte
  • Absturz in ListView bei AbsListView.obtainView für ListActivity
  • Wie kann man sich von Facebook-SDK-Ereignisprotokollierung abmelden?
  • Wie man automatisch Android-App von Gerät vor der Installation einer neuen Version zu deinstallieren
  • Ändern des Überlaufsymbols in der Aktionsleiste
  • "Failure Delivering Result" - onActivityForResult
  • Aktivieren von WiFi auf Android Emulator
  • Rufen Sie mit einer bestimmten SIM-Karte in einem Dual-SIM-Gerät an
  • Wie kann ich die MIUI Autostart-Berechtigung programmgesteuert überprüfen?
  • Ist es möglich, die Benutzer älterer App-Versionen zu aktualisieren?
  • Wie verwende ich die "Surface" -Klassen von Android?
  • One Solution collect form web for “Wie bekomme ich den IETF BCP47 Sprachcode in Android API <21”

    Die guten Leute von Apache Cordova entwickelten dafür eine Lösung, wie hier zu sehen.

    Ich habe dort Code in die folgende Lösung geändert:

    /** * Modified from: * https://github.com/apache/cordova-plugin-globalization/blob/master/src/android/Globalization.java * * Returns a well-formed ITEF BCP 47 language tag representing this locale string * identifier for the client's current locale * * @return String: The BCP 47 language tag for the current locale */ public static String toBcp47Language(Locale loc) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return loc.toLanguageTag(); } // we will use a dash as per BCP 47 final char SEP = '-'; String language = loc.getLanguage(); String region = loc.getCountry(); String variant = loc.getVariant(); // special case for Norwegian Nynorsk since "NY" cannot be a variant as per BCP 47 // this goes before the string matching since "NY" wont pass the variant checks if (language.equals("no") && region.equals("NO") && variant.equals("NY")) { language = "nn"; region = "NO"; variant = ""; } if (language.isEmpty() || !language.matches("\\p{Alpha}{2,8}")) { language = "und"; // Follow the Locale#toLanguageTag() implementation // which says to return "und" for Undetermined } else if (language.equals("iw")) { language = "he"; // correct deprecated "Hebrew" } else if (language.equals("in")) { language = "id"; // correct deprecated "Indonesian" } else if (language.equals("ji")) { language = "yi"; // correct deprecated "Yiddish" } // ensure valid country code, if not well formed, it's omitted if (!region.matches("\\p{Alpha}{2}|\\p{Digit}{3}")) { region = ""; } // variant subtags that begin with a letter must be at least 5 characters long if (!variant.matches("\\p{Alnum}{5,8}|\\p{Digit}\\p{Alnum}{3}")) { variant = ""; } StringBuilder bcp47Tag = new StringBuilder(language); if (!region.isEmpty()) { bcp47Tag.append(SEP).append(region); } if (!variant.isEmpty()) { bcp47Tag.append(SEP).append(variant); } return bcp47Tag.toString(); } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.