src/main/java/com/whyc/config/I18nLocaleResolver.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/controller/ServerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/util/MessageUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/config/application-dev.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/config/application-prod.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/i18n/message_en_US.properties | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/i18n/message_zh_CN.properties | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/whyc/config/I18nLocaleResolver.java
New file @@ -0,0 +1,61 @@ package com.whyc.config; import com.sun.istack.internal.Nullable; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.lang.NonNull; import org.springframework.web.servlet.LocaleResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; /** * i18n自定义LocaleResolver */ @Configuration public class I18nLocaleResolver implements LocaleResolver { @Autowired private HttpServletRequest request; public Locale getLocal() { return resolveLocale(request); } /** * 从HttpServletRequest中获取Locale * * @param httpServletRequest httpServletRequest * @return 语言Local */ @Override public Locale resolveLocale(HttpServletRequest httpServletRequest) { //获取请求中的语言参数 String language = httpServletRequest.getParameter("lang"); //如果没有就使用默认的(根据主机的语言环境生成一个 Locale Locale locale = Locale.getDefault(); //如果请求的链接中携带了 国际化的参数 if (!StringUtils.isEmpty(language)){ //zh_CN String[] s = language.split("_"); //国家,地区 locale = new Locale(s[0], s[1]); } return locale; } /** * 用于实现Locale的切换。比如SessionLocaleResolver获取Locale的方式是从session中读取,但如果 * 用户想要切换其展示的样式(由英文切换为中文),那么这里的setLocale()方法就提供了这样一种可能 * * @param request HttpServletRequest * @param httpServletResponse HttpServletResponse * @param locale locale */ @Override public void setLocale(@NonNull HttpServletRequest request, @Nullable HttpServletResponse httpServletResponse, @Nullable Locale locale) { } } src/main/java/com/whyc/controller/ServerController.java
@@ -5,7 +5,6 @@ import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; /** src/main/java/com/whyc/util/MessageUtils.java
New file @@ -0,0 +1,99 @@ package com.whyc.util; import com.whyc.config.I18nLocaleResolver; import lombok.var; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.nio.charset.StandardCharsets; import java.util.Locale; import java.util.Objects; @Component public class MessageUtils { /*private static MessageSource messageSource; public MessageUtils(MessageSource messageSource) { MessageUtils.messageSource = messageSource; } public static String getMessage(String key) { try { return messageSource.getMessage( key, null, LocaleContextHolder.getLocale()); } catch (Exception e) { return key; } }*/ @Value("${spring.messages.basename}") private String basename; private final I18nLocaleResolver resolver; private static I18nLocaleResolver customLocaleResolver; private static String path; public MessageUtils(I18nLocaleResolver resolver) { this.resolver = resolver; } @PostConstruct public void init() { setBasename(basename); setCustomLocaleResolver(resolver); } /** * 获取 国际化后内容信息 * * @param code 国际化key * @return 国际化后内容信息 */ public static String getMessage(String code) { Locale locale = customLocaleResolver.getLocal(); return getMessage(code, null, code, locale); } public static String getMessage(String code, Object[] args, String defaultMessage, Locale locale) { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); //判断locale,如果不是zh或en,则使用英文 String language = locale.getLanguage(); /*else { messageSource.setDefaultEncoding(StandardCharsets.UTF_8.toString()); }*/ if((language.equals("zh"))){ locale = Locale.SIMPLIFIED_CHINESE; messageSource.setDefaultEncoding("GBK"); }else{ //不是中文,则采用en_US locale = Locale.US; } messageSource.setBasename(path); String content; try { content = messageSource.getMessage(code, args, locale); } catch (Exception e) { content = defaultMessage; } return content; } public static void setBasename(String basename) { MessageUtils.path = basename; } public static void setCustomLocaleResolver(I18nLocaleResolver resolver) { MessageUtils.customLocaleResolver = resolver; } } src/main/resources/config/application-dev.yml
@@ -40,6 +40,8 @@ multipart: max-file-size: 200MB max-request-size: 200MB messages: basename: i18n/message mybatis-plus: typeAliasesPackage: com.whyc.pojo,com.whyc.dto mapper-locations: classpath:mapper/**/*Mapper.xml src/main/resources/config/application-prod.yml
@@ -41,6 +41,8 @@ multipart: max-file-size: 200MB max-request-size: 200MB messages: basename: i18n/message mybatis-plus: typeAliasesPackage: com.whyc.pojo,com.whyc.dto mapper-locations: classpath:mapper/**/*Mapper.xml src/main/resources/i18n/message_en_US.properties
New file @@ -0,0 +1 @@ test=this is a i18n test case src/main/resources/i18n/message_zh_CN.properties
New file @@ -0,0 +1 @@ test=这是一个i18n测试