2016-07-19 5 views
1

Beim Versuch, eine statische Zeichenfolge zu lokalisieren, wird die Nachricht mit Fragezeichen "??"Thymeleaf und Spring Boot liest keine Eigenschaften aus Lokalisierungsdateien - Anstelle der lokalisierten Zeichenfolge werden Fragezeichen angezeigt

z.B. ? Ticket.type_en_US ??

<p th:text="#{ticket.type}">Blah</p> 
  • Ich bin mit SpringBoot 1.3.6.RELEASE
  • Thymeleaf: 3.0.0.RELEASE
  • thymeleaf-Spring4 Artefakt

ich den Basisnamen meiner Botschaften konfiguriert haben in application.properties

und der Inhalt dieser messages.properties und messages_en_US.prope rties ist:

ticket.type=BUGS!!!! 

Config:

spring.messages.basename=messages 

Ausgang beim Start:

2016-07-19 08: 38: 28,673 DEBUG 5175 --- [main ] atractionConfigEmbeddedWebApplicationContext: Verwenden von MessageSource [org.springframework.context.support.ResourceBundleMes sageSource: Basisnamen = [Nachrichten]]

Ich versuchte auch programmatisch die MessageResource im Code unten. Ich habe die Datei messages.properties im selben Ordner wie die Datei application.properties abgelegt. src/main/resources/

@Configuration 
@ComponentScan("controller") 
public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware{ 

    private ApplicationContext applicationContext; 

    @Autowired 
    private MessageSource messageSource; 

    public void setApplicationContext(ApplicationContext applicationContext) { 
     this.applicationContext = applicationContext; 
    } 

    @Bean 
    public ViewResolver viewResolver() { 
     ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
     resolver.setTemplateEngine(templateEngine()); 
     resolver.setCharacterEncoding("UTF-8"); 
     return resolver; 
    } 

    @Bean 
    public TemplateEngine templateEngine() { 
     SpringTemplateEngine engine = new SpringTemplateEngine(); 
     engine.setTemplateResolver(templateResolver()); 
     engine.setMessageSource(messageSource); 
     return engine; 
    } 

    @Bean 
    public ITemplateResolver templateResolver() { 
     SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
     resolver.setApplicationContext(applicationContext); 
     resolver.setPrefix("/WEB-INF/templates/"); 
     resolver.setTemplateMode(TemplateMode.HTML); 
     return resolver; 
    } 
} 

Der Vollständigkeit halber hier ist meine Anwendung config (wie andere hatte ich die Thymeleaf Klasse exluse):

@SpringBootApplication(exclude={org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration.class}) 
public class Application { 

    public static void main(String[] args) { 

     ApplicationContext ctx = SpringApplication.run(Application.class, args); 

    } 

} 

ich auch überprüft haben, dass die Nachricht Bündel durch pring aus dem Inhalt auf einem meines REST Endpunktes Anrufe geladen:

@Autowired 
    private MessageSource messageSource; 

    @GET 
    @Produces("application/json") 
    public List<MyData> getData() { 
     System.out.println("HERE 1 in Conversions"); 

     System.out.println(messageSource.getMessage("ticket.type", null, Locale.US)); 

     return getTheData(); 
    } 

Dies ist die ausdruckt folgend, damit ich weiß Frühling-boot i s Laden der Ressourcenbündel, aber Thymeleaf Kommissionierung sie nicht irgendwie nach oben:

BUGS!!!! 

Hier meine volle HTML-Seite, vielleicht gibt es ein Problem mit sich:

<html xmlns:th="http://www.thymeleaf.org"> 
<head> 

    <title>Kitchen Sink</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 

    <link href="http://cdn.jsdelivr.net/webjars/bootstrap/3.3.4/css/bootstrap.min.css" 
      th:href="@{/webjars/bootstrap/3.3.4/css/bootstrap.min.css}" 
      rel="stylesheet" media="screen" /> 

    <script src="http://cdn.jsdelivr.net/webjars/jquery/2.1.4/jquery.min.js" 
      th:src="@{/webjars/jquery/2.1.4/jquery.min.js}"></script> 

    <link href="../static/css/mike.css" 
      th:href="@{css/mike.css}" rel="stylesheet" media="screen"/> 
</head> 

<body> 
<div class="container"> 
    <div class="jumbotron"> 

     <h1>Hello</h1> 

     <h2>Welcome to the Kitchen Sink!</h2> 

     <p th:text="#{ticket.type}">Blah</p> 

     <p th:text="#{test.type}">dssfgf</p> 

     </div> 

</body> 

</html> 
+0

ähnlich wie diese verwenden können http://stackoverflow.com/questions/28750292/custom-spring-boot-starter-how-do -you-contribre-i18n-messages-to-the-messageso – Saravana

+0

Haben Sie 'ReloadableResourceBundleMessageSource' anstelle von' ResourceBundleMessageSource' probiert? – Lucky

+0

Warum konfigurieren Sie es selbst? Spring Boot konfiguriert Thymianblatt, Lokalisierung usw. bereits für Sie ... Arbeiten Sie mit dem Framework anstatt mit dem Framework. –

Antwort

1

ok, so habe ich es aus. Danke @ M.Deinum für den Hinweis, dass ich Springboot und Thymeleaf einfach tun lassen sollte, was sie tun sollen.

Ich hatte das setzen:

engine.setMessageSource(messageSource); 

und auch hinzufügen:

@Bean 

zu den 2 anderen Funktionen. Dadurch konnte die MessageSource an die Engine übergeben und die Eigenschaften korrekt aufgelöst werden.

Ich werde die Frage oben mit der richtigen Quelle aktualisieren, damit die Leute es für referene

Verwandte Themen