spring国际化: 从数据库中读取国际化资源

public class MessageResource extends AbstractMessageSource implements ResourceLoaderAware, InitializingBean {
	@SuppressWarnings("unused")
	private ResourceLoader resourceLoader = null;

	@Autowired
	private Sys_resourcesService sys_resourcesService = null;

	private final String MAP_SPLIT_CODE = "|";

    private final Map<String, String> properties = new HashMap<String, String>();

    public MessageResource(){

    }

    @Override
	public void afterPropertiesSet() throws Exception {
        System.out.println("中国大陆:语言:" + Locale.SIMPLIFIED_CHINESE.getLanguage() +", 国家");
        System.out.println("台湾:语言:" + Locale.TAIWAN.getLanguage());
    	properties.clear();
        properties.putAll(loadTexts());
	}

    /**
     * 读取资源信息
     * @return
     */
    private List<Resource> getResource(){
        return sys_resourcesService.findAll();
    }

    /**
     * 加载数据
     * @return
     */
    protected Map<String, String> loadTexts(){
        Map<String, String> mapResource = new HashMap<String, String>();
        List<Resource> resources = this.getResource();
        for (Resource item : resources) {
            String code = item.getRskey() + MAP_SPLIT_CODE + item.getLanguage();
            mapResource.put(code, item.getText());
        }
        System.out.println("国际化资源加载完毕.共"+resources.size()+"条.");
        return mapResource;
    }

    /**
     * 获取文本
     * @param code
     * @param locale 本地化语言
     * @return
     */
    private String getText(String code, Locale locale){
        String localeCode = locale.getLanguage();
        if(localeCode != null && localeCode.toUpperCase().equals(R.lan.ZH)){
        	if(locale.getCountry().toUpperCase().equals(R.lan.CN)){
        		localeCode = R.lan.CN.toLowerCase();
        	}else{
        		localeCode = R.lan.TW.toLowerCase();
        	}
        }
        String key = code + MAP_SPLIT_CODE + localeCode;
        String localeText = properties.get(key);
        String resourceText = code;

        if(localeText != null && !"".equals(localeText)) {
            resourceText = localeText;
        }else{
            localeCode = Locale.ENGLISH.getLanguage();
            key = code + MAP_SPLIT_CODE + localeCode;
            localeText = properties.get(key);
            if(localeText != null && !"".equals(localeText)) {
                resourceText = localeText;
            }else{
                try{
                    if(getParentMessageSource() != null) {
                        resourceText = getParentMessageSource().getMessage(code, null, locale);
                    }
                }catch(Exception e) {
                    logger.error("找不到对应的消息, code: " + code);
                }
            }
        }
        return resourceText;
    }

    @Override
    public void setResourceLoader(ResourceLoader resourceLoader){
        this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader());
    }

    @Override
    protected MessageFormat resolveCode(String code, Locale locale){
        String msg = getText(code, locale);
        MessageFormat result = createMessageFormat(msg, locale);
        return result;
    }

    @Override
    protected String resolveCodeWithoutArguments(String code, Locale locale){
        String result = getText(code, locale);
        return result;
    }
}

  

原文地址:https://www.cnblogs.com/CR1me/p/9875012.html

时间: 2024-11-04 10:49:05

spring国际化: 从数据库中读取国际化资源的相关文章

可以将一些配置信息已json格式存在数据库中读取的时候序列化。

public partial class json序列化 : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            StringBuilder builder = new StringBuilder(); builder.Append("{");            builder.Append("    \"C

[转]asp.net mvc 从数据库中读取图片

本文转自:http://www.cnblogs.com/mayt/archive/2010/05/20/1740358.html 首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下: public class ImageResult : ActionResult { public ImageFormat ContentType { get; set; } public Image image { get; set; } public strin

C#从SQL server数据库中读取l图片和存入图片

原文:C#从SQL server数据库中读取l图片和存入图片 本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类.BinaryReader把图片读成字节的形式,赋给一个字节数组,然后用ADO.SqlCommand对象的ExecuteNonQuery()方法来把数据保存到数据库中.主要代码如下: private void button1_Click(object sender, EventArgs e)

属性器,转换从数据库中读取的状态

[DataMapping("Status", DbType.Int16)]        public System.Int16 Status { get; set; } public string StatusValue        {            get            {                if (Status == 0)                {                    return "审核拒绝";    

从配置文件或数据库中读取信息并缓存

在项目中将一些常用的不变的信息可以缓存起来,这样可以减少内存的使用率,提高性能.比如说就数据库连接的相关信息等,可以用单例模式第一次进行连接的时候将数据库连接的相关信息缓存再单例对象中. 首先建个.properties文件,存放数据库连接信息,内容如下: #数据库配置 driver_class = oracle.jdbc.driver.OracleDriver url= jdbc:oracle:thin:@192.168.20.188:1521:orcl username = qwszpt pa

php将图片保存到mysql数据库及从数据库中读取图片的方法源码 转

php将图片保存到mysql数据库及从数据库中读取图片的方法源码 分类: 网站 2012-03-11 15:25 5059人阅读 评论(0) 收藏 举报 数据库mysqlphpsql serverquerydatabase 一般来讲都是把图片保存到服务器下,然后根据路径读出的,但是有时候出于安全及版权什么的考虑,会把图片保存到mysql的数据库中,然后再读出来,这样的图片点击右键属性,是看不到图片地址的.下面逍遥一生就介绍下如何用php把图片存储到mysql中及如何读出.     MySQL数据

Js实现select联动,option从数据库中读取

待要实现的功能:页面有两个select下拉列表,从第一个select中选择后,在第二个select中出现对应的列表选择,再从第二个select中选择后,在一个text中显示对应的信息.两个select和text的数据全部来自oracle数据库,该功能用js实现. 首先我们先定义两个select和text: <select id="department" style="width: 80px" onChange="selectChange(this.v

纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据

最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概能看懂,发现一个可能大家会感兴趣的东西,他在静态界面中通过js对象就直接调DLL中的方法从数据库中得到数据并通过js加载出来,当时我就瞎了,他的大概过程是: 建立了多个js对象(数据库中一张表对应一个),并为这个对象添加了很多与DLL中对应的方法,比如DLL中有一个对用户表修改用户密码的操作,那他j

JavaWeb中读取文件资源的路径问题 -- 转自新浪博客

在做javaweb开发的时候,我们可能会需要从本地硬盘上读取某一个文件资源,或者修改某一个文件,这个时候就需要先找到这个文件,然后用FileInputStrem等文件字节.字符流来将这个文件读取到内存中,再对其进行修改等的操作.那么在找这个文件的过程中就涉及到一个路径的问题--->怎么正确的找到这个文件呢? 有两种可行的方法:一.绝对硬盘路径:二.相对路径..来来来,我们掰扯一下这两种方法的不同------- 一.硬盘绝对路径 如图,我的E盘下面有个path文件夹,里面有一个1.txt的文件,,