java实现i18n国际化

internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n。

一般用语言_地区的形式表示一种语言,如 zh_CN, zh_TW.

常见的有:

zh_cn: 简体中文

zh_hk: 繁体中文(中国香港)

zh_tw: 繁体中文(中国台湾地区)

en-hk: 英语(香港)

en_us: 英语(美国)

en_gb: 英语(英国)

en_ww: 英语(全球)

ja_jp: 日语(日本)

ko_kr: 韩文(韩国)

如何实现i18国际化

第一步
先解决乱码问题
在这里插入图片描述
创建三个文件
在这里插入图片描述
第一个为默认文件,可以为空,但是必须要有
文件二加入:
在这里插入图片描述
文件三加入:
在这里插入图片描述

在配置文件中加入
在这里插入图片描述
获取i18n资源文件
MessageUtils

public class MessageUtils extends ResourceBundleMessageSource {
    private static MessageSource messageSource;

    public static void setMessageSource(MessageSource source){
        messageSource=source;
    }
    public MessageUtils() {
        super();
        //this.messageSource = messageSource;
    }

    /**
     * 获取单个国际化翻译值
     */
    public static String get(String pvsKey) {
        try {
            return messageSource.getMessage(pvsKey, null, LocaleContextHolder.getLocale());
        } catch (Exception e) {
            return pvsKey;
        }
    }
    /**
     * 获取单个国际化翻译值
     */
    public static String get(String pvsKey,Object ... pvParams) {
        try {
            return messageSource.getMessage(pvsKey, pvParams, LocaleContextHolder.getLocale());
        } catch (Exception e) {
            return pvsKey;
        }
    }
}

i18n配置文件
I18nConfig

@Configuration
public class I18nConfig {
    /**
     * 默认解析器 其中locale表示默认语言
     */
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        return localeResolver;
    }
    /**
     * 默认拦截器 其中lang表示切换语言的参数名
     */
    @Bean
    public WebMvcConfigurer localeInterceptor() {
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
                localeInterceptor.setParamName("lang");
                registry.addInterceptor(localeInterceptor);
            }
        };
    }

}

ApplicationEvent

@Component
public class ApplicationEvent implements ApplicationListener<ContextRefreshedEvent> {
    @Resource
    protected MessageSource messageSource;
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        MessageUtils.setMessageSource(messageSource);
    }
}

前端

使用thymeleaf模板引擎的话可以使用th:test="#{user.login.sumbit}"
在这里插入图片描述

接下来就可以通过两个超链接进行切换
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值