【Spring源码系列- IOC】
本文目录
接口 · IMessageLocalizationService.java
实现类 · IMessageLocalizationServiceImpl.java
【Spring源码】13. 国际化处理initMessageSource()源码解析 中有对于Spring中的国际化代码的介绍,本篇是保姆级的SpringBoot项目中的国际化实践(其实也就是把Spring中的配置文件简化成了SpringBoot中的注解)
来~我们开始这次的保姆级实践教程( ̄∇ ̄)
项目结构
配置类 · MessageI18NConfig.java
package com.aqin.messagelocalization.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import java.util.Locale;
/**
* @Description
* @Author aqin1012 AQin.
* @Date 2022/9/20 1:37 PM
* @Version 1.0
*/
@Configuration
public class MessageI18NConfig {
@Bean
public ResourceBundleMessageSource resourceBundleMessageSource () {
ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource () ;
resourceBundleMessageSource.setBasename ( "classpath:messages/message" ) ;
resourceBundleMessageSource.setDefaultLocale ( Locale.CHINA) ;
return resourceBundleMessageSource;
}
}
接口 · IMessageLocalizationService.java
package com.aqin.messagelocalization.service;
import java.util.Locale;
/**
* @Description
* @Author aqin1012 AQin.
* @Date 2022/9/20 1:37 PM
* @Version 1.0
*/
public interface IMessageLocalizationService {
/**
* 国际化处理
*
* @param code
* @param args
* @param locale
* @return
*/
String getMessage ( String code, Object [] args, Locale locale ) ;
}
实现类 · IMessageLocalizationServiceImpl.java
package com.aqin.messagelocalization.service.impl;
import com.aqin.messagelocalization.service.IMessageLocalizationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.stereotype.Service;
import java.util.Locale;
/**
* @Description
* @Author aqin1012 AQin.
* @Date 2022/9/20 2:10 PM
* @Version 1.0
*/
@Service
public class IMessageLocalizationServiceImpl implements IMessageLocalizationService {
@Autowired
ResourceBundleMessageSource resourceBundleMessageSource;
@Override
public String getMessage ( String code, Object [] args, Locale locale ) {
System.out.println ( "IMessageLocalizationServiceImpl-getMessage()" ) ;
try {
return resourceBundleMessageSource.getMessage ( code, args, locale ) ;
} catch ( Exception e ) {
System.out.println ( e.getMessage ()) ;
}
return null;
}
}
测试类 · TestI18N.java
package com.aqin.messagelocalization.service;
import com.aqin.messagelocalization.service.impl.IMessageLocalizationServiceImpl;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ResourceBundleMessageSource;
import java.util.Locale;
/**
* @Description
* @Author aqin1012 AQin.
* @Date 2022/9/20 2:26 PM
* @Version 1.0
*/
public class TestI18N {
@Test
public void testPrint () throws IllegalAccessException {
IMessageLocalizationService iMessageLocalizationService = new IMessageLocalizationServiceImpl () ;
ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource () ;
resourceBundleMessageSource.setBasename ( "messages/message" ) ;
// field replace
FieldUtils.writeField( iMessageLocalizationService, "resourceBundleMessageSource", resourceBundleMessageSource, true ) ;
System.out.println ( iMessageLocalizationService.getMessage ( "AQIN_TEST", null, Locale.CHINA)) ;
System.out.println ( iMessageLocalizationService.getMessage ( "AQIN_TEST", null, Locale.US)) ;
}
}
配置文件
message.properties
AQIN_TEST=test
message_en_US.properties
AQIN_TEST=test
message_zh_CN.properties
AQIN_TEST=\u6d4b\u8bd5
\u6d4b\u8bd5
是“测试”经过Unicode编码后的结果
推荐一个在线转换的网站:
测试结果
总结
值得一提的是下面这行
FieldUtils.writeField( iMessageLocalizationService, "resourceBundleMessageSource", resourceBundleMessageSource, true ) ;
这行的作用把iMessageLocalizationService
(第1个参数)中的名为"resourceBundleMessageSource"
(第2个参数)的参数用resourceBundleMessageSource
(第3个参数)对象替换掉, 第4个参数是一个布尔类型,表示是否使用reflect.AccessibleObject.setAccessible(boolean)
方法打破范围限制。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135394.html