spring 国际化

国际化配置

spring自带,所以不需要添加任何依赖

  1. resources目录添加

    1
    2
    3
    4
    5
    6
    7
    8
    #创建message.properties文件并添加
    user.name=userName
    ----------------------------
    #创建message_en.properties文件并添加
    user.name=user name
    ---------------------------
    #创建message_zh.properties文件并添加
    user.name=用户名
  2. spring配置文件添加配置spring.messages.basename=message其中message为国际化的文件,就是上面添加的文件名,如果有文件夹包裹,从resources带上文件相对路径

  3. 添加测试类,关键类MessageSource是读取国际化文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.MessageSource;
    import org.springframework.context.i18n.LocaleContextHolder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    @RequestMapping(value = "/test")
    public class TestControl {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    MessageSource messageSource;

    @RequestMapping(value = "/glob")
    public String glob() {
    String userNmae = messageSource.getMessage("user.name", null, LocaleContextHolder.getLocale());
    logger.info("glob :" + userNmae);
    return userNmae;
    }
    }
  4. 测试,使用postman请求该接口,然后请求headers里面添加Accept-Language:chAccept-Language:en就能返回对应的翻译了

常见问题

  1. 出现No message found under code 'user.name' for locale 'ch'.错误

    解决:在配置文件application.properties配置#spring.messages.basename=<你的国际化文件>,或者检查国际化文件是否存在和配置的文件是否匹配