Spring MVC国际化,动态设置默认语言

来源:互联网 发布:淘宝收货地址怎么改 编辑:程序博客网 时间:2024/06/06 05:47

0.首先将需要国际化的固定文本放到properties文件里,如下图所示:


1.applicationContext.xml里加如下代码,即将resourceBundleMessageSource类加入到spring的容器里

<bean id="resourceBundleMessageSource" class="org.springframework.context.support.ResourceBundleMessageSource">    <property name="basenames">        <list>            <value>i18n/myproperties</value>        </list>    </property></bean>

2.在需要做国际化的controller里进行注入

@Autowiredprotected ResourceBundleMessageSource resourceBundleMessageSource;

3.写一个通用的方法

    Locale cn = Locale.CHINA;//中文zh_CN
    Locale us = Locale.US;//英文en_US
    Locale us = Locale.TAIWAN;//繁体zh_TW

//对固定文本实现国际化的方法public  String getKeyByLang(String key,String lang) {    //String keyByLang = this.getKeyByLang("username", "zh_TW");    if ("zh_CN".equals(lang)) {        return resourceBundleMessageSource.getMessage(key, null, Locale.CHINA);    }else if ("en_US".equals(lang)) {        return resourceBundleMessageSource.getMessage(key, null, Locale.US);    }else {        return resourceBundleMessageSource.getMessage(key, null, Locale.TAIWAN);    }}
4.调用

传入需要国际化的key(如username),和lang(如en_US),就可以动态获取相应的语言

String keyByLang = this.getKeyByLang("username", "en_US");


public class test {
    public static void main(String[] args) {
        //资源包基名(包名+myproperties)
        String basename = "i18n.myproperties";
        //设置语言环境
        Locale cn = new Locale("zh", "CN");
        Locale us = new Locale("en", "US");
        Locale tw = new Locale("zh", "TW");
        //Locale cn = Locale.CHINA;//中文
        //Locale us = Locale.US;//英文
        //Locale us = Locale.TAIWAN;//英文
        //根据基名和语言环境加载对应的语言资源文件
        //System.out.println(us.getLanguage());//zh en
        //System.out.println(us.getCountry());//CN US
        ResourceBundle myResourcesCN = ResourceBundle.getBundle(basename,cn);//加载myproperties_zh.properties
        ResourceBundle myResourcesUS = ResourceBundle.getBundle(basename,us);//加载myproperties_en.properties
        ResourceBundle myResourcesTW = ResourceBundle.getBundle(basename,tw);//加载myproperties_tw.properties
        String usernameCN = myResourcesCN.getString("username");
        String usernameTW = myResourcesTW.getString("username");
        //加载资源文件后, 程序就可以调用ResourceBundle实例对象的 getString方法获取指定的资源信息名称所对应的值。
        String usernameUS = myResourcesUS.getString("username");

    }
}