2025年java i18n 国际化_springboot-i18n国际化

java i18n 国际化_springboot-i18n国际化简介 术语 i18n internationa 英 nt n n la ze n 国际化 由于首字母 i 和末尾字母 n 间有 18 个字符 所以简称 i18n

大家好,我是讯享网,很高兴认识大家。

简介

术语

i18n

internationalization 英 [ˌɪntəˌnæʃnəlaɪ'zeɪʃn] ,国际化。

由于首字母"i"和末尾字母"n"间有18个字符,所以简称i18n。

internationalization指为了使应用程序能适应不同的语言和地区间的变化而不作系统性的变化所采取的设计措施。

l10n

localization, 本地化。

由于首字母"l"和末尾字母"n"间有10个字母,所以简称l10n。 localization指为了使应用软件能够在某一特定语言环境或地区使用而加入本地特殊化部件和翻译后文本的过程。

locale: 指语言和区域进行特殊组合的一个标志

一般语言_地区可以确定一个特定类型的本地化信息。

基名_语言_地区.properties

语言由两个小写字母表示,具体代码是由ISO-639标准定义。

地区由两个大写字母表示,由ISO-3166标准定义的。

基名,basename,一般是业务代码。例如:ValidationLogin.properties

常用配置:

i18n_zh_CN.properties:中国大陆的,中文语言的资源

i18n_en_US.properties:美国地区,英文语言的资源

i18n.properties:默认资源文件,如果请求相应的资源文件不存在,将使用此资源文件

JDK的支持

java.util.Local

SpringBoot的支持

org.springframework.context.MessageSource public interface MessageSource {

String getMessage(String var1, Object[] var2, String var3, Locale var4);

String getMessage(String var1, Object[] var2, Locale var3) throws NoSuchMessageException;

String getMessage(MessageSourceResolvable var1, Locale var2) throws NoSuchMessageException;

}

org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration

org.springframework.context.support.AbstractApplicationContext#initMessageSource

了解这些类,对问题排查会有帮助。

实战

SpringBoot提供两种配置方式。

Java配置

重新定义org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration#messageSource中的bean。

@Bean


讯享网

public MessageSource messageSource() {

ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();

messageSource.setBasename("i18n");

messageSource.setDefaultEncoding("UTF-8");

return messageSource;

}

application配置

spring.messages.basename=i18n

org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration#messageSource 根据配置文件,自动创建beanmessageSource.

207bf0e7df7065e4358f15cf9cc9b278.png

075a728807384fc951d2c4a140ebdf27.png

代码演示

文件配置: email.server=mail.163.com

6ac8051fa64893eefde8dec8c67b5daf.png

RestController

@RestController

public class MessageSourceTestController {

@Autowired

private MessageSource messageSource;

@GetMapping("/mail")

public String getUsers() {

return messageSource.getMessage("email.server", null, Locale.CHINA);

}

}

请求接口,获取配置文件中的值。

924d650321e50fcc8ad1f117056c2616.png

遇到的问题

接手一个老项目,restful框架还是自研的,切换为springboot框架后,国际化配置遇到些问题。

整理如下。

MessageSource null

org.springframework.context.support.AbstractApplicationContext#initMessageSource,初始化时,没有检测到messageSourceBean,会默认提供一个空的实现DelegatingMessageSource。

7e7990dba8f8676049a472d6157ccaec.png

解决办法,直接实例化,一个bean。参考上文java配置

@ConditionalOnMissingBean (types: org.springframework.context.MessageSource; SearchStrategy: current) did not find any beans (OnBeanCondition)

参考

小讯
上一篇 2025-01-14 08:58
下一篇 2025-01-17 19:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54684.html