网上有很多Spring国际化的样例,但是缺少详细的样例。特别是国外网上很多是Spring MVC(Web)之类的样例,而国内稍具规模的软件开发组织都采用前后端分离的模式,所以几乎很少有易于模仿的 纯基础Spring国际化 样例。
1. 创建 Spring Boot 工程
1.1 Maven依赖
此示例以Command Line方式运行,所以依赖 spring-boot-starter,而不是 spring-boot-starter-web。
本人非常讨厌 Spring官网那种 “直接” “仅” 提供Web服务样例的入门示例!
我觉得入门就该从最简单基础的模式开始,“直接从Web服务开始”不利于新手学习。
<parent> <groudId>org.sprinframework.boot</gourpId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies>
1.2 主方法
package org.sample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Main { public static void main(String[] args){ SpringApplication.run(Main.class); } }
2. 添加国际化数据文件
国际化数据文件一般都放在 classpath 路径下。
例:(我使用的是IDEA)
-
messages.properties 是默认数据源文件。
该文件必须存在,否则 Spring Boot(MessageSourceAutoConfiguration)无法自动配置。
ResourceBundleCondition会检查 messages.properties 是否存在。如果不存在,则MessageSourceAutoConfiguration 这个Bean不会被创建,MessageSource这个Bean也就不会被创建。
当然,我们也可以比较hack的方式绕过这个检查。 - messages_en.properties 是默认的英文数据源文件。
-
messages_en_US.properties 是美式英文的数据源文件。
当Spring无法从该文件找到对应数据时,会自动从messages_en.properties 中找;如果还是未找到,则从 messages.properties 中找。(其它区域语言类似)
- messages_zh_CN.properties 是简体中文数据源文件。
- messages_zh_TW.properties 是繁体中文数据源文件。
数据源内容示例:
greeting=Hello, {0}!
等号“=”前是数据条目的代号;等号后是数据条目的内容;“{0}”是一个占位符,我们可以用该数据条目和指定的数据动态组装出一条消息(类似 String.format 方法)
注意:
- 上述文件名中的下划线是非常关键的一部分,它会被用于拼接 数据源文件 的路径。
- Spring Boot (MessageSourceProperties)默认的数据源文件编码格式为 UTF-8。如果你的数据源文件时其它编码格式,如 GBK,那就可能出现乱码。
3. 指定国际化数据文件路径
在Spring Boot的默认配置文件 application.yml 中配置:
spring: messages: basename: i18n/messages
basename 会用于拼接 数据源文件 的路径。
如果想让 Spring Boot 自动载入新的数据源文件,则可以配置 cache-duration 来指定缓存有效时间(与 basename 同级)。
例 cache-duration:30m 表示有效期为30分钟,超过该有效期后,Spring Boot 将重新读取数据源文件。
4. 使用国际化数据
package org.sample; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.context.MessageSource; import org.springframework.stereotype.Component; import java.util.Locale; @Component public class Sample implements CommandLineRunner { @Autowired private MessageSource messageSource; @Override public void run(String... args) throws Exception { String name = "赵钱孙"; String code = "greeting"; Object[] data = new Object[]{name}; String enHello = messageSource.getMessage(code, data, Locale.ENGLISH); String usHello = messageSource.getMessage(code, data, Locale.US); String cnHello = messageSource.getMessage(code, data, Locale.SIMPLIFIED_CHINESE); String twHello = messageSource.getMessage(code, data, Locale.TRADITIONAL_CHINESE); } }
MessageSource 有三个 getMessage 方法。可根据项目需求,自行选择。
5. 我不要默认的 messages.properties !!!
很多情况下,我们都希望用 code 来代码未配置的message。
这可通过application.yml中设置 spring.messages.use-code-as-default-message 为 true 来实现。
这种情况下,messages.properties 就等同于一个空文件,因为其中的内容不会被使用。
如果你嫌空文件碍事、不顺眼,可将其删除,并以一种较为hack的方式来绕过Spring Boot对此文件(messages.properties)必须存在的限定。
具体方法就是创建一个自定的配置类,它继承自 MessageSourceAutoConfiguration,但是去除了 Condition注解。例:
@Configuration @ConditionalOnMissingBean(value = MessageSource.class, search = SearchStrategy.CURRENT) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @EnableConfigurationProperties public class MessageSourceConfig extends MessageSourceAutoConfiguration { }
注意:这种hack方式显然是存在更多Spring Boot新老版本不兼容的风险。自行取舍吧。
相关推荐
本项目“基于i18n国际化微服务统一处理错误码”就是针对这一需求而设计的。通过结合SpringBoot框架和i18n(国际化)技术,我们可以实现错误信息的多语言支持,让错误信息能够适应不同的用户群体。 首先,让我们来...
Spring Boot的国际化(i18n)配置是其强大功能的一部分,它允许开发人员为不同地区的用户提供本地化的应用体验。这个“Spring Boot 国际化(i18n)配置demo.zip”包含了一个演示如何在Spring Boot项目中实现i18n的示例...
Spring i18n,全称为“Spring 国际化”,是Spring框架提供的一个强大的功能,用于支持多语言环境的应用程序开发。它使开发者能够轻松地为不同地区的用户提供本地化的界面和信息,从而提升应用程序的全球适用性。在...
Spring Boot的国际化(i18n)功能使得开发者可以轻松地为应用程序提供多语言支持,以便用户可以根据他们的偏好选择不同的语言界面。以下是对这个主题的详细讲解。 首先,我们需要了解i18n这个术语,它是...
8. **Spring框架的i18n支持**:Spring框架提供了一套完整的国际化解决方案,包括使用`MessageSource`接口获取国际化消息,以及在MVC环境中自动处理请求的locale。 9. **Apache Commons I18N库**:这是一个强大的...
在IT行业中,国际化(i18n)是一种技术,它允许软件产品和服务适应不同地区和语言的需求。Spring MVC作为Java Web开发中的一个强大框架,提供了支持i18n的机制。结合Freemarker模板引擎,我们可以构建出具有多语言功能...
Spring Boot + Beetl + i18n 国际化处理方法 Spring Boot 是一款流行的 Java 应用程序框架,Beetl 是一个高性能的模板引擎,而 i18n 是国际化的缩写,表示设计和制造容易适应不同区域要求的产品的一种方式。本文将...
优雅集成i18n实现国际化信息返回是SpringBoot框架中一个重要的功能,它使得应用程序能够支持多语言环境,为全球用户提供更加友好的交互体验。在SpringBoot中,i18n(Internationalization)通常通过资源文件来实现,...
Spring MVC的国际化(i18n)是基于Java的国际化机制构建的,它利用Resource Bundle加载对应国家/地区(Locale)的语言资源文件,以便根据用户的语言环境提供相应的信息。Spring MVC通过`ResourceBundleMessageSource...
本项目为基于数据库驱动的Spring Boot国际化组件设计源码,共包含51个文件,涵盖32个Java源文件、7个XML配置文件、7个属性文件以及其他几种类型的文件。该组件支持多语言功能,以Java为主要编程语言。
标题 "springmvc i18n" 指的是Spring MVC框架中的国际化支持,这是一个关键功能,使得Web应用程序能够为不同的地区和语言提供本地化的用户体验。Spring MVC是Spring框架的一个模块,专注于处理HTTP请求和响应,提供...
SpringBoot 提供了一个快速构建和配置 Spring 应用的框架,Beetl 是一个强大的模板引擎,而 i18n(国际化)则是处理多语言支持的关键。接下来,我们将深入探讨这三个组件以及如何在实际项目中结合使用。 **...
然而,在使用 Spring Boot 时,遇到中文乱码问题的可能性很高,特别是在使用 i18n 进行国际化设置时。 Properties 文件是 Spring Boot 中用于存储配置信息的文件类型之一。在使用 i18n 时,通常需要在 properties ...
Java Spring项目国际化(i18n)详细方法与实例 Java Spring项目国际化是指在Java Spring项目中实现多语言支持和本地化信息的配置。国际化的目的是为了让软件系统能够适应不同的语言和地区环境,使得软件系统具有全球...
在本章中,我们将深入探讨Spring MVC框架中的国际化支持,简称i18n。这个功能使得应用程序能够根据用户的地域设置显示不同的语言内容,为全球用户提供更友好的用户体验。Spring MVC通过资源绑定和消息源机制实现了这...
**SpringMvc i18n(国际化)Demo** 在Web开发中,为了使应用程序能够适应不同国家和地区的用户,实现多语言支持是至关重要的。SpringMvc框架提供了强大的国际化(i18n)功能,允许开发者轻松地根据用户的语言环境来...
Spring框架和其它库也提供了对I18N更高级的支持,如国际化消息源的自动配置和管理。 总的来说,Java的I18N功能强大且灵活,能够帮助开发者构建全球化应用程序,满足不同地区用户的需求。通过熟练掌握资源包、Locale...
我的博客中的《Spring MVC、hibernate validator和i18n》文章描述的项目的源代码,该文是对Spring mvc, validation和i18n的一个入门级的tutorial。我的博客地址是http://blog.csdn.net/zjysource
在现代Web应用开发中,国际化(i18n)是一个关键的考虑因素,因为它允许程序与世界各地的用户进行有效的沟通。i18nTools结合了多种技术,如Struts、JSP和Spring,这些是Java Web开发中的核心框架。 Struts是一个...
国际化(internationalization),又称为i18n(因为这个单词从i到n有18个英文字母,因此命名)。对于某些应用系统而言,它需要发布到不同的国家地区,因此需要特殊的做法来支持,也即是国际化。通过国际化的方式,...