博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【小技巧】spring-MVC在controller层获取国际化文件信息
阅读量:6069 次
发布时间:2019-06-20

本文共 2940 字,大约阅读时间需要 9 分钟。

hot3.png

A.MessageSource的体系结构:

这里写图片描述 

【HierarchicalMessageSource接口】 
添加了两个方法,建立父子层级的MessageSource结构。该接口的setParentMessageSource (..)方法用于设置父MessageSource,而getParentMessageSource()方法用于返回父MessageSource。

【ResourceBundleMessageSource和ReloadableResourceBundleMessageSource】 

它们基于Java的ResourceBundle基础类实现,可以通过资源名加载国际化资源。ReloadableResourceBundleMessageSource提供了定时刷新功能,允许在不重启系统的情况下,更新资源的信息。StaticMessageSource主要用于程序测试,它允许通过编程的方式提供国际化信息。而DelegatingMessageSource是为方便操作父MessageSource而提供的代理类。

使用示例

ResourceBundleMessageSource,结合了JDK中ResourceBundle和MessageFormat的功能

示例:

国际化文件:msg_en_us.properties

# 国际化文件 msg_en_us.propertiesdescription=He is {0},He has {1,number,currency}

 controller代码示例:

ResourceBundleMessageSource source = new ResourceBundleMessageSource();// 国际化文件地址source.setBasename("msg");String result=source.getMessage("description", new Object[]{19, 12.34}, Locale.US);System.out.println(result);// ====输出===He is 19,He has $12.34

B.MessageSource接口定义:

public interface MessageSource {     //code表示国际化资源中的属性名;args用于传递格式化串占位符所用的运行期参数;     //当在资源找不到对应属性名时,返回defaultMessage参数所指定的默认信息;     //locale表示本地化对象;    String getMessage(String code, Object[] args, String defaultMessage, Locale locale);    //与上面的方法类似,只不过在找不到资源中对应的属性名时,    //直接抛出NoSuchMessageException异常;    String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException;    //将属性名、参数数组以及默认信息封装起来,它的功能和第一个接口方法相同。    String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;}

C.封装工具类方法

import org.springframework.context.support.ResourceBundleMessageSource;import java.util.Locale;/** * 用户信息相关工具类 * * @author Weijuer * @create 2018-01-15 11:02 */public class MessageSourceUtils {    // 日志    private static final String tag = MessageSourceUtils.class.getName();    /**     * 获取国际化文件中国际化字段信息     * @param key     * @param args     * @return     */    public static String getMessageByKey(String key, Object[] args) {        // 读取国际化文件        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();        // 国际化文件位置        messageSource.setBasename("messages");        String result = "";        try {            // 获取默认国际化标识            Locale locale = LocaleContextHolder.getLocale();            System.out.println("locale:===>" + locale);            LogUtil.i(tag, "MessageSourceUtils #getMessageByKey ~getMessage @start $key:===>" + key);            LogUtil.i(tag, "MessageSourceUtils #getMessageByKey ~getMessage @start $locale:===>" + locale);            // 获取国际化key-value            result = messageSource.getMessage(key, args, "暂无国际化", locale);            LogUtil.i(tag, "MessageSourceUtils #getMessageByKey ~getMessage @end $result:===>" + result);        } catch (Exception e) {            e.printStackTrace();            LogUtil.i(tag, "MessageSourceUtils #getMessageByKey ~getMessage @error $error:===>" + e.getMessage());        }        return result;    }}

 

转载于:https://my.oschina.net/weijuer/blog/1813462

你可能感兴趣的文章
java String转Date问题
查看>>
[华为机试练习题]26.铁路栈问题
查看>>
Android popupWindow打造一个扩展性强的的抽象BasePopup类
查看>>
一分钟了解阿里云产品:数据集成概述
查看>>
HTML5贪吃蛇源码
查看>>
容器环境下的持续集成最佳实践:构建基于 Drone + GitFlow + K8s 的云原生语义化 CI 工作流...
查看>>
[架构基本功]Parcelable序列化
查看>>
kotlin 协程
查看>>
CentOS 搭建 Socks5 Proxy 代理服务器
查看>>
小程序开发-mpvue构建小程序项目-1-踩坑
查看>>
[知识图谱] 3.3-Cypher语言及语法使用
查看>>
CSS重构
查看>>
iOS开发小知识之正则表达式的简单用法
查看>>
【毕设进行时-工业大数据,数据挖掘】Java Batch数据库写入百万条记录!时间减半...
查看>>
From BIO to NIO —— NIO source code interpretation 2
查看>>
[译] 为什么你的应用需要对各种尺寸屏幕做适配优化?
查看>>
React学习手册-React运行机制笔记(二)
查看>>
angular7.0使用指南
查看>>
php 永中office在线预览
查看>>
云效专访:阿里技术人的第一节课
查看>>