Hvorfor Landestandard.getDefault().getLanguage() i Android displayet tilbage navn i stedet for sprog-kode?

I henhold til Java reference, Locale.getLanguage() formodes at vende tilbage den 2-bogstaver små bogstaver ISO-kode sprog (fx en), mens getDisplayLanguage() er den metode til at indhente de læsbare navn (fx English).

Så hvordan kommer, at følgende kode i Android:

Locale.getDefault().getLanguage()

returnerer English eller Español i stedet for en og es????

Jeg er helt forvirret…

ikke engang fjernt

OriginalForfatteren matteo | 2012-01-05

4 svar

  1. 13

    Bruge

    getResources().getConfiguration().landestandard.getLanguage()

    og det vil virke fint, selv om jeg ville overveje din observeret adfærd en bug værd rapportering..

    OriginalForfatteren Manfred Moser

  2. 6

    Jeg har regnet det ud. Dette skete, fordi jeg tidligere havde kaldt Landestandard.setDefault() og passeret det en konvention, som til gengæld havde jeg skabt ved fejlagtigt går det hele sproget navn (jeg tog sprog fra en præference indstilling og jeg fejlagtigt samlet betegnelse for den træder i stedet for værdien).

    Det er, jeg gjorde:

    String lang= //... here I assigned "English" while I thought
                 //   I was assigning it "en"
    Locale locale=new Locale(lang);
    Locale.setDefault(locale);       //(*)
    
    //and later
    Locale.getLocale().getLanguage();   //returns "english"

    Så da jeg forespurgte om standard locale, er det faktisk var den landestandard, jeg havde skabt, hvis sprog kode jeg havde fejlagtigt sat til “dansk”.

    Der er et par sjove ting, dog:

    1. Linje (*) faktisk virker, og rent faktisk ændre den konvention til engelsk (eller spansk, når jeg brugte “spansk”), som er setDefault() synes at acceptere en “forkert” landestandard og selv forstår det. Men det betyder ikke ordne det.
    2. Bemærk jeg brugt store bogstaver i det engelske, når forkert indstilling locale, men i slutningen er det afkast, “engelsk” alle små bogstaver.

    OriginalForfatteren matteo

  3. 4

    Jeg ved ikke hvorfor, at dette problem forekommer, men en anden standard for sprog er ISO3-kode.
    Du kan ringe til Locale.getDefault().getISO3Language(), og det bør vende tilbage “eng” eller “esp”.

    OriginalForfatteren Stephan

  4. 1

    Android er på vej tilbage læsbar navne i stedet for koderne.

    Landestandard.getDefault() har strengen. Så hvis du kalder nogen udskriver eller Logger på, at det vil arbejde…
    hvilket betyder, Locale.getDefault().toString() har din landestandard-koden.

    Tak Android-Udviklere til endnu en inkonsekvens i den ramme :@

    OriginalForfatteren RCB

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *