[JAVA] [Spring] Lire un message à partir d'un fichier YAML avec MessageSource

Lire un message à partir d'un fichier YAML avec MessageResource

Motivation

C'est un problème de maintenir messages.properties! !! Si vous le touchez avec Eclipse, ce sera un problème car il fera native2ascii sans permission! !! 11! !![^ 1]

Alors écrivons en YAML

Objectif

Lorsque i18n est pris en charge par une application qui utilise Spring Framework, un fichier de ressources tel que messages.properties (fichier de propriétés avec l'extension .properties) sera utilisé.

C'est ce genre de gars

message_ja.properties


#Ne pouvez-vous pas écrire dans une structure hiérarchique? Non!
site.title=Titre du site
site.description=Description du site
page.header.links.index=Haut du site
page.header.links.gettingstart=Commencer
page.header.links.document=document
page.header.links.community=communauté

Je veux écrire ça comme ça. [^ 2]

message_ja.yaml


#Pouvez-vous écrire dans une structure hiérarchique? Dois-je faire native2ascii? Yay!
site:
  title: "Titre du site"
  description: "Description du site"
page:
  header:
    links:
      index: "Haut du site"
      gettingstart: "Commencer"
      document: "document"
      community: "communauté"

Même si je googlé, je n'ai pas pu trouver un exemple d'implémentation de Zubari, donc je vais l'écrire comme ça.

Exemple de configuration de projet

Un exemple de configuration de projet pour rendre les ressources de message compatibles YAML. [^ 3] YamlResourceBundle est utilisé pour lire à partir du fichier Yaml. [^ 4]

screenshot-00.png

Le contenu de chaque fichier est le suivant. C'est simple à faire, vous pouvez donc le lire. Une explication si détaillée est omise.

build.gradle


buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.2.RELEASE'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
	baseName = 'exercise1'
	version =  '0.0.1-SNAPSHOT'
}

repositories {
	mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-devtools'
	compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
    compile 'net.rakugakibox.util:yaml-resource-bundle:1.1'
}

sourceCompatibility = '1.8'
targetCompatibility = '1.8'
ext['mainClass'] = 'pkg.exercise1.App'
ext['thymeleaf.version'] = '3.0.9.RELEASE'
ext['thymeleaf-layout-dialect.version'] = '2.3.0'

config/application.yml


spring:
  thymeleaf:
    mode: "HTML"
  messages:
    basename: "i18n/messages"
    encoding: "UTF-8"

i18n/messages.yml


site:
  title: "Excercise"
  description: "Ce message est sorti du fichier de ressources YAML"

templates/index.html


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<title data-th-text="#{site.title}">Title</title>
	</head>
	<body>
		<div>
			<article>
				<h1 data-th-text="#{site.title}">Title</h1>
				<p data-th-text="#{site.description}">This is Index page. Yeah!</p>
				<hr />
				<h2>API</h2>
				<ul>
					<li><a href="#" data-th-href="@{/api/hello}">/api/hello</a></li>
				</ul>
			</article>
		</div>
	</body>
</html>

pkg/exercise1/App.java


package pkg.exercise1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
	public static void main(String... args) {
		SpringApplication.run(App.class, args);
	}
}

pkg/exercise1/configurations/MessageSourceConfig.java


package pkg.exercise1.configurations;

import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;

import net.rakugakibox.util.YamlResourceBundle;

@Configuration
public class MessageSourceConfig {

    @Bean("messageSource")
    public MessageSource messageSource(
            @Value("${spring.messages.basename}") String basename,
            @Value("${spring.messages.encoding}") String encoding
    ) {
        YamlMessageSource ms = new YamlMessageSource();
        ms.setBasename(basename);
        ms.setDefaultEncoding(encoding);
        ms.setAlwaysUseMessageFormat(true);
        ms.setUseCodeAsDefaultMessage(true);
        ms.setFallbackToSystemLocale(true);
        return ms;
    }
}

