Spring 读取i18n国际化资源文件的工具类

现有一个国际化资源文件demoUser_zh_CN.properties如下:

demoUser.create.success=创建成功
demoUser.update.success=更新成功
demoUser.delete.success=删除成功
demoUser.start.success=送审成功
demoUser.approval.success=审核成功
demoUser.claim.success=签收成功
demoUser.assignUser.success=分配成功
demoUser.backNode.success=回退成功
demoUser.resolve.success=处理成功
demoUser.assign.success=转办成功
demoUser.signal.success=流转成功
现在我们需要在程序中根据key读取相应的value,因此现在我们写一个加载i18n文件的工具类,以便我们进行操作,此工具类是基于Spring Framework来编写的,具体的代码如下:

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;



public class MessageUtil{
	
	protected static MessageSourceAccessor accessor;
	protected static MessageSource messageSource;
	protected static Set<String> set = new HashSet<String>();
	private static int defaultStatus = 1;
	static ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
        //静态块初始化资源
	static{
		addLocation("classpath*:i18n/*");
	}
	//初始化资源文件的存储器
	protected static void initMessageSourceAccessor(){
		String[]basenames = new String[set.size()];
		set.toArray(basenames);
		ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
		reloadableResourceBundleMessageSource.setBasenames(basenames);
		reloadableResourceBundleMessageSource.setCacheSeconds(5);
		accessor = new MessageSourceAccessor(reloadableResourceBundleMessageSource);
		messageSource = reloadableResourceBundleMessageSource;
	}
	//删除指定位置的资源
	public static void removeLocation(String locationPattern){
		try {
			Resource[] resources = resourcePatternResolver.getResources(locationPattern);
			for (int i = 0; i < resources.length; i++) {
				String url = resources[i].getURL().toString();
				int lastIndex = url.lastIndexOf("/");
				String prefix = url.substring(0,lastIndex + 1);
				String suffix = url.substring(lastIndex+1);
				suffix = suffix.split("\\.")[0].split("_")[0];
				set.remove(prefix + suffix);
			}
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		initMessageSourceAccessor();
	}
	//加载指定位置的资源文件
	public static void addLocation(String locationPattern){
		try {
			Resource[] resources = resourcePatternResolver.getResources(locationPattern);
			for (int i = 0; i < resources.length; i++) {
				String url = resources[i].getURL().toString();
				int lastIndex = url.lastIndexOf("/");
				String prefix = url.substring(0,lastIndex + 1);
				String suffix = url.substring(lastIndex+1);
				suffix = suffix.split("\\.")[0].split("_")[0];
				set.add(prefix + suffix);
			}
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		initMessageSourceAccessor();
	}
	
	private MessageUtil(){
	}

	public static Message message(int status,String code,Object[] args,Object data){
		return new Message(status, getMessage(code,args), data);
	}
	
	public static Message message(int status,String code,Object data){
		return new Message(status, getMessage(code), data);
	}
	
	public static Message message(int status,String code,Object[] args){
		return new Message(status, getMessage(code,args));
	}
	
	public static Message message(int status, String code) {
		return new Message(status, getMessage(code));
	}
	
	public static Message message(int status,Object data){
		return new Message(status,"1",data);
	}
	
	public static Message message(String code){
		return new Message(defaultStatus, getMessage(code));
	}
	
	public static Message message(String code,Object[] args){
		return new Message(defaultStatus, getMessage(code, args));
	}
	
	public static Message message(String code,Object[] args,Object data){
		return new Message(defaultStatus, getMessage(code, args), data);
	}
	
	public static Message message(String code,Object data){
		return new Message(defaultStatus, getMessage(code), data);
	}
	
	public static String getMessage(String code){
		return accessor.getMessage(code,LocaleContextHolder.getLocale());
	}
	
	public static String getMessage(String code,String defaultMessage){
		return accessor.getMessage(code,defaultMessage,LocaleContextHolder.getLocale());
	}
	
	public static String getMessage(String code, Object[] args){
		return accessor.getMessage(code,args,LocaleContextHolder.getLocale());
	}
	
	public static String getMessage(String code, Object[] args,String defaultMessage){
		return accessor.getMessage(code, args, defaultMessage, LocaleContextHolder.getLocale());
	}

	public static MessageSource getMessageSource() {
		return messageSource;
	}

}

具体使用:

      //新增
	@RequestMapping(method = RequestMethod.POST)
	public @ResponseBody Message create(DemoUser demoUser){
		demoUser.setProcessState(ProcessBizEngineService.PROCESS_NEW_STATE);
		demoUserService.save(demoUser);
		return MessageUtil.message("demoUser.create.success");
	}
	



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Springi18n国际化功能可以通过配置properties源文件来实现。通常,我们会在src/main/resources目录下创建一个i18n文件夹,并在其中创建各类语言的properties源文件,例如i18n/messages.properties、i18n/messages_en_US.properties、i18n/messages_zh_CN.properties等。\[1\] 在配置文件中,我们可以使用yaml格式进行配置。例如,可以使用spring.messages.basename属性来指定properties文件的路径,如spring.messages.basename: i18n.login。这样,Spring就会根据配置的路径去读取相应的国际化源文件。\[2\] 另外,如果你在前端使用jQuery,你也可以使用jQuery.i18n.properties插件来实现国际化。该插件可以根据用户指定的语言和国家编码来解析对应的.properties源文件,从而实现前端的国际化功能。\[3\] #### 引用[.reference_title] - *1* [springi18n国际化处理多语言](https://blog.csdn.net/shenyunsese/article/details/128326378)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringBoot -> 国际化(i18n)](https://blog.csdn.net/rod0320/article/details/110086280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Spring国际化i18n](https://blog.csdn.net/daobuxinzi/article/details/127982064)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值