J'étudiais le support multilingue dans Spring Framework, mais il y avait quelques encombrements, alors j'ai pris une note. La version de Spring Boot est 2.1.2.
En gros, utilisez ʻorg.springframework.context.MessageSource`.
Créez le fichier suivant directement sous src / main / resources
.
messages.properties
hello=hello
messages_ja.properties
hello=Bonjour
messages.properties
est le fichier par défaut et messages_ja.properties
est le fichier pour le japonais (spécifiez les paramètres régionaux après le trait de soulignement).
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);
}
}
Injectez MessageSource
pour appeler le message. L'exemple ci-dessus utilise celui de base, mais dans Official le message par défaut Il existe également une méthode à spécifier.
ʻAccept-Language le
jadans pour
le faire en envoyant une requête GET Bonjour ʻest, d'autres langues (
en-USet
zh-CN, etc.)
faites-le en envoyant une requête par bonjour «Est retourné.
Cependant, selon l'environnement, «hello» peut ne pas être retourné même si ce n'est pas «ja» ([décrit plus loin](# lorsque le message est toujours renvoyé en japonais)).
Par défaut, cela fait référence à messages.properties
, mais vous pouvez vouloir changer l'emplacement du fichier ou préparer plusieurs fichiers.
Dans ce cas, modifiez le MessageSource
injecté.
Supposons que vous gardiez le contenu de messages.properties
et que vous définissiez l'emplacement de sauvegarde sur src / main / resources / i18n
.
Supposons également que les nouveaux fichiers suivants soient enregistrés dans src / main / resources / i18n / hoge
.
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;
}
}
Une classe dans laquelle ResourceBundleMessageSource
implémente MessageSource
. Il semble y avoir un autre ReloadableResourceBundleMessageSource
qui peut recharger le fichier de message.
Spécifiez l'emplacement et le nom du fichier de message avec setBasenames
.
Il semble y avoir un moyen de spécifier le fichier de message dans ʻapplication.properties`, mais il n'est pas confirmé.
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);
}
}
[De base] par le même ʻAccept-Language de valeur que lorsque le (# exemple d'exécution) ou le japonais renvoyé (
Hello ʻand Hoge
) est, hello
et hoge
est retourné.
La plupart du temps, lorsque je recherchais MessageSource
sur n'importe quel site, cela indiquait que le message du fichier par défaut était renvoyé s'il n'y avait pas de paramètres régionaux spécifiés, mais lorsque je le vérifiais sur mon PC local, le message était toujours renvoyé en japonais.
D'après ce que j'ai vérifié, il semble que si la locale n'existe pas, elle reviendra à la locale du système par défaut (Reference context / support / AbstractResourceBasedMessageSource.html # setFallbackToSystemLocale-boolean-)). Lorsque je l'ai vérifié sur mon PC local, je m'attendais à ce que le message soit toujours renvoyé en japonais car les paramètres régionaux du système étaient japonais et le fichier de propriétés en japonais était préparé.
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;
}
}
Si vous définissez setFallbackToSystemLocale
sur false
, le message du fichier par défaut sera renvoyé si le fichier de la locale spécifiée n'existe pas (indépendamment de la locale du système, etc.).
Si c'est «ja», il sera retourné en japonais, mais si c'est «ja_JP», il ne sera pas retourné en japonais, etc.
Recommended Posts