Sprachstrings zu ISO639

Status
Nicht offen für weitere Antworten.

ktwo

Mitglied
Hi,
weiß jmd auf die schnelle wie ich Sprachstrings in englischer Sprache "z.B. "english", "german" in ISO639 Strings umwandeln kann ? ("en","de" etc)

ist das über ein Locale Objekt machbar? hab da nicht wirklich was sinnvolles gefunden

andersrum funktionierts problemlos "en" -> "english"
ist zb. mit

Java:
	  Locale l = new Locale("en") ;
	  fulllanguagename = l.getDisplayLanguage(Locale.ENGLISH);

zu bekommen...

danke
 
S

SlaterB

Gast
falls du eine ausreichend vollständige Menge dieser einseitigen Verbindungen en->english usw. hast,
dann kannst du sie alle einmal abfragen und eine Map aufbauen
Java:
for (shorties) {
  Locale l = new Locale(shorty) ;
  fulllanguagename = l.getDisplayLanguage(Locale.ENGLISH);
  map.put(fulllanguagename , shorty);
}

+ später

shorty = map.get(anyFulllanguagename );
 

ktwo

Mitglied
hm das problem ist ich weiß leider nicht wie ich eine solche "verbindungsmap" aufbauen kann die auch sämtliche ISO-codes berücksichtigt ohne dass ich sie manuell eingeben muss


hiermit hätte ich eine liste aller langen namen "english","german" etc.

Java:
		Vector<String> all_languages_en = new Vector<String>();
		
		Locale en = new Locale("en");
		Locale[] locales = Locale.getAvailableLocales();
		
		for (int i = 0; i<locales.length;i++){

all_languages_en.add(locales[i].getDisplayLanguage(en).toLowerCase());
		}

und hiermit die aller kurzen

Java:
String[] languages = Locale.getISOLanguages();

problem ist nur: anscheinend ist die reihenfolge der sprachen nicht wirklich erkennbar so dass ich hier manuell keine beziehung aufbauen kann

das beste wär denk ich also irgendwas welches nicht auf selbst konstruierte maps zurückgreift sondern den weg nur über ein Locale objekt geht, andersrum scheints ja wie gesagt zu klappen
 
S

SlaterB

Gast
tja, ohne Map wäre es gewiss schöner, aber man kann nicht immer alles haben ;)

Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        Locale[] locales = Locale.getAvailableLocales();

        Locale en = Locale.ENGLISH;
        for (int i = 0; i < locales.length; i++)
        {
            Locale l = locales[i];
            System.out.println(l.getLanguage() + " - " + l.getISO3Language() + " - "
                  + l.getISO3Country() + " - " + l.getCountry() + " - " + l.getDisplayLanguage(en));
        }

    }

}
hier kommt ne schöne Auflistung raus, etwa
Code:
..
de - deu - AUT - AT - German
de - deu - CHE - CH - German
de - deu - DEU - DE - German
de - deu - LUX - LU - German
el - ell -  -  - Greek
el - ell - GRC - GR - Greek
en - eng - AUS - AU - English
en - eng - CAN - CA - English
en - eng - GBR - GB - English
en - eng - IRL - IE - English
en - eng - IND - IN - English
en - eng - NZL - NZ - English
en - eng - ZAF - ZA - English
es - spa -  -  - Spanish
es - spa - ARG - AR - Spanish
es - spa - BOL - BO - Spanish
es - spa - CHL - CL - Spanish
es - spa - COL - CO - Spanish
es - spa - CRI - CR - Spanish
es - spa - DOM - DO - Spanish
es - spa - ECU - EC - Spanish
es - spa - ESP - ES - Spanish
es - spa - GTM - GT - Spanish
es - spa - HND - HN - Spanish
es - spa - MEX - MX - Spanish
es - spa - NIC - NI - Spanish
es - spa - PAN - PA - Spanish
es - spa - PER - PE - Spanish
es - spa - PRI - PR - Spanish
es - spa - PRY - PY - Spanish
es - spa - SLV - SV - Spanish
es - spa - URY - UY - Spanish
es - spa - VEN - VE - Spanish
...
sv - swe -  -  - Swedish
sv - swe - SWE - SE - Swedish
tr - tur -  -  - Turkish
tr - tur - TUR - TR - Turkish
uk - ukr -  -  - Ukrainian
uk - ukr - UKR - UA - Ukrainian
en - eng - USA - US - English
en - eng -  -  - English
schonmal recht mehrdeutig, ab zu einem String wie 'Spanish' scheint es immer nur eine Abkürzung wie 'es' zu geben,
aus dieser Auflistung kannst du dir problemlos eine Map aufbauen,

wenn nicht dann nicht ;)
 

ktwo

Mitglied
ok danke :) hab es nun nach deinem muster gelöst... hier nochmal der code falls jmd anders mal auf das problem stößt

Java:
public class TestClass
{
    public static void main(String[] args)
        throws Exception
    {
    
        System.out.println(getISO639_1("german"));
        
    }
    
    public static String getISO639_1(String languagename){
    	
    	Hashtable<String,String> tab = new Hashtable<String,String>();
        Locale[] locales = Locale.getAvailableLocales();
 
        Locale en = Locale.ENGLISH;
        for (int i = 0; i < locales.length; i++)
        {
            Locale l = locales[i];
            tab.put(l.getDisplayLanguage(en).toLowerCase(),l.getLanguage());
        }
        
        return tab.get(languagename);
    	
    }
 
}
 
S

SlaterB

Gast
wenn du die Map nicht längerfristig speicherst, dann brauchst du sie auch gar nicht,
dann könntest du einfach nur das Locale-Array durchlaufen, den übergebenen Namen mit jeder Locale vergleichen und bei einem Treffer die Kurzform zurückgeben,

oder aber die Map in einer statischen Variable ablegen und nur dann füllen, falls noch null

--------

statt HashTable liest sich schöner:
Map<String,String> tab = new HashMap<String,String>();

und wenn ich schon so viel verbessere:

> for (int i = 0; i < locales.length; i++)
> {
> Locale l = locales;

->
for (Locale l : locales) {

hatte ich aber selber vorhin ja auch nicht ;)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben