Sprachliste

Status
Nicht offen für weitere Antworten.

testing

Mitglied
Hallo zusammen!

Ich will eine Liste aller Sprachen herausbekommen. Nun hats ja vor langer Zeit eine Änderung der ISO-Codes für die Sprachkürzel gegeben (Hebräisch, Indonesisch, Jiddisch). Aus Kompatibilitätsgründen werden diese mitgeführt. Ich will nun nur eine Funktion haben, die mir die richtigen Kürzel zurückliefert (keine doppelten Einträge). Als Endergebnis will ich die Auflistung der Sprachen haben.

Ich hab jetzt aber zwei Beispiele dazu gefunden. Im Ersten Beispiel werden mir alle (auch die alten) Codes ausgegeben.

[Java] String[] languageCodes = Locale.getISOLanguages();
List<Language> languages = new ArrayList<Language>(languageCodes.length);
for (String lang : languageCodes) {
System.out.println(lang);
languages.add(new Language(lang, new Locale(lang, "").getDisplayLanguage(Locale.ENGLISH)));
}
[/Java]

Im Zweiten passiert das nicht.

[Java]

for (String lang : Locale.getISOLanguages()) {
Locale loc = new Locale(lang);
System.out.println(loc.getDisplayLanguage(Locale.ENGLISH));
}[/Java]

Warum geht es im Zweiten und was ist der große Unterschied? Das immer ein neues Locale-Objekt erzeugt wird?

Ich möchte, dass das erste Beispiel die gleichen richtigen Ausgaben macht, wie das zweite. Könnt ihr mir dabei helfen?

Dann hätte ich noch eine Frage: Warum kann ich getIso3Languages() nicht aufrufen? Falsche Java-Version? Falsches Paket?

Grüße
testing

PS: Anhang

Language-Klasse:
[Java]public class Language {
private String languageCode;
private String name;
public Language() { }
public Language(String languageCode, String name) {
this.languageCode = languageCode;
this.name = name;
}

public String getLanguageCode() {
return languageCode;
}

public void setLanguageCode(String languageCode) {
this.languageCode = languageCode;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
public String toString() {
return languageCode + ", " + name;
}
}[/Java]

Quellen:
Bashan's Technology Blog: Getting Languages list in Java
Gmane -- Mail To News And Back Again
 
S

SlaterB

Gast
die Ausgabe im 'ersten Code' ist doch von der Klasse Language unabhängig, da werden nur die Elemente des Iso-Arrays ausgegeben,
im zweiten Code wird was mit Locale gemacht, das passiert im ersten nicht,
jedenfalls nicht hinsichtlich des System.out.println, wäre doch einfach zu übernehmen

zunächst solltest du die Anzahl der Ausgaben anschauen, die muss doch gleich sein,
wenn es dann noch zu Doppelten kommt oder 'alte dazukommen die woanders fehlen', müssen ja andere verschwinden?

in jedem Fall kann man alles genau vergleichen,
gibt lang aus direkt aus dem String[] + daneben die Locale-veränderte Ausgabe
 

testing

Mitglied
@SlaterB:

Ich hab das jetzt nochmal probiert so wie du es gesagt hast. Irgendwie geht jetzt gar nichts mehr, da egal wie ich es mache, ich bekomme die gleichen falschen Ergebnisse. Evtl. liegt es daran, dass ich jetzt auf einem anderen Gerät arbeite und eine andere Java-Version verwende?

Weiß jemand wie ich die doppelten Einträge der 3 Sprachen (Hebräisch, Jiddish, Indonesisch) vermeide? Ohne jetzt herumzubasteln, es soll dabei nur eine Standard-Java-Funktion verwendet werden.

Verwende derzeit:
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)
 
S

SlaterB

Gast
was genau doppelt sein kann, wie man da an Sprachen oder Locales feilen kann, weiß ich leider nicht

falls dich die Details aber auch nicht interessieren und du nur die Ergebnismenge sauber halten willst,
kannst du Standard-Programmier-Mechanismen verwenden, z.B. die Strings oder Objekte in ein Set legen,
dann werden doppelte automatisch entfernt, falls equals() ordentlich implementiert ist
 

testing

Mitglied
Wenn ich mir jetzt den Code so anschaue, dann wird "Locale" bei beiden Beispielen gleich verwendet. Es gibt sogesehen keinen Unterschied. (Aber zum Testen werde ich es zu Hause noch auf einer anderen Maschine nachtesten)

Der Grund für die doppelten Ausgaben ist mir ja bekannt. Wenn die Funktion getISOlanguages() aufgerufen wird, dann werden alle Kürzel für die Sprachen zurückgeliefert. Dies umschließt die neuen, als auch die alten. Wenn ich nun getDisplaylanguage() mit diesen Kürzel aufrufe, bekomme ich auch die doppelten Sprachen aufgrund der doppelten Kürzel. Ich hab mir nur gedacht, dass es von Java selbst eine Funktion angeboten wird, die mir die richtigen Ausgaben zurückliefert. Deshalb wäre evtl. getISO3languages() eine Alternative oder selbst zu überprüfen was doppelt ist (oder die alten Codes einfach nicht zu akzeptieren).

Da ich Kürzel sowie den Sprachnamen speichern muss, wird das mit equals wieder eine Bastelarbeit. Es wär doch zu schön gewesen, wenn Java selbst eine geeignete Funktion anbietet.

Trotzdem vielen Dank für deine Hilfe!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben