zoukankan      html  css  js  c++  java
  • Spirng I18n 国际化

    最近公司做了个购票项目,业务扩展到了泰国,所以网站要支持泰语、英语和中文,因此有了下文。

    配置文件准备:
    根目录或者i18n目录放置需要的翻译,每个配置文件对应不同的翻译
    在这里插入图片描述

    messages是默认展示的翻译 我这里为英文
    messages_th_TH:
    email_format_error=รูปแบบอีเมลไม่ถูกต้อง
    messages_en_US:
    email_format_error=incorrect email format
    messages_zh_CN:
    email_format_error=邮箱格式错误
    

    项目配置

    ## 配置消息资源
    @Bean
    public ResourceBundleMessageSource getBundleMessageSource(){
        ResourceBundleMessageSource r = new ResourceBundleMessageSource();
        r.setBasenames("messages");
        r.setDefaultEncoding("UTF-8");
        return r;
    }
    
    
    @Component
    public class I18nComponent {
    
        private static final java.util.List<Locale> DEFAULT_ACCEPT_LOCALES = Arrays.asList(Locale.US, Locale.SIMPLIFIED_CHINESE, new Locale("th", "TH"));
    
        /**
         * 请求头信息,通过此解析locale
         * 前台lan 参数为:zh_CN,th_TH,en_US 和配置文件后缀对应
         */
        private static final String HTTP_ACCEPT_LANGUAGE = "lan";
    
        @Autowired
        private ResourceBundleMessageSource bundleMessageSource;
    
        public Locale getLocale() {
        // 从请求头获取语言参数
            ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    
            if (servletRequestAttributes == null) {
                return Locale.getDefault();
            }
    
            HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest();
            String locale = httpServletRequest.getHeader(HTTP_ACCEPT_LANGUAGE);
            if (StringUtils.isEmpty(locale)) {
                return Locale.getDefault();
            }
    
            return Locale.lookup(Locale.LanguageRange.parse(locale), DEFAULT_ACCEPT_LOCALES);
        }
    
    	// 获取翻译消息
        public String getLocaleMessage(Object errorEnum) {
            Locale locale = getLocale();
            String message = bundleMessageSource.getMessage(errorEnum.toString().toLowerCase(), null, locale);
            return message;
        }
    
        public String getLocaleMessage(String propertyKey) {
            Locale locale = getLocale();
            String message = bundleMessageSource.getMessage(propertyKey, null, locale);
            return message;
        }
    
        public String getLocaleMessageWithPlaceHolder(String propertyKey, Object... params) {
            Locale locale = getLocale();
            String message = bundleMessageSource.getMessage(propertyKey, params, locale);
            return message;
        }
    
    }
    
    
  • 相关阅读:
    如何提高Java并行程序性能??
    《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了
    看JVM就推荐这本书
    【Java】实战Java虚拟机之五“开启JIT编译”
    实战Java虚拟机之四:提升性能,禁用System.gc() ?
    实战Java虚拟机之三“G1的新生代GC”
    实战Java虚拟机之二“虚拟机的工作模式”
    实战Java虚拟机之一“堆溢出处理”
    实战java虚拟机的学习计划图(看懂java虚拟机)
    aspose.cells 复制单元格
  • 原文地址:https://www.cnblogs.com/paper-man/p/13284588.html
Copyright © 2011-2022 走看看