i18n实现 html、js、java后端 国际化翻译

一、HTML页面的国际化翻译
1.配置类

/**
 * 描述:
 * i18n配置类
 * @author 闲走天涯
 * @date 2018/8/118:34
 */
@Slf4j
@Configuration
public class I18nConfiguration {

    @Value("${i18n.default.lang:zh_CN}")
    private String default_lang;//国际化翻译默认语言

    @Bean(name="localeResolver")
    public LocaleResolver localeResolverBean() {
        log.info("default_lang="+default_lang);
        SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
        if("zh_CN".equals(default_lang)){
            //代码中即可通过以下方法进行语言设置
            sessionLocaleResolver.setDefaultLocale(Locale.CHINA);  // 默认中文环境
        }else if("en_US".equals(default_lang)){
            //代码中即可通过以下方法进行语言设置
            sessionLocaleResolver.setDefaultLocale(Locale.US);  // 默认英语环境
        }else if("ko_KR".equals(default_lang)){
            //代码中即可通过以下方法进行语言设置
            sessionLocaleResolver.setDefaultLocale(Locale.KOREA);  // 默认韩文环境
        }else if("ar_SA".equals(default_lang)){
            //代码中即可通过以下方法进行语言设置
            sessionLocaleResolver.setDefaultLocale(new Locale("ar","SA"));  // 默认沙特阿拉伯文环境
        }else if("pt_BR".equals(default_lang)){
            //代码中即可通过以下方法进行语言设置
            sessionLocaleResolver.setDefaultLocale(new Locale("pt","BR"));  // 默认巴西葡萄牙文
        }else{
            sessionLocaleResolver.setDefaultLocale(Locale.CHINA);  //默认中文环境
        }
        return sessionLocaleResolver;
    }
    @Bean
    public ResourceBundleMessageSource messageSource(){
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setUseCodeAsDefaultMessage(true);
        messageSource.setFallbackToSystemLocale(false);
        messageSource.setBasenames("message");
        //messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(1);
        return messageSource;

    }
}

2、国际化翻译控制接口

/**
 * 描述:
 * 国际化翻译控制接口
 * @author 闲走天涯
 * @date 2018/8/39:58
 */
@Controller
public class I18nController {

