美文网首页
SpringBoot 国际化的两种方式:

SpringBoot 国际化的两种方式:

作者: 夜空最亮的9星 | 来源:发表于2019-12-18 14:27 被阅读0次

SpringBoot 国际化的两种方式:

image

工具类


@Component
public class I18nService {
    @Autowired
    private MessageSource messageSource;

    public I18nService(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    public String getMessage(String msgKey, Object[] args) {
        return messageSource.getMessage(msgKey, args, LocaleContextHolder.getLocale());
    }

    public String getMessage(String msgKey) {
        Locale locale = LocaleContextHolder.getLocale();
        return messageSource.getMessage(msgKey, null, locale);
    }
}

application.yml

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

方式一

/**
 * 配置国际化语言
 */
@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);
            }
        };
    }
}

访问方式:

默认英语:http://http://127.0.0.1:8080?lang=en_US

中文简体:http://http://127.0.0.1:8080?lang=zh_CN

中文繁体:http://http://127.0.0.1:8080?lang=zh_TW

方式二

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

public class MyResolver implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {

        String l = request.getParameter("l");
        if (!StringUtils.isEmpty(l)){
            String[] split = l.split("_");

            return new Locale(split[0],split[1]);
        }
        return null;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public LocaleResolver localeResolver(){
        return new LangResolver();
    }

}

访问方式:

默认英语:http://http://127.0.0.1:8080?l=en_US

中文简体:http://http://127.0.0.1:8080?l=zh_CN

中文繁体:http://http://127.0.0.1:8080?l=zh_TW

定义 HelloController

import com.hehe.locale.I18nService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class HelloController {

    @Resource
    private I18nService i18nService;



    @GetMapping("/")
    public String index() {

        return i18nService.getMessage("user.welcome");

    }
}

参考链接

SpringBoot 快速支持国际化i18n

相关文章

网友评论

      本文标题:SpringBoot 国际化的两种方式:

      本文链接:https://www.haomeiwen.com/subject/uzhunctx.html