[实验]国际化 | 学习笔记

简介: 快速学习[实验]国际化

开发者学堂课程【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 视图,都已经写好了

image.png

这样国际化配置文件就配置完毕、

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 中修改以下内容实现中英文切换自由

相关文章
|
1月前
|
人工智能 自然语言处理 开发工具
Languine:专为开发者设计的 AI 多语言翻译工具,快速生成100+种语言的准确翻译,简化应用程序的 i18n 国际化配置
Languine 是一款面向开发者的 AI 翻译工具,支持 100+ 种语言,自动化翻译流程,提升多语言应用开发效率。
85 15
Languine:专为开发者设计的 AI 多语言翻译工具,快速生成100+种语言的准确翻译,简化应用程序的 i18n 国际化配置
|
9月前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add&lt;T&gt;`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
58 2
|
机器学习/深度学习 人工智能 算法
这篇科普让你Get所有大模型的基础核心知识点
本文介绍了AI大模型的概念和发展历程。AI大模型是指具有1亿以上参数的机器学习模型,通过在大规模数据集上进行预训练,可以直接支撑各类应用。大模型的发展经历了从萌芽期到AI1.0时期,再到AI2.0时期的飞跃,目前最新发布的大模型参数已经达到了千亿甚至万亿级别。国内外的公司都在积极研发和应用大模型,如OpenAI、Google、Facebook、Microsoft等。国内也有百度、阿里巴巴、万维、商汤科技等公司发布了自己的大模型产品。大模型的建造离不开算力资源、算法人才、数据积累等核心要素。此外,文章还列举了一些与大模型相关的专业名词,如算法、模型参数、训练数据、Token等。
|
消息中间件 设计模式 缓存
怎样更好地阅读源码?
最近,为了提高团队成员技术水平,考察了大家源码阅读情况。作为第一期任务,选择了spring框架,范围是spring-beans,spring-context,spring-core,以及spring-web。考核方式为:了解spring框架作用、核心概念,并选择感觉最重要的几个类进行详细阐述。
115 0
|
机器学习/深度学习 数据采集 人工智能
Meta这篇语言互译大模型研究,结果对比都是「套路」
Meta这篇语言互译大模型研究,结果对比都是「套路」
435 0
|
前端开发 安全 Java
案例所用技术介绍|学习笔记
快速学习案例所用技术介绍
案例所用技术介绍|学习笔记
|
消息中间件 存储 Dubbo
项目技术介绍|学习笔记
快速学习项目技术介绍
102 0
项目技术介绍|学习笔记
|
vr&ar UED
【测试基础理论】看看你的标题,能吸引到新读者么?(非功能-易用性)
【测试基础理论】看看你的标题,能吸引到新读者么?(非功能-易用性)