一、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;
}
}
}