java i18n多语言

第一步:配置消息源

@Configuration
public class MessageSourceConfig {

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
}

第二步:配置LocaleResolver

@Configuration
public class LocaleResolverConfig implements WebMvcConfigurer {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(Locale.US);
        return localeResolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang");
        registry.addInterceptor(localeChangeInterceptor);
    }
}

第三步:创建资源文件
在src/main/resources目录下创建多个不同语言的资源文件,如messages_en.properties和messages_zh.properties,用来存储各种语言的文本信息。

messages_en.properties
greeting=Hello World!

messages_zh.properties
greeting=你好,世界!

第四步:使用MessageSource获取资源文件内容

@Component
public class MessageUtils {

    @Autowired
    private MessageSource messageSource;

    public MessageUtils() {
    }

    public String getMessage(String code) {
        return this.getConnectorMessage(code, null, null);
    }

    public String getMessage(String code, String param) {
        return this.getConnectorMessage(code, param, null);
    }

    public String getMessage(String[] codes) {
        return this.getConnectorMessage(null, null, codes);
    }

    public static String msg(String code, Object... args) {
        LocaleResolver localLocaleResolver = SpringContextHolder.getBean(LocaleResolver.class);
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        Locale localLocale = localLocaleResolver.resolveLocale(request);
        return SpringContextHolder.getApplicationContext().getMessage(code, args, localLocale);
    }


    private String getConnectorMessage(String code, String param, String[] codes) {
        StringBuilder stringBuilder = new StringBuilder();
        if (StringUtils.isNotEmpty(param)) {
            stringBuilder.append(param).append(":");
        } else if (StringUtils.isNotEmpty(code)) {
            stringBuilder.append(this.messageSource.getMessage(code, null, LocaleContextHolder.getLocale()));
        }
        if (null != codes) {
            for (String arr : codes) {
                stringBuilder.append(this.messageSource.getMessage(arr, null, LocaleContextHolder.getLocale())).append(";");
            }
        }
        return stringBuilder.toString();
    }
}
@Controller
public class GreetingController {

    @Autowired
    private MessageSource messageSource;

    @GetMapping("/greeting")
    public String greeting(Locale locale) {
        return MessageUtils.msg("greeting");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值