    @Value("${i18n.default.lang:zh_CN}")
    private String default_lang;//国际化翻译默认语言
	/**
     * 存入上下文session 属性
     * @param request
     * @param lang
     * @return
     */
    @RequestMapping("/changeSessionLanauage")
    @ResponseBody
    public String changeSessionLanauage(HttpServletRequest request, String lang){
        System.out.println(lang);
        if(!VerifyData.strIsNotNull(lang)){
            lang = "zh_CN";
        }
        SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
       if("zh_CN".equals(lang)){
            //代码中即可通过以下方法进行语言设置
            request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,new Locale("zh","CN"));
            sessionLocaleResolver.setDefaultLocale(new Locale("zh","CN"));  
        }else if("en_US".equals(lang)){
            //代码中即可通过以下方法进行语言设置
            request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,new Locale("en","US"));
            sessionLocaleResolver.setDefaultLocale(new Locale("en","US"));
        }else if("ko_KR".equals(lang)){
            //代码中即可通过以下方法进行语言设置
            request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,new Locale("ko","KR"));
            sessionLocaleResolver.setDefaultLocale(new Locale("ko","KR"));
       }else if("ar_SA".equals(lang)){
           //代码中即可通过以下方法进行语言设置
           request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,new Locale("ar","SA"));
           sessionLocaleResolver.setDefaultLocale(new Locale("ar","SA"));
       }else if("pt_BR".equals(lang)){
           //代码中即可通过以下方法进行语言设置
           request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,new Locale("pt","BR"));
           sessionLocaleResolver.setDefaultLocale(new Locale("pt","BR"));
        }else{
            request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,new Locale("zh","CN"));
            sessionLocaleResolver.setDefaultLocale(new Locale("zh","CN"));
        }
        return "successs";
    }

    /**
     * 获取国际化翻译默认语言
     * @param request
     * @return
     */
    @RequestMapping("/basic/getSessionLang")
    @ResponseBody
    public Map getSessionLang(HttpServletRequest request){
        Map result = new HashMap();
        result.put("code",1);
        Object obj = null;
        try {
            obj = request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
            if(obj==null){
                obj = default_lang;
            }

            System.out.println("obj=" + obj);
            String lang = String.valueOf(obj);
            if(VerifyData.strIsNotNull(lang)){
                result.put("code",3);
                result.put("js_lang",lang.substring(0,2));
                result.put("lang",lang);
                result.put("default_lang",default_lang);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }
}

3、ajax请求国际化翻译接口

$.ajax({
    type: "POST",
    url: "/changeSessionLanauage",
    data: {lang: lang},
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true,
    success: function(backData) {
    	console.log(backData);
        history.go(0);
    },
    error: function(){
        layer.msg("请求错误");
    }
});

4.资源文件位置路径/resources

在这里插入图片描述
message_zh_CN.properties文件内格式为

HomePage =  首页
UserManagement = 用户管理
OrderManagement = 订单管理

idea 创建i18n翻译文件
在这里插入图片描述二、js 的翻译1.页面需要引入文件
i18n js文件下载链接 https://download.csdn.net/download/qq_36992948/21895216

<script src="../../js/jquery-2.0.2.min.js"></script>
<script src="/i18n/jquery.i18n.properties.js"></script>

2.获取翻译

/**
 * 查询默认翻译语言类型
 * @returns {Map}
 */
function getSessionLang(){
    var str = "";
    $.ajax({
        method: "POST",
        url: "/basic/getSessionLang",
        data:{},
        async:false,
        success:function(result){
            if(result.code==3){
                str =  result.js_lang;
            }
        }
    })
    if(str==""||str==null){
        str="zh";
    }
    return str;
}


/**
 * 使用i8n国际化翻译获取map
 * @param arr
 */
function getI18nMap(arr){
    var map = new Map();
    arr.push("errorRequest");
    arr.push("errorParam");
    arr.push("success_Request");
    $.i18n.properties({
        name : "i18n", //资源文件名称
        path : "/resources/", //资源文件路径
        mode : 'map', //用Map的方式使用资源文件中的值
        language : ""+getSessionLang(),
        cache:false, //指定浏览器是否对资源文件进行缓存,默认false
        encoding: 'UTF-8', //加载资源文件时使用的编码。默认为 UTF-8。
        callback : function() {//加载成功后设置显示内容
            //以下是将要国际化的文字内容
            for(var key in arr){
                var i18n_key=trim(arr[key]);
                map.set(i18n_key,$.i18n.prop(i18n_key));
            }
        }
    });
    return map;
}

三、java 后端国际化翻译,接口返回数据
1.工具类

/**
 * 描述:
 * java 后端国际化翻译 工具类
 * 获取上下文中的sessionLocaleResolver 类中的默认语言
 * @author 闲走天涯
 * @date 2018/12/1219:08
 */
public class MessageHelper {

    private static MessageSource messageSource;

    public static String getMessage(MessageSource messageSource,String code) {
        MessageHelper.messageSource = messageSource;
        return getMessage(messageSource,code, null,LocaleContextHolder.getLocale());
    }

    public static String getMessage(MessageSource messageSource,String code, Object[] args) {
        return messageSource.getMessage(code, args, Locale.getDefault());
    }

    public static String getMessage(MessageSource messageSource,String code, Object[] args, Locale locale) {
        return messageSource.getMessage(code, args, locale);
    }
}

2.获取翻译 getMessage 需要 注入MessageSource

@Service
public class TestServiceImpl implements TestService {

	@Autowired
	private MessageSource messageSource;
	
	@Override
	public Map<String, Object> test() {
	return  getMessage("success");//返回 '成功' 翻译
	}
	
	public String getMessage(String messageKey){
        try {
            String message = MessageHelper.getMessage(messageSource, messageKey);
            return message;
        } catch (Exception e) {
            e.printStackTrace();
            return messageKey;
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值