class YamlMessageSource extends ResourceBundleMessageSource {
    @Override
    protected ResourceBundle doGetBundle(String basename, Locale locale) throws MissingResourceException {
        return ResourceBundle.getBundle(basename, locale, YamlResourceBundle.Control.INSTANCE);
    }
}

pkg/exercise1/controllers/IndexController.java


package pkg.exercise1.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController {

	@RequestMapping("/")
	String home() {
		return "index";
	}
}

Affichage du navigateur

Démarrez l'application Spring Boot et essayez d'accéder à [http: // localhost: 8080](http: // localhost: 8080).

screenshot-01.png

Je l'ai fait. [^ 5]

[^ 1]: Netbeans affiche plusieurs langues côte à côte, donc c'est facile à traduire et ne fait pas native2ascii. Il comprend l'histoire. Cependant, je dois dire que c'est honnêtement subtil s'il est facile à utiliser comme environnement de développement car il manque diverses fonctions. [^ 2]: Tout le monde veut écrire comme ça. Je ne veux pas écrire, mais cette page ne s'ouvre pas. (Nom raisonnement) [^ 3]: Il y a quelques paquets supplémentaires, mais ne vous inquiétez pas. [^ 4]: Pour cela, il vous suffit d'utiliser la classe YamlResourceBundle.Control. [^ 5]: Affichage confirmé dans les paramètres régionaux anglais (en). preuve? Hé, c'est: smiling_imp:

Recommended Posts

[Spring] Lire un message à partir d'un fichier YAML avec MessageSource
Lisez le fichier sous le chemin de classe sous forme de chaîne de caractères avec ressort
Lire une chaîne dans un fichier PDF avec Java
Téléchargement de fichiers avec Spring Boot
Comment charger une bibliothèque à partir d'un fichier JAR avec VSCode << Comment ne pas utiliser Maven / Gradle >>
Lire le fichier de vidage avec MySQL de Docker
Exécuter le fichier de commandes à partir de Java
Implémenter le téléchargement de fichiers avec Spring MVC
Convertissez Excel en Blob avec java, enregistrez-le, lisez-le à partir de DB et exportez-le sous forme de fichier!
Comment ouvrir un fichier de script à partir d'Ubuntu avec du code VS
La coopération des messages a commencé avec Spring Boot
Comment vérifier avant d'envoyer un message au serveur avec Spring Integration
Qu'est-ce qu'un fichier .original Spring Boot?
Créez un fichier jar avec la commande
Créez un lot à la demande simple avec Spring Batch
Lire le fichier xlsx en Java avec Selenium
Comment diviser un fichier de message Spring Boot
[Rails] Comment lire le fichier XML téléchargé depuis l'écran en type Hash
Je souhaite pouvoir lire des fichiers en utilisant refile avec administrate [rails6]
Comment créer un formulaire Excel à l'aide d'un fichier modèle avec Spring MVC
De la création d'un projet Spring Boot à l'exécution d'une application avec VS Code
Je souhaite lire le fichier de propriétés avec un nom de fichier autre que application.yml ou application- [nom du profil] .yml avec Spring Boot
Créez un site Web avec Spring Boot + Gradle (jdk1.8.x)
Créez une application de recherche simple avec Spring Boot
[Android] Lire à partir de l'image du code QR avec zxing
Générer un fichier manifeste kubernentes à partir de docker-compose.yaml avec kompose
Définition de la table DBUnit. Difficile à lire avec yaml! !! !!
Créer un serveur API Web avec Spring Boot
Création d'un référentiel commun avec Spring Data JPA
Construisez un système WEB avec Spring + Doma + H2DB
Créer un environnement de développement Spring Boot avec docker
Une petite main qui lit un corps JSON à partir de ServerHttpRequest avec un WebFilter auto-créé, etc. avec Spring WebFlux
Lors du téléchargement d'un fichier avec Spring Boot, la gestion des erreurs est effectuée lorsque la taille maximale du fichier est dépassée.