springboot 2.1 实践教程(八)-国际化

Spring Boot支持本地化消息,以便您的应用程序可以满足不同语言首选项的用户。默认情况下,SpringBoot默认国际化文件为:classpath:message.properties,如果放在其它文件夹中,则需要在application.yml配置属性spring.messages.basename

 

spring.messages.basename=i18n/messages  #系统会在i118n目录下查找messages开头的文件
spring.messages.encoding =UTF-8

 

具体实现国际化的步骤非常简单,如下:

创建资源文件,在resources/i18n/messages目录下

message.properties (默认文件,当找不到语言的配置的时候,使用该文件进行展示)

user.name=用户名  
user.password=密码  
user.btn=登录 
weclome=欢迎 

messages_zh_CN.properties(中文)

user.name=用户名  
user.password=密码  
user.btn=登录
weclome=欢迎  

 messages_en_US.properties(英文)

user.name=UserName  
user.password=Password  
user.btn=Sign In
weclome=weclome

 

创建I18nConfig类

该类的作用是设置国际化相关的一些配置

自定义国际化配置的类主要包含的内容

1.设置以session 的方式获取local值

2.设置拦截器拦截请求中的特殊参数,根据参数的内容来改变用户的语言区域。

 

/**
 * 资源文件配置加载
 * 
 */
@Configuration
public class I18nConfig implements WebMvcConfigurer
{
    @Bean
    public LocaleResolver localeResolver()
    {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        // 默认语言
        slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor()
    {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        // 参数名
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry)
    {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

创建Controller

package org.learn.controller;

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

@Controller
public class MyMessagesController {

    @GetMapping("/")
    public String hello() {
        return "hello";
    }
}

在页面上获国际化的值

前端页面使用的thymeleaf,后面的章节我们将会介绍该模板引擎,如果使用thymeleaf,我们在pom.xml引入相关jar包

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>

设置Tthymeleaf相关的配置信息

# 模板引擎
 spring.thymeleaf. mode = HTML
 spring.thymeleaf. encoding=utf-8
    # 禁用缓存
 spring.thymeleaf. cache = false

创建页面 hello.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="/?lang=en_US">English(US)</a>
<a href="/?lang=zh_CN">简体中文</a>

<br />
<br />
<label th:text="#{user.name}"></label><input type="text"> <br />
<label th:text="#{user.password}"></label><input type="text"><br />
<input type="button" th:value="#{user.btn}"/>
</body>
</html>

thymeleaf 标签 是通过 #{}来获取语言文件的值

通过后端渲染国际化的方法

package org.learn.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.Locale;

@Controller
public class MyMessagesController {
    @Autowired
    private MessageSource messageSource;
    @GetMapping("/")
    public String hello(Model model) {

        Locale locale = LocaleContextHolder.getLocale();
        model.addAttribute("weclomeLang", messageSource.getMessage("weclome", null, locale));
        return "hello";
    }
}

后端controller 通过messageSource.getMessage获取本地化语言文件中的内容

前端页面则增加

<h2><span th:text="${weclomeLang}"></span></h2>

如上代码获取后端本地化的内容渲染到页面中,我们可以看到获取后端的内容通过${}获取的

以上就是Spring Boot 国际化的操作。

 

点击Englisn

 

 

点击简体中文时

 

整体工程目录结构如下

 

 

 

本章总结:

Spring Boot 对多语言的实现在步骤上简化了很多,首先设置好资源文件(messages.properties)系统可以通过资源文件的加载通过LocaleResolver去设置相关的配置信息。前台页面可以根据多语言参数的不同加载不同的语言文件,并可以通过模板引擎文件渲染出结果。

注意的地方:

1.当我们使用Thymeleaf等动态页面时,页面文件默认是在resources/templates目录下的。静态页面时在static目录下。

2.当系统没有找到对应的语言文件时,会默认加载messages.properties文件

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值