天天看點

Spring 國際化中文亂碼的解決方法

spring國際化

出現的問題:

ResourceBundle [message] not found for MessageSource: Can't find bundle for base name message, local_zh

解決:

使用 org.springframework.context.support.ResourceBundleMessageSource 配置會導緻以上問題出現。

改用 org.springframework.context.support.ReloadableResourceBundleMessageSource。

相關@Bean配置代碼如下:

    @Bean

    public MessageSource messageSource() {

        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

        messageSource.setBasename("/WEB-INF/messages");

        messageSource.setCacheSeconds(10);

        return messageSource;

    }

messages.properties和messages_zh_CN.properties檔案存放路徑如下圖

Spring 國際化中文亂碼的解決方法

這時,若messages_zh_CN.properties檔案中存在中文,啟動WEB應用之後,jsp頁面中文無法正常顯示,出現亂碼。解決方法:

在@Bean中設定setDefaultEncoding, 代碼如下:

    @Bean

    public MessageSource messageSource() {

        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

        messageSource.setBasename("/WEB-INF/messages");

        messageSource.setDefaultEncoding("UTF-8");

        messageSource.setCacheSeconds(10);

        return messageSource;

    }