4000-9696-28

SpringBoot实现国际化开发

2023年03月21日 17:20供稿中心:北大青鸟总部

摘要: 在 SpringBoot中要实现国际化是比较简单的,但如果要是在整个项目中实现国际化,还需要看前端使用的什么技术,但是作为优秀的后端工程师,当然要先搞定后端为主,所以咱么今儿个就先把SpringBoot后端这部分搞定~

不知道大家在平常访问一些网站的时候有没有注意到,很多网站都是有中英两个版面的,比如京东,我们就可以选择很多不同国家的语言,这其实都是为了满足不同国家和语言的人使用的需求。

通常情况下,一些比较复杂而且内容个性化的网站都会针对不同的国家,在内容上做一些调整,甚至是在不同的国家有独立站点;淘宝、京东、亚马逊都是这样在不同的国家有不同的站点。而一些内容比较标准化(网站内容一般不变化)的公司,如果切换成英语,也只是网站的语言从中文变成英文而已(下面Bing网页可以看到)

这样我们就可以根据我们自己的情况,来访问不同语言的网站,这个其实应用程序国际化的体现。



什么是国际化?

国际化,简单说就是应用程序的能够根据访问者所在的地区,展示相应语言的网页

比如猿小二在中国访问外国的网站,这个时候,猿小二看到网站就应该是中文的,因为猿小二在中国,需要的是中文的内容;包括时间也是东八区的;相反如果是在国外某个国家,那看到的就应该是当地的语言文字和时间,这样就可以一个网站根据不同的国家的用户来展示相应的内容。

而那些没有国际化的网站,就不能提供这么友好的体验。

国际化 ,英文叫 internationalization由于单词太长,而程序猿又是一个比较讲究效率的群体(比较懒)有给他起了个简称叫i18n(在i 和 n 之间有18 个字母)这样一张嘴就能说完!类似的还有Kubernetes(k8s);可见程序猿的创造力还是很丰富的,了解的什么是国际化了,接下来就要开始干了。



咱么先拿浏览器测试一下,看看效果!

其实大家也可以通过设置自己的浏览器语言来访问一些网站试试效果,比如我们把浏览器的语言改成英文之后(火狐浏览器)



让后我们在重新打开浏览器看下,网页的文字都变成了英文:



相反如果设置成中文,对应的网页内容就变成了中文,是不是很神奇呢?




这就说明这些网站其实都做了对应的国际化处理,接下来咱么就要自己来实现一下了,搓搓小手......

同学们上手操练一把!


Spring Boot之国际化篇

在 SpringBoot中要实现国际化是比较简单的,但如果要是在整个项目中实现国际化,还需要看前端使用的什么技术,比如是JSP、还是Vue等;但是作为优秀的后端工程师,当然要先搞定后端为主,所以咱么今儿个就先把SpringBoot后端这部分搞定~



创建项目工程

首先,使用SpringInitializr创建Spring Boot基础工程,直接在pom文件中加入web的依赖就可以。

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


创建国际化文件

由于SpringBoot默认就支持国际化的,所以我们只需要在resources文件夹下创建国际化配置文件即可,这里为了方便演示效果,咱么需要创建3个配置文件:

  • messages.properties 默认处理国际化的配置文件,要注意文件名是messages是固定的

  • messages_zh_CN.properties zh_CN 是中文简体

  • messages_en_US.properties en_US 是美国英语


Tips:

文件名也要以messages开头,如:messages_xxx.properties,如果不指定国际化语言则使用默认配置文件。

然后,在三个配置文件中分别添加配置属性。

在messages.properties添加中文配置信息,表示默认是使用的使用中文。

# 默认使用中文 i18n配置
username=课工场

在messages_zh_CN.properties添加中文配置信息,表示默认是使用的使用中文。

# 使用中文i18n配置
username=课工场

在messages_en_US.properties添加中文配置信息,表示默认是使用的使用中文。

# 使用美国英语i18n配置
username=kegongchang

只需要以上这么简单的配置就可以了。


创建Controller

加下来就可以写一个controller类来处理国际化了

/**
* 国际化测试
*/
@RestController
public class I18nController {


@Autowired
private MessageSource messageSource;


@GetMapping("i18n")
public String i18n() {
// 获取当前请求的区域Locale
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage("language", null, locale);
}
}

接下来就是见证奇迹的时刻...


见证奇迹的时刻

这里为了方便测试,我们使用IDEA的自定的HTTPClient工具,在请求头中,添加请求参数,注意参数的使用的-,而不是_下划线:

  • Accept-Language 语言设置成英文(en-US),效果如下,这个是在模拟用户使用的浏览器是语言,也就是用户是使用英语的

  • Accept-Language 语言设置成中文(注意参数是zh-CN),同上,这里模拟用户是使用中文作为浏览器的语言

这里咱么测试的使用的英语,中文同理只需要把Accept-Language的设置成zh_CN就可以了!


我们将请求头里面的Accept-Language设置成英文,就说明用户使用的浏览器语言英文,那用户就应该是欧美国家,所以对应服务器返回的内容就会是英文的内容。



可以看到返回的结果是messages_en_US.properties配置文件配置的英语,是不是很简单呢!



大家也可以使用浏览器测试,需要先设置浏览器的语言,如果浏览器的语言是英文就测试结果就是kegongchang,如果浏览器的语言是中文测试的结果就是课工场。


标签:
关于我们
公司简介
发展历程
青鸟荣誉
联系我们
加入我们
青鸟课程
BCVE视频特效课程
BCUI全链路UI设计
BCSP软件开发专业
BCNT网络工程师
启能职业教育基础课程
学习客户端下载
青鸟优师
青鸟云课堂
微信 公众号 咨询 顶部 首页
官方新版意见收集

*

官方新版意见收集

提交成功,感谢您的反馈。

我们会认真阅读和考虑每个用户的反馈。