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.
Verwenden Sie grundsätzlich "org.springframework.context.MessageSource".
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).
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.
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)).
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".
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
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.
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);
}
}
[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.
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.
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.).
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