[JAVA] Mehrsprachige Unterstützung für Spring Framework

Einführung

Ich habe die mehrsprachige Unterstützung im Spring Framework untersucht, aber es gab einige Unordnung, also habe ich mir eine Notiz gemacht. Die Version von Spring Boot ist 2.1.2.

Basic

Verwenden Sie grundsätzlich "org.springframework.context.MessageSource".

Beispiel für das Einstellen einer Datei

Erstellen Sie die folgende Datei direkt unter "src / main / resources".

messages.properties


hello=hello

messages_ja.properties


hello=Hallo

messages.properties ist die Standarddatei und messages_ja.properties ist die Datei für Japanisch (geben Sie das Gebietsschema nach dem Unterstrich an).

Beispiel aufrufen

MessageController.java


@CrossOrigin
@RestController
@RequestMapping("/messages")
public class MessageController {
	@Autowired
	private MessageSource messageSource;

	@GetMapping("/hello")
	public String hello(Locale locale) {
		return messageSource.getMessage("hello", new String[] {}, locale);
	}
}

Injizieren Sie "MessageSource", um die Nachricht aufzurufen. Das obige Beispiel verwendet das grundlegende Beispiel, aber in Official die Standardnachricht Es gibt auch eine Methode zum Angeben.

Ausführungsbeispiel

Accept-Language the ja in do it by send a GET request Hallo ist, andere Sprachen (en-US und zh-CN usw.)` do it durch Senden einer Anfrage by hello Wird zurückgegeben. Abhängig von der Umgebung wird "Hallo" jedoch möglicherweise nicht zurückgegeben, auch wenn es nicht "Ja" ist ([später beschrieben](# wenn die Nachricht immer auf Japanisch zurückgegeben wird)).

Anwendung

Ich möchte den Speicherort und den Namen der Einstellungsdatei ändern

Standardmäßig bezieht es sich auf "messages.properties". Möglicherweise möchten Sie jedoch den Speicherort der Datei ändern oder mehrere Dateien vorbereiten. Ändern Sie in diesem Fall die injizierte "MessageSource".

Beispiel für das Einstellen einer Datei

Angenommen, Sie behalten den Inhalt von "messages.properties" bei und setzen den Speicherort auf "src / main / resources / i18n". Nehmen Sie außerdem an, dass die folgenden neuen Dateien in "src / main / resources / i18n / hoge" gespeichert sind.

hoge.properties


hoge=hoge

hoge_ja.properties


hoge=Hoge

Beispiel auf der Spring Framework-Seite setzen

MessageSourceConfig.java


@Configuration
public class MessageSourceConfig {
	@Bean
	public MessageSource messageSource() {
		ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
		messageSource.setBasenames("i18n/messages", "i18n/hoge/hoge");
		messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());
		return messageSource;
	}
}

Eine Klasse, in der "ResourceBundleMessageSource" "MessageSource" implementiert. Es scheint eine andere "ReloadableResourceBundleMessageSource" zu geben, die die Nachrichtendatei neu laden kann. Geben Sie den Speicherort und den Namen der Nachrichtendatei mit "setBasenames" an. Es scheint eine Möglichkeit zu geben, die Nachrichtendatei in "application.properties" anzugeben, sie ist jedoch nicht bestätigt.

Beispiel aufrufen

MessageController.java


@CrossOrigin
@RestController
@RequestMapping("/messages")
public class MessageController {
	@Autowired
	private MessageSource messageSource;

	@GetMapping("/hello")
	public String hello(Locale locale) {
		return messageSource.getMessage("hello", new String[] {}, locale);
	}

	@GetMapping("/hoge")
	public String hoge(Locale locale) {
		return messageSource.getMessage("hoge", new String[] {}, locale);
	}
}

Ausführungsbeispiel

[Basic] durch den gleichen Wert wie "Accept-Language", wenn das (# Ausführungsbeispiel) oder zurückgegebene Japanisch ("Hello" und "Hoge") "Hallo" und "Hoge" zurückgegeben wird.

Ergänzung

Wenn die Nachricht immer auf Japanisch zurückgegeben wird

Wenn ich auf einer Site nach "MessageSource" suchte, wurde meistens angegeben, dass die Nachricht der Standarddatei zurückgegeben wurde, wenn kein angegebenes Gebietsschema vorhanden war. Wenn ich sie jedoch auf meinem lokalen PC überprüfte, wurde die Nachricht immer auf Japanisch zurückgegeben. Soweit ich dies überprüft habe, scheint es, dass das Gebietsschema, wenn es nicht vorhanden ist, standardmäßig auf das Systemgebietsschema zurückgreift (Referenz. context / support / AbstractResourceBasedMessageSource.html # setFallbackToSystemLocale-boolean-)). Als ich es auf meinem lokalen PC überprüfte, erwartete ich, dass die Nachricht immer auf Japanisch zurückgegeben wurde, da das Systemgebietsschema Japanisch war und die Eigenschaftendatei auf Japanisch vorbereitet wurde.

Gegenmaßnahmen

MessageSourceConfig.java


@Configuration
public class MessageSourceConfig {
	@Bean
	public MessageSource messageSource() {
		ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
		messageSource.setBasenames("i18n/messages", "i18n/hoge/hoge");
		messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());
		messageSource.setFallbackToSystemLocale(false);
		return messageSource;
	}
}

Wenn Sie "setFallbackToSystemLocale" auf "false" setzen, wird die Nachricht der Standarddatei zurückgegeben, wenn die Datei des angegebenen Gebietsschemas nicht vorhanden ist (unabhängig vom Systemgebietsschema usw.).

abschließend

Wenn es "ja" ist, wird es auf Japanisch zurückgegeben, aber wenn es "ja_JP" ist, wird es nicht auf Japanisch zurückgegeben.

Recommended Posts

Mehrsprachige Unterstützung für Spring Framework
[Spring Framework] Konfigurationsaufteilung
1. Starten Sie Spring Framework von 1
Spring Framework Zusammenfassung - Über DI
[Persönliche Notizen] Über das Spring Framework
Spring Framework Selbststudium Memo series_1
Informationen zum Spring Framework-Kontextfehler
Spring Framework 5.0 Zusammenfassung der wichtigsten Änderungen
Frühlingsrahmen Einfaches Studienmemo (2): AOP
Spring Framework-Tools für Java-Entwickler
Testen Sie den Spring Framework Controller mit Junit
Einführung der Basisauthentifizierung in Heroku [Spring Framework]
Unterstützt Protokollpuffer für Spring Cloud Stream
Wichtige Änderungen im Zusammenhang mit Spring Framework 5.0 Test
XML-Definition der Spring Framework-Bean: benutzerdefiniertes Tag
Warum Frühling als leichtes Gerüst betrachten
Anmerkungen zur Spring Framework-Studie [Teil 1] DI-Container
Informationen zur ersten Anzeige von Spring Framework
Null-Support-Cache in Spring Data Redis
Wichtige Änderungen in der Kernfunktionalität von Spring Framework 5.0
Funktionen des Spring Frameworks für Java-Entwickler