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
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.
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]
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";
}
}
Démarrez l'application Spring Boot et essayez d'accéder à [http: // localhost: 8080](http: // localhost: 8080).
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