Java Gold misst: Lokalisierung

Einführung

In diesem Dokument werden die folgenden Elemente als Zusammenfassung des Java Gold-Lernens zusammengefasst. (Auch für diejenigen, die Java Gold lernen oder etwas über Lokalisierung wissen möchten.)

Was ist ein Gebietsschema?

java.util.Locale

Zeigen Sie die Notationsregeln für Dinge an, die sich je nach Sprache und Land unterscheiden.

Beispiel: Einheit, Symbol, Datum, Währung usw.

Verwenden Sie das Gebietsschema, wenn Sie die Anzeige für jedes Land ändern möchten, in dem die Anwendung verwendet wird. (Die Zeichen werden je nach Land, in dem die App verwendet wird, usw. in Japanisch und Englisch unterteilt.)

Es gibt drei Hauptmethoden zum Erstellen von Instanzen.

■ Hauptkonstruktoren und Methoden

Konstrukteur Inhalt
Local(String language, String country) Argumentationssprache/Objekt aus Ländercode generieren
//Instanzgenerierung durch neu
//ja ・ en: Sprachnamencode | JP ・ US: Ländernamencode
Locale localeJp = new Locale("ja","JP");  //Japanisches Gebietsschema
Locale localeUs = new Locale("en","US");  //Amerikanisches Gebietsschema

//Instanzgenerierung mit Gebietsschema-Klassenkonstanten
Locale localeJp = Locale.JAPAN;
Locale localeUs = Locale.US;

// getDefault()Instanzgenerierung nach Methode
//Bei der Ausführung in Japan wird eine japanische Gebietsschemainstanz generiert
Locale localeJp = Locale.getDefault();
Methode Inhalt
static getDefault() Ruft den aktuellen Wert des Standardgebietsschemas ab
final String getDisplayCountry() Geben Sie den Ländernamen des Gebietsschemas zurück
final String getDisplayLanguage() Gibt den Sprachnamen des Gebietsschemas zurück
String getCountry() Geben Sie den Ländercode des Gebietsschemas zurück
String getLanguage() Geben Sie den Sprachnamencode des Gebietsschemas zurück
// ja_JP wird gespeichert (wenn das Betriebssystem Japan ist)
Locale locale = Locale.getDefault();

//Japan wird gespeichert
String country = locale.getDisplayCountry();

//Japanisch wird gespeichert
String language = locale.getDisplayLanguage();

//JP wird gespeichert
String country_code = locale.getCountry();

//ja ist gespeichert
String language_code = locale.getLanguage();

//Anmerkungen: Andere Instanziierungsmethoden
Locale locale = new Locale.Builder().setLanguage("ja")
                                    .setScript("Jpan")
                                    .setRegion("JP")
                                    .build();
// setScript(): Argument ist ISO 15924 alpha-4 Skriptcode (siehe Javadoc)
// build():Locale.Erstellen Sie ein lokales Objekt mit einer Builder-Methode

Ressourcenpaket

java.util.ResourceBundle

Entsprechen je nach Gebietsschema unterschiedlichen Notationsregeln für jede Sprache und jedes Land. Dies ermöglicht es, je nach Gebietsschema zwischen japanischer und englischer Notation zu wechseln.

Die wichtigsten verwendeten Methoden sind wie folgt.

Methode Inhalt
boolean containsKey(String key) Gibt true zurück, wenn die Ressource den durch das Argument angegebenen Schlüssel hat
final Object getObject Gibt das Objekt zurück, das dem durch das Argument angegebenen Schlüssel zugeordnet ist
final String getString(String key) Gibt die Zeichenfolge zurück, die dem durch das Argument angegebenen Schlüssel zugeordnet ist
final String[] getStringArray(String key) Gibt ein Array von Zeichenfolgen zurück, die dem durch das Argument angegebenen Schlüssel zugeordnet sind
Set keySet() Geben Sie alle im Bundle enthaltenen Schlüssel zurück

Darüber hinaus gibt es folgende Unterklassen.

