Datumsformat anderer Locales

Meru

Bekanntes Mitglied
Hallo,

ich arbeite derzeit an einem mehrsprachigen Programm, wo der Benutzer sich mit einer bestimmten Locale anmelden kann. Jenachdem werden die Texte etc übersetzt. Zwischen deutsch und englisch passt alles super.

Nun habe ich eine dritte Locale, cz (Tschechische Republik), wo ich mir einen Timestamp in ein normal lesbares Format umwandle. Zwischen deutsch und englisch ist es also von 31.01.11 -> 1/31/11 .
Wenn ich nun CZ einstelle, dann habe ich auch das englische Format sowie auch die englischen Bezeichnen fuer das holen der Texte fuer die Monate.

Java:
Locale.setDefault(new Locale("CZ"));
		
GregorianCalendar calendar = new GregorianCalendar();
				
for (int i=0; i <= calendar.getActualMaximum(GregorianCalendar.MONTH); i++){
	calendar.set(GregorianCalendar.MONTH, i);
	String month = calendar.getDisplayName(GregorianCalendar.MONTH, GregorianCalendar.LONG, Locale.getDefault());
	System.out.println(month);
}


Um die Monatstexte geht es mir dabei nicht wirklich, sondern eher um das Datumsformat. Kann man fuer eine Locale irgendwie etwas hinterlegen?
Ich will ungern an jeder Stelle mit SimpleDateFormat arbeiten wollen, wobei ich da ja wieder das gleiche Problem haben werde, welches ich aber durch if/elseif/elseif/elseif lösen könnte. Nur finde ich das eher unschön, gerade weil es ja quasi diese Funktionanliät gibt und auch mit En/Fr/De/etc funktioniert, nur halt nicht mit allen Ländern.


Wäre toll wenn jemand vielleicht etwas weiß

MfG

Meru
 
Hallo,

ist ein ganz schön komisches Problem. Es liegt an dem Kürzel "CZ" -> mit "cs" funktioniert es.

Hier mal mein Testcode:
Java:
String strProgrammsprache = "cs";
Locale x = new Locale(strProgrammsprache);
System.out.println(x.getLanguage());
        
Locale.setDefault(x);

System.out.println(Locale.getDefault().getCountry());
        
Calendar calendar = GregorianCalendar.getInstance();
         
for (int i=0; i <= calendar.getActualMaximum(GregorianCalendar.MONTH); i++){
            calendar.set(GregorianCalendar.MONTH, i);
            
            String month = calendar.getDisplayName(GregorianCalendar.MONTH, GregorianCalendar.LONG, x);
            System.out.println(month);
           // System.out.println(calendar.getAvailableLocales());
            System.out.println(Locale.getDefault().getCountry());
            System.out.println(Locale.getDefault().getLanguage());
            System.out.println(x.getCountry());
            System.out.println(x.getLanguage());
        }

Da mußt du aber noch ein bißchen testen und ausprobieren - ich habe da nämlich verschiedene Dinge ausprobiert. Mußt halt nur das nehmen, was du brauchst.

Für Tschechien scheint es irgendwie zwei Kürzel zu geben "CZ" und "cs". Das eine ist das Land, das andere die Sprache. Der Kalender will anscheinend die Sprache.

MfG
hansmueller
 
Vielen Dank für deine Antwort, welche mir sehr weitergeholfen hat.

Ich bin natürlich nicht darauf gekommen, weil CS eigentlich für etwas anderes steht, zumindest in der jetzigen Zeit. Früher stand es mal tatsächlich für Tschechien. Wobei die tschechische Sprache wirklich noch mit cs betietelt wird.

Interessant bzw.verwirrend ist demzufolge folgendes:
Java:
Locale[] locales = Locale.getAvailableLocales();
		
		
Arrays.sort(locales, new Comparator<Object>() {
	public int compare(Object o1, Object o2) {
		String c1 = ((Locale)o1).getCountry();
		String c2 = ((Locale)o2).getCountry();
		return c1.compareTo(c2);
	}			
});
		
for (int i=0; i < locales.length; i++){
	if ( ! locales[i].getCountry().isEmpty()){
		System.out.println(locales[i].getCountry());
		System.out.println(locales[i].getLanguage());
		System.out.println(locales[i].getDisplayCountry());
			
		System.out.println("=========================");
	}
}
Ausgabe:
=========================
CS
sr
Serbien und Montenegro
=========================
CZ
cs
Tschechische Republik
=========================


Jedenfalls vielen Dank 🙂
 

Neue Themen


Zurück
Oben