SpringBoot 快速支持国际化i18n

2021-04-10 17:27

阅读:650

YPE html>

只需体验三分钟 就会爱上这款国际化!

学习目标

  • 快速学会如何在工程中支持国际化语言。

快速查阅

专题阅读:《SpringBoot 布道系列》

源码下载:springboot-locale-i18n

— Hey Man,Don‘t forget to Star or Fork . —

项目结构:

 
技术图片
 

使用教程

一、后台国际化

1、配置国际化参数

默认解析器:LocaleResolver 用于设置当前会话的默认的国际化语言。

默认拦截器:LocaleChangeInterceptor 指定切换国际化语言的参数名。例如?lang=zh_CN 表示读取国际化文件messages_zh_CN.properties

/**
 * 配置国际化语言
 */
@Configuration
public class LocaleConfig {

    /**
     * 默认解析器 其中locale表示默认语言
     */
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(Locale.US);
        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);
            }
        };
    }
}

2、添加国际化文件

首先在配置文件 application.yml 填写国际化文件的相对路径,表示读取classpath:/static/i18n/messages_language_country.properties 。例如:

spring:
  messages:
    basename: static/i18n/messages #相对路径 开头请勿添加斜杠

然后在 classpath:/static/i18n 目录中添加如下国际化文件:

默认文件:messages.properties

#这里填写默认翻译,内容可以留空,但文件必须存在。

美式英语:messages_en_US.properties

#这里填写英语翻译。
user.title=User Login
user.welcome=Welcome
user.username=Username
user.password=Password
user.login=Sign In

中文简体:messages_zh_CN.properties

#这里填写中文翻译
user.title=用户登陆
user.welcome=欢迎
user.username=登陆用户
user.password=登陆密码
user.login=登陆

中文繁体:messages_zh_TW.properties

#这里填写繁体翻译
user.title=用戶登陸
user.welcome=歡迎
user.username=登陸用戶
user.password=登陸密碼
user.login=登陸

3、代码国际化

通过工具类的静态方法MessageUtils.get("user.title") 快速获取当前国际化的翻译值。


/**
 * 国际化工具类
 */
@Component
public class MessageUtils{

    private static MessageSource messageSource;

    public MessageUtils(MessageSource messageSource) {
        FastLocale.messageSource = messageSource;
    }

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

二、页面国际化

首先在pom文件引入ThymeleafWeb依赖,然后在页面中只需通过th:xx="#{x.label}"即可获取对应的国际化翻译值。

        >
            >org.springframework.boot>
            >spring-boot-starter-web>
        >

        >
            >org.springframework.boot>
            >spring-boot-starter-thymeleaf>
        >

例如:

<span>th:text<span><span>=<span>"#{user.title}<span>"<span>>用户登陆<span><span><span></span></span></span></span></span></span></span></span></span>
>

三、JS国际化

首先在pom文件引入jQueryjquery-properties-i18n等依赖,然后在初始化后即可通过JS函数获取对应国际化文件的内容。

        >
            >org.webjars>
            >webjars-locator-core>
        >

        >
            >org.webjars>
            >jquery>
            >3.3.1>
        >

        >
            >org.webjars.bower>
            >jquery-i18n-properties>
            >1.2.7>
        >

例如:为了提高可用性 这里提供了获取当前国际化语言和获取国际化翻译的方法。


xmlns:th="http://www.thymeleaf.org">
>
    <span>th:text<span><span>=<span>"#{user.title}<span>"<span>>用户登陆<span><span><span></span></span></span></span></span></span></span></span></span>
>
    >
    >

    >
>
>
class="logo_box"> >

th:text="#{user.welcome}">欢迎登陆

>
>
class="input_outer"> class="u_user">> id="username" name="username" class="text" type="text" th:placeholder="#{user.username}">
>
class="input_outer"> class="us_uer">> id="password" name


评论


亲,登录后才可以留言!