2017-05-29 2 views
0

Dies geschieht auf allen Geräten, die wir in Indonesien haben.Android erzeugt falschen Sprachcode für Indonesien?

Die Ländercodes korrekt sind, auch die Anzeigesprache und ISO3 korrekt erscheinen:

Locale.getDefault().getISO3Country()  // "IDN" 
Locale.getDefault().getDisplayCountry() // "Indonesia" 
Locale.getDefault().getCountry()   // "ID" 
Locale.getDefault().getISO3Language() // "ind" 
Locale.getDefault().getDisplayLanguage() // "Bahasa Indonesia" 

Aber der normale Sprachcode falsch ist, sollte „id“ statt „in“ sein. Und dann android auch die falsche language_COUNTRY Kennung zu erzeugen, sollte „id_ID“ anstelle von „in_ID“:

Locale.getDefault().getLanguage()  // "in" 
Locale.getDefault().toString()   // "in_ID" 

Ist das ein bekanntes Problem? Was können wir dagegen tun?

cyanide schlägt vor, nur das Gebietsschema zu überschreiben, aber was ist mit den Geräten, die wirklich "in" und nicht "id" verwenden müssen, wäre es dann das falsche für sie?

Antwort

2

Nun, fand heraus, warum es geschieht, sehen die Android Locale Constructor Reference:

ISO 639 kein stabiler Standard ist; einige der Sprachcodes, die es definiert (insbesondere "iw", "ji" und "in"), haben sich geändert. Dieser Konstruktor akzeptiert sowohl die alten Codes ("iw", "ji" und "in") als auch die neuen Codes ("he", "yi" und "id"), aber alle anderen APIs auf Locale geben nur die Alte Codes.

Also nicht viel wir tun können, verwenden Sie „in“ in der App für Streicher, usw. und es zu „id“ (oder behandeln in wie id) zu umwandeln, wenn sie außerhalb Entitäten wie Backend sprechen Server.

+0

Es hängt davon ab, was die Back-End-Server verwenden :-) Wenn es Java ist, erwarten sie auch "in". Java verwendet immer noch die Legacy-Codes, und das ist auch der Grund, warum Android sie verwendet: Kompatibilität mit dem offiziellen JDK. –

+0

Backend ist in node.js, aber guter Punkt! Obwohl ich glaube, ich lese, dass der Konstruktor die neuen Codes akzeptiert, werden nur die alten Codes aus Gründen der Kompatibilität zurückgegeben. Würde sagen, es ist Zeit für eine Support-Locale-Lib. : p –

1

Überprüfen Sie die Spracheinstellungen auf Ihrem Gerät. Wenn alles in Ordnung ist, dann ist Ihr System zweifelhaft, also können Sie versuchen, es zu aktualisieren. In der Tat, Konfiguration kann proramatiic

geändert werden
public void updateLocale(Resources rsrc) { 
     Configuration conf = rsrc.getConfiguration(); 
     Locale locale = conf.locale; 
     if (locale.getCountry().equals("ID") && locale.getLanguage().equals("in")) { 
      conf.locale = new Locale("id", "ID"); 
      rsrc.updateConfiguration(conf, rsrc.getDisplayMetrics()); 
    } 
    } 

Allerdings ist es nicht wirklich ratsam;

+0

hmm, es ist nicht nur mein System, wir haben Tausende von Geräten mit dem falschen "in" Sprachcode und keine mit dem richtigen "ID" Sprachcode, so scheint ein Problem in Android selbst. Wenn Sie eine übersetzte Datei in Android Studio erstellen, verwendet sie auch das falsche "in", um den Ressourcenordner "values-in" anstelle von "values-id" zu erstellen. –

+0

nicht sicher, aber das Gebietsschema ändern könnte vielleicht ein paar Dinge wie die Übersetzungsfunktion in Bibliotheken brechen, also würde das nicht ohne eine Menge Tests versuchen. aber schön zu wissen, dass du sowas machen kannst, danke! –

Verwandte Themen