Java语言国际化代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28666081/article/details/88596819

参考教程:https://www.cnblogs.com/jingmoxukong/p/5146027.html

1 解决思路:

客户端选择语言,然后将其加入cookie中传过来解析并切换语言包即可。主要用的是Locale和ResourceBundle类

2 首先编写拦截器中的拦截代码如下:

// 解析当前cookie,根据cookie处理当前语言包

Cookie[] cookies = httpServletRequest.getCookies();

if (cookies != null && cookies.length > 0) {

    for (Cookie item : cookies) {

        if ("Abp.Localization.CultureName".equals(item.getName())) {  //从cookie中取出当前语言的类型

扫描二维码关注公众号,回复: 5888653 查看本文章

            //en_US、zh_CN

            // 根据类型设置好当前的语言包

            LangUtil.setLang(item.getValue(), custHttpServletRequest);

        }

    }

}

// 如果當前沒有設置,默認設置為中文語言包

if (custHttpServletRequest.getParameter("lang") == null) {

    custHttpServletRequest.setParameter("lang.language", "zh");

    custHttpServletRequest.setParameter("lang.country", "CN");

}

思路:获取cookie中的Abp.Localization.CultureName,并解析出后设置到request请求中。如果没有当前cookie,默认会设置为中文

3 编写对应的语言包工具类

/**

* 国际化语言工具包

* 用法:LangUtil.LANG.getString("helloWorld")

*/

public class LangUtil {

    /**

     * 设置语言包

     * @param cookieVal [如zh_CN]

     */

    public static void setLang(String cookieVal, CustHttpServletRequest custHttpServletRequest) {

        // 解析cookieVal

        if ("".equals(cookieVal) || !cookieVal.contains("-"))  //cookie不合法的情况下

            return;

        // 解析cookieVal

        String[] langArr = cookieVal.split("-");

        String language = langArr[0];

        String country = langArr[1];

        LangEnum langEnum = LangEnum.getEnum(language, country);

        if (langEnum == null) return;

        // 将当前语言包配置到本次request请求中

        custHttpServletRequest.setParameter("lang.language", language);

        custHttpServletRequest.setParameter("lang.country", country);

    }

    /**

     * 获取语言包

     * @param request 本次请求

     * @return 返回对应语言包

     */

    public static ResourceBundle getLang(HttpServletRequest request) {

        String language = request.getParameter("lang.language");

        String country = request.getParameter("lang.country");

        Locale locale = new Locale(language, country);

        return ResourceBundle.getBundle("lang.content", locale);

    }

}

思路:getLang、setLang方法解析cookie信息,并设置到request请求中

4 编写对应的枚举类LangEnum.java如下

/**

* 国际化语言包枚举类

*/

public enum LangEnum {

    // US en

    LANG_EN_US("en", "US"),

    // CN zh

    LANG_ZH_CN("zh", "CN");

    // 语言

    private String language;

    // 国家

    private String country;

    LangEnum(String language, String country) {

        this.language = language;

        this.country = country;

    }

    /**

     * 返回循环迭代列表

     * @return 返回循环迭代列表

     */

    public static List toList() {

        List list = new ArrayList();   //Lists.newArrayList()其实和new ArrayList()几乎一模

        for (LangEnum item : LangEnum.values()) {

            Map<String, Object> map = new HashMap<>();

            map.put("language", item.getLanguage());

            map.put("country", item.getCountry());

            list.add(map);

        }

        return list;

    }

    /**

     * 获取对应enum

     * @return enum

     */

    public static LangEnum getEnum(String language, String country) {

        for (LangEnum item : LangEnum.values()) {

            if (language.equals(item.getLanguage()) && country.equals(item.getCountry())) return item;

        }

        return null;

    }

    public String getLanguage() {

        return language;

    }

    public String getCountry() {

        return country;

    }

}

5 编写对应语言包的配置文件如下:

content_en_US.properties、content_en_US.properties

# 英文语言包

helloWorld = HelloWorld!

------------------------------------

# 中文语言包,需要将中文转为unicode编码,转换工具:http://tool.chinaz.com/tools/unicode.aspx

#世界,你好!

helloWorld = \u4e16\u754c\uff0c\u4f60\u597d\u0021

猜你喜欢

转载自blog.csdn.net/qq_28666081/article/details/88596819
今日推荐