开发者学堂课程【SpringBoot快速掌握 - 核心技术:[实验]国际化 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/612/detail/9247
[实验]国际化
内容介绍:
一、 Spring MVC 实现国际化
二、 步骤
一、Spring MVC 实现国际化
1、编写国际化配置文件;
通过浏览器的语言信息来完成对页面的语言效果。
配置要显示的内容
当点击中文时,页面会改为中文,点击 English 时,页面会修改为英文
2、使用 ResourceBundleMessageSource 管理国际化资源文件
3、如果用 jsp 页面,在页面使用 fmt:message 取出国际化内容
login. btn=登陆
login. password=密码
login. remember=记住我
login. tip=请登陆
login. username=用户名
二、步骤
1、编写国际化配置文件,抽取页面需要显示的国际化消息
创建文件夹:i18n 来存放国际化文件
创建登录的国际化 login.properties 和
中文的国际化登录 login_zh_CN.properties
英文的国际化登录 login_en_US.properties
随便点击一个文件,下方有 Resource Bundle 视图,点击进去,点击+号添加属性
其中右边三个框分别为默认,英文,中文
添加一个登录属性 login.tip ,图片如下:
再次添加一个 name 属性:login.username
添加密码属性:login.password
添加 login.remember 属性
添加按钮属性 login.remember 属性
切换 text 视图,都已经写好了
这样国际化配置文件就配置完毕、
2、SpringBoot 自动配置好了管理国际化资源文件的组件;
MessageSource 自动配置:
@Beanpublic MessageSource messageSource( ) {//new一个ResourceBundleMessageSource对象,ResourceBundleMessageSource messageSource=new ResourceBundleMessageSource();
//吧基础名和编码方式传了过来
if (StringUtils. hasText(this .basename)) {mes sageSource . setBasenames( StringUtils . commaDel imitedL istToStringArray(StringUtils. trimAllWhitespace (this . basename)));if (this . encoding != nu11) {messageSource . setDefaultEnc oding (this . encoding . name());messageSource.setFallbackToSystemLocale(this. fallbackToSystemLocale);messageSource.setCacheSeconds(this. cacheSeconds);messageSource.setAlwaysUseMessageFormat(this. alwaysUseMessageFormat);
//将 messageSource 返回了
return messageSource ;}
所以可以看见 spring boot 已经配置好了
资源文件组件:
@ConfigurationProperties(prefix . "spring.messages")public class MessageSourceAutoConfiguration {/**Comma-separated list of basenames (essentially a fully-qualified classpathlocation), each following the ResourceBundle convention with relaxed support forslash based locations. If it doesn't contain a package qualifier (such as"org.mypackage"), it will be resolved from the classpath root.*/
//设置基础名,可以直接访问了 i18n 中的文件了
private String basename = "messages";
//上面这段代码的意思是:我们的配置文件可以直接放在类路径下叫messages.properties;
这样不用做任何配置就能使用国际化配置功能了
//使用 @Bean 为容器添加一个组件,MessageSource就是管理国际化资源文件的组件
@Beanpublic MessageSource messageSource() {ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();if (StringUtils . hasText(this. basename)) {
// MessageSource 需要调用这个方法,设置国际化资源文件的基础名(去掉语言国家代码的)
messageSource . setBasenames(StringUtils. commaDelimitedlistToStringArray(StringUtils. trimAllwhitespace(this . basename)));}if (this.encoding !- null) {messageSource . setDef aultEncoding(this . encoding.name());}messageSource.setFallbackToSystemLocale(this. fallbackToSystemLocale);messageSource.setCacheSeconds(this . cacheSeconds);messageSource.setAlwaysUseMessageFormat(this . alwaysUseMessageFormat);return messageSource;}
指定国际化组件路径:在配置文件中
spring.messages.basename=i18n.login
修改 login.html 文件:
<1abel class="sr-on1y" th:text="#{login .username }">UsernamePassword<1abe1> [[#{login.remember}]]
Sign in
用此代码来实现获取国际化各个模块:#{login.remember}
访问页面查看效果
效果:根据浏览器语言设置的信息切换了国际化;
在默认设置搜索 file en 修改全局默认配置 utf-8
修改完成后对乱码的代码进行修改,最后在登录页面中浏览器设置切换中英文也能查看效果。
实现点击按钮切换中英文原理:
国际化 Locale (区域信息对象) ; LocaleResolver (获取区域信息对象) ;
自动化配置的国际化语言信息:
@Bean@ConditionalonMissingBean@ConditionalOnroperty(prefix . "spring.mvc", name . "1ocale")public LocaleResolver localeResolver() {if(this.mvcProperties.getLocaleResolver()=WebMvcProperties .LocaleResolver .FIXED) {return new FixedLocaleResolver(this. mvcProperties . getLocale());}AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();localeResolver . setDefaultLocale(this . mvcProperties. getLocale());return localeResolver;}
Spring boot 也配置了区域化解析信息
默认的就是根据请求头带来的区域信息获取 Locale 进行国际化
按 F12 可以发现每请求一个就会在请求头看见语言编码,这是浏览器中设置的,可以进行修改。
3、去页面获取国际化的值;
再 ider 中进行对编码的设置
4、点击链接切换国际化
在 login.html 中修改以下内容实现中英文切换自由