VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • SpringBootWeb开发-页面国际化

国际化原理:

  页面之所以可以实现国际化效果,这要归结于名为Locale对象(区域信息对象),在SpringBoot的WebMvcAutoConfiguration中,有一个叫LocaleResolver的组件,这个组件就是用来获取区域信息对象的,也就是说SpringBoot的WebMvc自动配置中为我们配置了区域信息解析器,也就是下面的这段代码,从这段代码可以看到,如果我们的区域信息是固定的,那么就用固定配置的区域信息,否则呢就通过AcceptHeaderLocaleResolver 类中的resolveLocale这个方法中的request.getHeader这个请求头中获取区域信息。这个也是默认的区域信息解析器,如果要实现点击链接切换国际化语言,那就不能用这个默认的区域信息解析器了,就要自己写一个LocaleResolver。

复制代码
 1 @Bean
 2 @ConditionalOnMissingBean
 3 @ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
 4 public LocaleResolver localeResolver() {
 5     if (this.mvcProperties.getLocaleResolver() ==WebMvcProperties.LocaleResolver.FIXED) {
 6         return new FixedLocaleResolver(this.mvcProperties.getLocale());
 7     }
 8     AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
 9     localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
10     return localeResolver;
11 }
复制代码

 

国际化功能实现步骤:

一:基本的国际化功能

  1.编写国际化配置文件,也就是在resources文件夹下新建一个名为i18n的文件夹用来存放国际化配置文件,一个是login_en_US.properties,一个是login_zh_CN.properties,分别是英文和中文

    (1)login_en_US.properties配置文件内容为,那些等号后面的英文就是login页面的英文

1 login.btn=Sign In
2 login.password=Password
3 login.remember=Remember Me
4 login.tip=Please sign in
5 login.username=UserName

    (2)login_zh_CN.properties配置文件内容为

1 login.btn=登录
2 login.password=密码
3 login.remember=记住我

4 login.tip=请登录

5 login.username=用户名

    (3)springboot中有一个MessageSourceAutoConfiguration自动配置类会为我们自动配置写好的国际化配置文件,在这个配置类里边有一个MessageSource组件,这个组件就是管理国际化配置的组件,全称为ResourceBundleMessageSource,这个组件会调用一个叫setBasenames的方法,这个方法是设置国际化资源文件基础名的(我们国际化配置文件的全名为login_zh_CN,去掉国家语言代码_zh_CN的名字就是基础名)

    (4)在全局配置文件中配置我们的国家化配置文件,也就是在application.properties文件中添加spring.messages.basename=i18n.login这行代码即可,login是国际化配置文件的基础名,配置完后就相当于把我们的国际化配置文件让spring里的ResourceBundleMessageSource管了起来

   2.在login.html页面通过#{}获取国际化配置文件的值,然后运行项目测试效果(这里如果有出现乱码的话就在file->setting->file encoding里将Default encoding for properties files修改为utf-8,并勾选旁边的转为ascll码选项,记得修改浏览器语言设置),至此基础的国际化功能成功(即根据浏览器设置页面显示中文还是英文)

 二:实现点击链接切换国际化

  1.将前端login.html页面的链接按钮上配置一个超链接和参数,便于后端处理

   2.编写自己的区域信息解析器

    (1)新建一个名字为MyLocaleResolver的类文件,实现区域信息解析器功能,目录结构如下

     (2)编写代码

复制代码
 1 package com.xiaoma.springbootweb.component;
 2 
 3 import org.springframework.util.StringUtils;
 4 import org.springframework.web.servlet.LocaleResolver;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import java.util.Locale;
 9 
10 //如果实现自己的区域信息解析器,就要实现LocaleResolver中的resolveLocale方法
11 public class MyLocaleResolver implements LocaleResolver {
12 
13     @Override
14     public Locale resolveLocale(HttpServletRequest request) {
15         //定义一个string类型变量,通过HttpServletRequest中的getParameter方法获取前端页面配置的参数
16         String l = request.getParameter("l");
17         //声明一个locale对象,如果没有用这个区域信息解析器的话就用WebMvcAutoConfiguration中为我们自动配置的区域信息解析器
18         Locale locale=Locale.getDefault();
19         if(!StringUtils.isEmpty(l)){
20             //因为参数信息为zh_CN和en_US,中间用的是“_"线分开的,第一个是语言信息,第二个是国家代码,将参数分割存到String数组里
21             String[] split = l.split("_");
22             locale=new Locale(split[0],split[1]);
23         }
24         return locale;
25     }
26 
27     @Override
28     public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
29 
30     }
31 }
复制代码

    (3)为了让我们写好的区域信息解析器生效,要将这个组件添加到容器中,在MyMvcConfig这个配置类里添加。

1     @Bean
2     public LocaleResolver localeResolver(){
3         return new MyLocaleResolver();
4     }

    (4)运行程序测试效果

 

 

原文:https://www.cnblogs.com/XiaoMaGuai/p/15600433.html


相关教程