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

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

开发者学堂课程【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 中修改以下内容实现中英文切换自由

相关文章
|
6月前
|
人工智能 自然语言处理 前端开发
还不懂如何与chatGPT高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(二)进阶篇
这篇文章是chatGPT提示词工程的进阶教程,涵盖了加入鼓励词/行为词、拆分复杂需求、纠正反馈、使用英语提问、角色扮演、限定回答格式、多符咒结合以及参考其他人的提示词和使用提示词插件等技巧。
还不懂如何与chatGPT高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(二)进阶篇
|
1月前
|
人工智能 自然语言处理 开发工具
Languine:专为开发者设计的 AI 多语言翻译工具,快速生成100+种语言的准确翻译,简化应用程序的 i18n 国际化配置
Languine 是一款面向开发者的 AI 翻译工具,支持 100+ 种语言,自动化翻译流程,提升多语言应用开发效率。
109 15
Languine:专为开发者设计的 AI 多语言翻译工具,快速生成100+种语言的准确翻译,简化应用程序的 i18n 国际化配置
|
6月前
|
存储 数据挖掘 数据库
探索Python编程:从基础到高级探索移动应用开发之旅:从概念到实现
【8月更文挑战第29天】本文将带你进入Python的世界,无论你是初学者还是有一定经验的开发者。我们将从Python的基础知识开始,然后逐步深入到更复杂的主题。你将学习到如何编写清晰、高效的代码,以及如何使用Python进行数据分析和网络编程。最后,我们将介绍一些高级主题,如装饰器和生成器。让我们一起开始这段旅程吧!
|
4月前
|
存储 测试技术 Android开发
探索安卓应用开发:从基础到高级
【9月更文挑战第31天】在这篇文章中,我们将一起踏上安卓应用开发的旅程。无论你是初学者还是有一定经验的开发者,本文都将为你提供有价值的信息和指导。我们将从安卓应用开发的基础知识开始,逐步深入到更高级的主题。通过阅读本文,你将了解到如何构建一个安卓应用,包括用户界面设计、数据存储和网络通信等方面。此外,我们还将探讨一些高级主题,如性能优化、安全性和测试。让我们一起开始吧!
|
4月前
|
安全 Java 开发工具
掌握安卓应用开发:从基础到高级的全面指南
本文旨在为读者提供一个详尽的指南,帮助他们掌握安卓应用开发的基础知识及高级技巧。从环境搭建到项目实践,逐步深入讲解安卓开发的各个环节。无论是对于刚入门的初学者还是希望进一步提升的开发者,本文都将提供实用的建议和示例代码,帮助你快速上手并提升技能。
|
5月前
|
存储 Java API
深入探索安卓应用开发:从基础到高级
本文将引导读者从安卓应用开发的基础出发,逐步深入到高级技巧和最佳实践。无论是刚入门的新手还是已有一定经验的开发者,都能在本文中找到有价值的内容。通过详细的步骤解析和实用的代码示例,我们将一步步揭示安卓开发的精髓,助你在技术之路上不断进步。
67 0
|
7月前
|
机器学习/深度学习 数据采集 算法
Python编程语言进阶学习:深入探索与高级应用
【7月更文挑战第23天】Python的进阶学习是一个不断探索和实践的过程。通过深入学习高级数据结构、面向对象编程、并发编程、性能优化以及在实际项目中的应用,你将能够更加熟练地运用Python解决复杂问题,并在编程道路上走得更远。记住,理论知识只是基础,真正的成长来自于不断的实践和反思。
|
8月前
|
自然语言处理 图形学
【Unity实战】实现强大通用易扩展的对话系统(附项目源码)
【Unity实战】实现强大通用易扩展的对话系统(附项目源码)(2023/12/26补充更新)
320 0
|
9月前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add&lt;T&gt;`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
64 2
|
9月前
|
Python 容器 机器学习/深度学习
Python语言基础学习大纲(由某大模型生成)
Python语言基础学习大纲(由某大模型生成)
93 0
Python语言基础学习大纲(由某大模型生成)