Suche…


Bemerkungen

Java verfügt über einen leistungsstarken und flexiblen Mechanismus zum Lokalisieren Ihrer Anwendungen. Es ist jedoch auch leicht zu missbrauchen und mit einem Programm zu beenden, das das Gebietsschema des Benutzers außer Acht lässt oder das Verhalten des Programms davon abhängig macht.

Ihre Benutzer werden erwarten, dass Daten in den von ihnen gewohnten Formaten lokalisiert werden. Wenn Sie versuchen, dies manuell zu unterstützen, ist dies eine dumme Angelegenheit. Hier ist nur ein kleines Beispiel für die verschiedenen Arten, wie Benutzer erwarten, Inhalte zu sehen, von denen Sie annehmen, dass sie "immer" auf eine bestimmte Weise angezeigt werden:

Termine Zahlen Landeswährung Fremdwährung Entfernungen
Brasilien
China
Ägypten
Mexiko 20/3/16 1.234,56 1.000,50 $ 1.000,50 USD
Vereinigtes Königreich 20/3/16 1,234,56 1.000,50 £ 100 km
Vereinigte Staaten von Amerika 3/20/16 1,234,56 1.000,50 $ 1.000,50 MXN 60 mi

Allgemeine Ressourcen

Java-Ressourcen

Automatisch formatierte Daten mit "locale"

SimpleDateFormatter ist prima, aber wie der Name schon sagt, skaliert es nicht gut.

Wenn Sie in Ihrer gesamten Anwendung "MM/dd/yyyy" Ihre internationalen Benutzer nicht zufrieden sein.

Lassen Sie Java die Arbeit für Sie erledigen

Verwenden Sie die static Methoden in DateFormat , um die richtige Formatierung für Ihren Benutzer abzurufen. Rufen Sie für eine Desktopanwendung (bei der Sie sich auf das Standardgebietsschema verlassen ) einfach an:

String localizedDate = DateFormat.getDateInstance(style).format(date);

Dabei ist style eine der Formatierungskonstanten ( FULL , LONG , MEDIUM , SHORT usw.), die in DateFormat angegeben DateFormat .

Für eine serverseitige Anwendung, in der der Benutzer als Teil der Anforderung das Gebietsschema angibt, sollten Sie es stattdessen explizit an getDateInstance() :

String localizedDate =
    DateFormat.getDateInstance(style, request.getLocale()).format(date);

Stringvergleich

Vergleichen Sie zwei Strings, die den Fall ignorieren:

"School".equalsIgnoreCase("school"); // true

Nicht verwenden

text1.toLowerCase().equals(text2.toLowerCase());

Sprachen haben unterschiedliche Regeln für die Konvertierung von Groß- und Kleinschreibung. Ein "Ich" würde auf Englisch in "Ich" umgewandelt. Aber auf Türkisch wird ein Ich zu einem I. Wenn Sie verwenden müssen toLowerCase() verwenden , um die Überlastung , die einen erwartet Locale : String.toLowerCase(Locale) .

Beim Vergleich zweier Strings werden geringfügige Unterschiede ignoriert:

Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.PRIMARY);
collator.equals("Gärten", "gaerten"); // returns true

Sortieren Sie Strings unter Berücksichtigung der Reihenfolge der natürlichen Sprache und ignorieren Sie die Groß- / Kleinschreibung (verwenden Sie den Kollatierungsschlüssel, um:

String[] texts = new String[] {"Birne", "äther", "Apfel"};
Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.SECONDARY); // ignore case
Arrays.sort(texts, collator::compare); // will return {"Apfel", "äther", "Birne"}

Gebietsschema

Die Klasse java.util.Locale wird verwendet, um eine "geografische, politische oder kulturelle" Region zu repräsentieren, um einen bestimmten Text, eine bestimmte Anzahl, ein bestimmtes Datum oder eine bestimmte Operation zu lokalisieren. Ein Gebietsschema-Objekt kann somit ein Land, eine Region, eine Sprache und auch eine Variante einer Sprache enthalten, beispielsweise einen Dialekt, der in einer bestimmten Region eines Landes oder in einem anderen Land als dem Land, aus dem die Sprache stammt, gesprochen wird.

Die Locale-Instanz wird an Komponenten übergeben, die ihre Aktionen lokalisieren müssen, unabhängig davon, ob sie die Eingabe oder Ausgabe konvertieren oder nur für interne Vorgänge benötigen. Die Locale-Klasse kann selbst keine Internationalisierung oder Lokalisierung durchführen

Sprache

Die Sprache muss ein 2- oder 3-stelliger Sprachcode nach ISO 639 oder ein registrierter Sprachuntertitel mit bis zu 8 Zeichen sein. Wenn eine Sprache sowohl aus zwei als auch aus drei Zeichen besteht, verwenden Sie den aus zwei Zeichen bestehenden Code. Eine vollständige Liste der Sprachcodes finden Sie in der IANA Language Subtag Registry.

Bei Sprachcodes wird die Groß- und Kleinschreibung nicht beachtet, die Locale-Klasse verwendet jedoch immer Versionen der Sprachcodes in Kleinbuchstaben

Ein Gebietsschema erstellen

Das Erstellen einer java.util.Locale Instanz kann auf vier verschiedene Arten erfolgen:

Locale constants
Locale constructors
Locale.Builder class
Locale.forLanguageTag factory method 

Java ResourceBundle

Sie erstellen eine ResourceBundle-Instanz wie folgt:

Locale locale = new Locale("en", "US");
ResourceBundle labels = ResourceBundle.getBundle("i18n.properties");
System.out.println(labels.getString("message"));

i18n.properties ich habe eine Eigenschaftendatei i18n.properties :

message=This is locale

Ausgabe:

This is locale

Gebietsschema einstellen

Wenn Sie den Status mit anderen Sprachen reproduzieren möchten, können Sie die setDefault() -Methode verwenden. Seine Verwendung:

 setDefault(Locale.JAPANESE); //Set Japanese


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow