[RESOLVIDO] - ERRO - Internacionalização i18N + Spring + Thymeleaf

Olá pessoal! tudo bem?

Galera estou com dificuldade em colocar a internacionalização em um sistema web… Já refiz várias e várias vezes, vi muitos videos e ainda acredito que seja alguma coisa bem besta que esta me atrapalhando.

Enfim não quer funcionar, mas também não da erro… Parece que ele não ta entrando na classe de configuração do i18N.

Aqui vai a classe i18N:

package thymeleaf.config;

import java.util.Locale;

import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

@Configuration
@EnableAutoConfiguration
//@ComponentScan
public class I18nConfig extends WebMvcConfigurerAdapter {

    //I18n do pacote web.servlet
    @Bean
    public LocaleResolver localeResolver() {
        System.out.println("ENTROU localeResolver --------------");
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.US);        
        return slr;
    }
   
    //I18n
    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        System.out.println("ENTROU LocaleChangeInterceptor --------------");
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");        
        return lci;
    }
    //I18n
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        System.out.println("ENTROU addInterceptors --------------");
        registry.addInterceptor(localeChangeInterceptor());
    }
    @Bean
    public MessageSource messageSource() {
        final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        System.out.println("ENTROU MessageSource --------------");
        messageSource.setBasename("classpath:static/proprio/languages");
        messageSource.setUseCodeAsDefaultMessage(true);
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
   
    @Override
    public Validator getValidator() {
        System.out.println("ENTROU Validator --------------");
        LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
        validator.setValidationMessageSource(messageSource() );
        return validator;
    }

	// @Bean
	// public MessageSource messageSource() {
	// 	ReloadableResourceBundleMessageSource bundle = new ReloadableResourceBundleMessageSource();
		
	// 	bundle.setBasename("/resources/static/proprio/languages");
	// 	bundle.setDefaultEncoding("UTF-8");
	// 	bundle.setCacheSeconds(1);
	// 	System.out.println(bundle);
		
	// 	return bundle;
	// }

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

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

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

Classe de configuração que faz o scanner dos componentes:

package br.com.empresa;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.autoconfigure.domain.EntityScan;

import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

import javax.servlet.Filter;

import org.springframework.context.annotation.Bean;

import org.springframework.web.filter.CharacterEncodingFilter;

import br.com.empresa.util.security.ActiveUserStore;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication

@EntityScan(basePackages = { "br.com.empresa.modelo" })

@EnableJpaRepositories(basePackages = { "br.com.empresa.repository" })

@ComponentScan(basePackages = { "br.com.empresa.controlador, " + "br.com.empresa.service, "

+ "br.com.empresa.repository, " + "br.com.empresa.util.persistencia, "

+ "br.com.empresa.util.autenticacao," + "br.com.empresa.util.security, " + "br.com.empresa.util.thymeleaf" })

@EnableTransactionManagement

// @EnableSpringDataWebSupport

// @EnableSpringConfigured

// @EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)

public class EmpresaApplication extends SpringBootServletInitializer {

public static void main(String[] args) {

SpringApplication.run(EmpresaApplication.class, args);

}

@Bean

public Filter getCharacterEncodingFilter() {

CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();

encodingFilter.setEncoding("UTF-8");

encodingFilter.setForceEncoding(true);

return encodingFilter;

}

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

return builder.sources(EmpresaApplication.class);

}

@Bean

public ActiveUserStore activeUserStore() {

return new ActiveUserStore();

}

}

Controlador da tela:

package br.com.empresa.controlador.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.empresa.service.usuario.UsuarioService;

@Controller
public class CLogin {

	@Autowired
	UsuarioService usuarioService;

	@GetMapping(value = "/")
	public String index(Model model) {
		return "redirect:login";
	}

	@GetMapping(value = "/login")
	public ModelAndView login() {
		ModelAndView model = new ModelAndView();

		model.setViewName("util/login");

		return model;
	}

}

Tela de login:

<!DOCTYPE html>
<html xmlns:layout="http://ultraq.net.nz/thymeleaf/layout" xmlns:th="http://thymeleaf.org" th:with="lang=${#locale.language}" th:lang="${lang}">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="Titulo da Pagina">
    <meta name="author" content="Empresa">

    <!-- Chrome, Firefox OS, Opera and Vivaldi -->
    <meta name="theme-color" content="#4285f4">
    <!-- Windows Phone -->
    <meta name="msapplication-navbutton-color" content="#4285f4">
    <!-- iOS Safari -->
    <meta name="apple-mobile-web-app-status-bar-style" content="#4285f4">

    <title>Empresa</title>

    <!-- ========== CSS ========== -->
    <th:block th:replace="modelo/css"></th:block>
</head>

<body>

    <div class="account-pages"></div>
    <div class="clearfix"></div>
    <div class="wrapper-page">
        <div class="card-box">
            <div class="panel-heading">
                <h3 class="text-center" th:text="#{app.title}">
                    Bem-vindo ao <strong class="text-custom">Empresa</strong>
                </h3>
            </div>

            <div class="panel-body">
                <form id="formLogar" class="form-horizontal m-t-20" th:action="@{/login}" method="post">
                    <div class="form-group ">
                        <div class="col-xs-12">
                            <input class="form-control" id="username" name="username" type="text" required th:placeholder="#{login.name}">
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="col-xs-12">
                            <input class="form-control" id="password" name="password" type="password" required th:placeholder="#{login.password}">
                        </div>
                    </div>

                    <div class="form-group text-center m-t-40">
                        <div class="col-xs-12">
                            <button class="btn btn-pink btn-block text-uppercase waves-effect waves-light" type="submit" th:text="#{login.enter}"></button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>

    <th:block th:replace="modelo/script"></th:block>

    <script th:src="@{plugins/notifyjs/js/notify.js}"></script>
    <script th:src="@{plugins/notifications/notify-metro.js}"></script>

    <script th:inline="javascript">
        /*<![CDATA[*/

        // $("#formLogar").submit(function(e) {
        //     e.preventDefault();

        //     var login = document.getElementById("login").value;
        //     var senha = document.getElementById("senha").value;

        //     if (login !== undefined && login != "" && senha !== undefined && senha != "") {
        //         Common.Ajax("POST", "/logar", {
        //             login: login,
        //             senha: senha
        //         }, "JSON", function(data) {
        //             if (data.tipo == "success") {
        //                 $.redirect("/index");
        //             } else {
        //                 $.Notification.autoHideNotify(data.tipo, 'bottom right', data.titulo, data.msg);
        //             }
        //         });
        //     }
        // })

        /*]]>*/
    </script>

</html>

Quando abre o projeto esta aparecendo dessa maneira:

Só pra lembrar pessoal eu tenho 3 messages criados

Pessoal eu resolvi o problema tirando a anotação @EnableAutoConfiguration da classe i18N