Unterklasse Inhalt
ListResourceBundle Verwalten Sie Ressourcen für Ihr Gebietsschema in einer praktischen und benutzerfreundlichen Liste
PropertyResourceBuilder Verwalten Sie Ressourcen für Gebietsschemas mithilfe einer Reihe statischer Zeichenfolgen aus der Eigenschaftendatei

■ Bei Verwendung von ListResourceBundle

Die Definitionsregeln bei dieser Verwendung lauten wie folgt.

  • Definitionsmethode

** ▼ Implementierungsbeispiel **

Resource.java


public class Resource extends ListResourceBundle {

	public Object[][] getContents() {
		Object[][] contents = {
				{"apple", "Apfel"},
				{"orange", "Orange"}
		};
		return contents;
	}
}

Resource_en_US.java


public class Resource_en extends ListResourceBundle {

	protected Object[][] getContents() {
		Object[][] contents = {
				{"apple", "apple"},
				{"orange", "orange"}
		};
		return contents;
	}
}

Gebietsschema durch Festlegen von base name_language code_country code.java Auf die Datei der Sprache, die dem Objekt von entspricht, wird verwiesen.

Für die Standardinstanz des Gebietsschemas wird auf die Basisnamenressource verwiesen. Wenn nur der Sprachcode für die Instanz des Gebietsschemas angegeben ist, muss nur der Sprachcode nach dem Basisnamen angegeben werden.

Main.java



//Das Ausgabeergebnis ist wie folgt
//Apfel:Orange
// apple:orange

class Main {
	public static void main(String[] args) {

		Locale localeJa = Locale.JAPAN;
		Locale localeUs = Locale.US;

		//Wenn das zweite Argument nicht angegeben wird, geben Sie den Standardort an.
		List<Locale> locales =
				new ArrayList<Locale>(Arrays.asList(localeJa, localeUs));

		for(Locale locale : locales) {
			//Paketnamen.Geben Sie den Dateinamen an
			ResourceBundle rb =
				ResourceBundle.getBundle("resource.Resource", locale);

			//Wenn Sie etwas anderes als String erhalten möchten, wandeln Sie es mit der Methode getObject um.
			System.out.println(rb.getString("apple") + ":" + rb.getString("orange"));
		}
	}
}

■ Bei Verwendung von PropertyResourceBuilder

Die Definitionsregeln bei dieser Verwendung lauten wie folgt.

** ▼ Implementierungsbeispiel **

image.png

Source.properties


apple=J_apple
orange=J_orange

Source_en_US.properties


apple=U_apple
orange=U_orange

Main.java



//Ausgabeergebnis
// J_appleJ_orange
// U_appleU_orange

class Main {
	public static void main(String[] args) throws MalformedURLException {

        File dicDir = Paths.get(".\\resource").toFile();

        URLClassLoader urlLoader;
        urlLoader = new URLClassLoader(new URL[]{dicDir.toURI().toURL()});

		Locale localeJp = Locale.JAPAN;
		Locale localeUs = Locale.US;

		List<Locale> locales =
				new ArrayList<Locale>(Arrays.asList(localeJp, localeUs));

		for (Locale locale : locales) {
			//Geben Sie nur den Dateinamen an
			ResourceBundle rb =
					ResourceBundle.getBundle("Source" ,locale ,urlLoader);

			System.out.println(rb.getString("apple") + rb.getString("orange"));

		}
	}
}

Verweise

Recommended Posts

Java Gold misst: Lokalisierung
Java Gold misst: Format
Gegenmaßnahmen gegen Java-Fehler
Gegenmaßnahmen für OutOfMemoryError in Java
Hinweise zur Java8 Gold-Prüfung
Ich habe Java Gold gestartet (Kapitel 1-1)
Beim Übergeben von Java Gold SE 8
Ich habe Java SE8 Gold genommen.
Erhaltener Oracle Certified Java Programmer, Gold SE 8
Die Geschichte von Java Gold SE8
Java
Was ich mit Java Gold gelernt habe