[JAVA] [Spring] Lesen Sie mit MessageSource eine Nachricht aus einer YAML-Datei

Lesen Sie mit MessageResource eine Nachricht aus einer YAML-Datei

Motivation

Es ist mühsam, "messages.properties" zu pflegen! !! Wenn Sie es mit Eclipse berühren, wird es ein Problem sein, da es "native2ascii" ohne Erlaubnis ausführen wird! !! 11! !![^ 1]

Schreiben wir also in "YAML"

Zweck

Wenn i18n von einer Anwendung unterstützt wird, die Spring Framework verwendet, wird eine Ressourcendatei wie "messages.properties" (Eigenschaftendatei mit der Erweiterung ".properties") verwendet.

Es ist so ein Typ

message_ja.properties


#Können Sie nicht in einer hierarchischen Struktur schreiben? Nein!
site.title=Seitentitel
site.description=Seitenbeschreibung
page.header.links.index=Site oben
page.header.links.gettingstart=Loslegen
page.header.links.document=Dokument
page.header.links.community=Gemeinschaft

Ich möchte das so schreiben. [^ 2]

message_ja.yaml


#Können Sie in einer hierarchischen Struktur schreiben? Muss ich native2ascii machen? Yay!
site:
  title: "Seitentitel"
  description: "Seitenbeschreibung"
page:
  header:
    links:
      index: "Site oben"
      gettingstart: "Loslegen"
      document: "Dokument"
      community: "Gemeinschaft"

Ich konnte kein Implementierungsbeispiel für Zubari finden, selbst wenn ich es gegoogelt habe, also werde ich es so schreiben.

Beispiel für eine Projektkonfiguration

Ein Beispiel für eine Projektkonfiguration, um Nachrichtenressourcen YAML-fähig zu machen. [^ 3] YamlResourceBundle wird zum Lesen aus der Yaml-Datei verwendet. [^ 4]

screenshot-00.png

Der Inhalt jeder Datei ist wie folgt. Es ist einfach zu tun, so dass Sie es lesen können. Eine ausführliche Erklärung entfällt.

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: "Diese Nachricht wird aus der YAML-Ressourcendatei ausgegeben"

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";
	}
}

Browser-Anzeige

Starten Sie die Spring Boot-Anwendung und versuchen Sie, auf [http: // localhost: 8080](http: // localhost: 8080) zuzugreifen.

screenshot-01.png

Ich habs gemacht. [^ 5]

[^ 1]: Netbeans zeigt mehrere Sprachen nebeneinander an, ist also einfach zu übersetzen und führt nicht "native2ascii" aus. Er versteht die Geschichte. Ich muss jedoch sagen, dass es ehrlich gesagt subtil ist, wenn es einfach als Entwicklungsumgebung zu verwenden ist, da ihm verschiedene Funktionen fehlen. [^ 2]: Jeder möchte so schreiben. Ich möchte nicht schreiben, aber diese Seite wird nicht geöffnet. (Namensbegründung) [^ 3]: Es gibt einige zusätzliche Pakete, aber keine Sorge. [^ 4]: Zu diesem Zweck müssen Sie nur die Klasse YamlResourceBundle.Control verwenden. [^ 5]: Bestätigte Anzeige im englischen (en) Gebietsschema. Beweise? Hey, das ist: smile_imp:

Recommended Posts

[Spring] Lesen Sie mit MessageSource eine Nachricht aus einer YAML-Datei
Lesen Sie die Datei unter dem Klassenpfad als Zeichenfolge mit spring
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Datei-Upload mit Spring Boot
So laden Sie eine Bibliothek aus einer JAR-Datei mit VSCode << So verwenden Sie Maven / Gradle nicht >>
Lesen Sie die Dump-Datei mit MySQL von Docker
Führen Sie eine Batchdatei von Java aus
Implementieren Sie den Dateidownload mit Spring MVC
Konvertieren Sie Excel mit Java in Blob, speichern Sie es, lesen Sie es aus der Datenbank und geben Sie es als Datei aus!
So öffnen Sie eine Skriptdatei von Ubuntu mit VS-Code
Die Nachrichtenkooperation begann mit Spring Boot
So überprüfen Sie, bevor Sie mit Spring Integration eine Nachricht an den Server senden
Was ist eine Spring Boot-Originaldatei?
Erstellen Sie mit dem Befehl eine JAR-Datei
Erstellen Sie mit Spring Batch eine einfache On-Demand-Charge
Lesen Sie die xlsx-Datei in Java mit Selenium
So teilen Sie eine Spring Boot-Nachrichtendatei
[Rails] Lesen der vom Bildschirm hochgeladenen XML-Datei im Hash-Typ
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
So erstellen Sie ein Excel-Formular mithilfe einer Vorlagendatei mit Spring MVC
Vom Erstellen eines Spring Boot-Projekts bis zum Ausführen einer Anwendung mit VS Code
Ich möchte die Eigenschaftendatei mit einem anderen Dateinamen als application.yml oder application- [Profilname] .yml mit Spring Boot lesen
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
Erstellen Sie mit Spring Boot eine einfache Such-App
[Android] Mit zxing aus dem QR-Code-Bild lesen
Generieren Sie mit kompose eine kubernentes-Manifestdatei aus docker-compose.yaml
DBUnit-Tabellendefinition. Schwer zu lesen mit Yaml! !! !!
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen eines gemeinsamen Repositorys mit Spring Data JPA
Erstellen Sie ein WEB-System mit Spring + Doma + H2DB
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Eine kurze Hand, die einen JSON-Body aus ServerHttpRequest mit einem selbst erstellten WebFilter usw. mit Spring WebFlux liest
Beim Hochladen einer Datei mit Spring Boot wird eine Fehlerbehandlung durchgeführt, wenn die maximale Dateigröße überschritten wird.