Heroku应用程序不显示使用UTF-8作为默认编码的西里尔字母

时间:2019-05-30 16:45:47

标签: java spring-boot heroku locale

我遵循this Baeldung tutorial,尽管语言正确更改,但是每当我尝试更改为基于西里尔字母的语言(保加利亚语,俄语)时,字符只是问号。我在Heroku上托管我的应用程序。

我尝试在Heroku CLI中执行heroku config:add LANG=en_US.UTF-8,但没有效果。

这是我的LocaleResolverReloadableResourceBundleMessageSourceLocaleChangeInterceptor和重写的addInterceptors方法的代码

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

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

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }

我希望得到“Добредошъл”(保加利亚语中的欢迎词),但是我只是得到???????代替。

编辑1 添加Heroku Locale Buildpack后,尝试将应用程序部署到Heroku时出现以下错误:

-----> Locale app detected
cat: /tmp/build_1406e9f58f41cacf3931deb52b55d687/.locales: No such file or 
directory
!     Push rejected, failed to compile Locale app.
!     Push failed

1 个答案:

答案 0 :(得分:0)

如果您已安装语言环境buildpack,请通过转到Heroku应用程序的设置来删除创建的.locales文件和buildpack。

我通过在application.properties文件中应用以下设置来解决此问题:

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

另外,请注意,应用这些设置后的首次构建可能会特别慢-如果您是在Eclipse中构建的,并且在大约1分钟内习惯了Heroku应用的构建,请注意,这可能需要5分钟以上的时间建造。