国际化(i18n) - 基于springboot

Springboot项目的国际化 - i18n

springboot版本 2.4.0

 

目录

步骤一、添加Resource Bundle

     STS/Eclipse安装ResourceBundleEditor

     创建ResourceBundle文件

步骤二、配置中设置ResourceBundle的basename

步骤三、登陆页面

步骤四、自定义LocaleResovler

     自定义LocaleResovler

         步骤五、页面测试


步骤一、添加Resource Bundle

如果使用STS或者Eclipse开发项目,想要更方便的添加Resource Bundle文件,需要安装ResourceBundleEditor

STS/Eclipse安装ResourceBundleEditor

help -> Eclipse Marketplace

搜索ResourceBundleEditor,点击install即可(笔者本机上已经安装,故搜索出来显示为installed)。

创建ResourceBundle文件

在项目的resources/static目录下创建i18n文件夹,在该文件夹下创建ResourceBundle文件。

填写Base Name - message, 选择语言和国家,比如选择英语、美国(en、US)并且添加到项目国际化所需要的语言列表中。

本例中添加三个 —— 中文,默认,英语。

创建ResourceBundle后,i18n下会有三个文件——message_en.properties、message_zh.properties、message.properties。打开任意一个文件,

添加键值对,一个键对应三个语言的值。比如添加Welcome键。

添加完成后三个文件都会有相应的键值。

注意:如果添加的中文时出现乱码,右击properties文件,选择properties(属性)项,修改text file encoding为utf-8

步骤二、配置中设置ResourceBundle的basename

由于resourcebundle在项目的 static/i18n下,在设置basename时需要加上以上路径

application.yml

spring:
    messages:
        basename: static/i18n/message

 

步骤三、登陆页面

login.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
	<a th:href="@{/login(l='zh_CN')}">中文</a>
	<a th:href="@{/login(l='en_US')}">English</a>
	<h1 th:text="#{Login}"></h1>
	<form th:action="@{'/login'}" method="post">
		<input type="text" name="username"/>
		<input type="password" name="password"/>
		<input type="checkbox" name="rememberme"/>[[#{Remember_Me}]]<br>
		<input type="submit" th:value="#{Login}">
	</form>
</body>
</html>

本例中使用了thymeleaf,引入thymeleaf的依赖即可。

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

 

步骤四、自定义LocaleResovler

在WebMvcAutoConfiguration.java中创建了默认的LocaleResovler,但有创建的条件——即项目路径下没有LocaleResovler这样的bean时才创建。所以在项目下创建自定义的LocaleResovler,该默认LocaleResovler就不会启用。

WebMvcAutoConfiguration.java

@Override
@Bean
@ConditionalOnMissingBean // 条件注解
@SuppressWarnings("deprecation")
public LocaleResolver localeResolver() {
    if (this.webProperties.getLocaleResolver() == WebProperties.LocaleResolver.FIXED) {
		return new FixedLocaleResolver(this.webProperties.getLocale());
    }
	if (this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
		return new FixedLocaleResolver(this.mvcProperties.getLocale());
	}
	AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
	Locale locale = (this.webProperties.getLocale() != null) ?         
        this.webProperties.getLocale(): this.mvcProperties.getLocale();
	localeResolver.setDefaultLocale(locale);
	return localeResolver;
}

自定义LocaleResovler

package com.example.demo.config;

import java.util.Locale;
import java.util.Objects;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.LocaleResolver;

public class CustomLocaleResovler implements LocaleResolver{
	
	@Override
	public Locale resolveLocale(HttpServletRequest request) {
		HttpSession session = request.getSession();
		String language = request.getParameter("l");
		if (!ObjectUtils.isEmpty(language)) {
			String[] lanArrary = language.split("_");
			Locale locale = new Locale(lanArrary[0], lanArrary[1]);
			session.setAttribute("Locale", locale);
			return locale;
		}
		Locale localeUsing = (Locale) session.getAttribute("Locale");
		return Objects.isNull(localeUsing)?Locale.getDefault() : localeUsing;
	}

	@Override
	public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
		

	}


}

步骤五、页面测试

本机环境默认是英语,所以一开始会显示英语。点击中文进行语言切换。

再切换成英文

 

 

该博客用于笔者后期巩固学习,仅作参考,如有不当之处,欢迎指出。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值