2015-04-09 27 views
16

Tôi đã tạo một ứng dụng web Khởi động Spring sử dụng Thymeleaf làm công cụ tạo mẫu. Tôi đã cấu hình MessageSource để tìm kiếm các tin nhắn trong một thư mục con:Làm thế nào để hiển thị các tin nhắn trong Thymeleaf và Spring Boot?

@Bean 
public MessageSource messageSource() { 
    final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 

    messageSource.setBasename("i18n/messages"); 
    messageSource.setFallbackToSystemLocale(false); 
    messageSource.setCacheSeconds(0); 

    return messageSource; 
} 

Trong thư mục này, tôi tạo ra các tập tin messages_de.properties với nội dung ticket.type.BUG=Fehler. Trong mẫu của tôi, tôi cố gắng để hiển thị dòng chữ như thế này:

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

Nhưng khi trang được trả lại, tôi nhận được như sau:

<p>??ticket.type.BUG_de_DE??</p> 

tôi thiếu gì? Tôi có phải cấu hình thêm bất kỳ hạt cà phê nào không?

P.S .:

Trên trang 'phía máy chủ' Tôi có thể để có được những thông điệp bằng MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY).

Trả lời

26

Vì tôi đang sử dụng Khởi động mùa xuân, MessageSource được định cấu hình với MessageSourceAutoConfiguration. Các cài đặt này có thể dễ dàng thay đổi trong tệp application.properties. Trong trường hợp của tôi, tôi đã có thêm những điều sau đây để tập tin này:

spring.messages.basename=i18n/messages 
+0

Điều này thật thông minh. Mặc dù 'spring.messages.basename' chỉ đề cập đến tiền tố cho mỗi tệp. Không biết nó bao gồm các thư mục. – Incognito

+1

Tôi có cùng một vấn đề và có cấu hình này, nhưng điều này không làm việc cho tôi .. – Raw

0

Nguồn tin được liên quan đến classpath:

messageSource.setBasename(" classpath:i18n/messages"); 

Dưới đây là một hướng dẫn tôi tham chiếu cho thymeleaf và mùa xuân = http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html

+0

Tôi không nghĩ vậy. Tôi đã cập nhật câu hỏi của mình. Khi tôi thêm vào 'classpath:' Tôi cũng không thể nhận được thông báo trong mã Java. – stevecross

0

Có một tập tin messages.properties (không _de) hiện nay cho phép dự phòng? Nó có hoạt động không? Trình duyệt của bạn có được đặt thành ngôn ngữ DE_de không?

+0

Có (tiếng Anh). Không. – stevecross

2

Cách tôi đã giải quyết thông báo i18n là xác định bean MessagesSource như bạn. Ngoài ra, tôi đã phải ghi đè phương thức getValidator() của WebMvcConfigurerAdapter.

@Override 
public Validator getValidator() { 
    LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); 
    validator.setValidationMessageSource(messageSource()); 
    return validator; 
} 

Sau này, nó làm việc cho tôi.

+2

Điều này không giải quyết được cho tôi và tôi không biết tại sao nó nên. Cấu hình này có liên quan đến việc xác thực JSR-303 mà tôi không sử dụng. – stevecross

3

Và thêm video này vào application.properties tập tin của bạn

#messages 
spring.messages.basename=i18n/messages 

và lưu trữ các tập tin n đúng thư mục như đã nêu ở trên.

bạn không cần messageSource bean

+0

Tôi đã tìm thấy và đăng giải pháp này. – stevecross

+4

Xin lỗi. Tôi không thấy điều đó. Btw thời gian tiếp theo bạn có thể chọn đó như là một câu trả lời, vì vậy nó sẽ được hiển thị cho chúng ta rõ ràng.Và bạn không phải bỏ phiếu xuống một nỗ lực để giúp đỡ. –

Các vấn đề liên quan