2016-04-10 64 views
6

Spring boot ve Thymeleaf kullanarak çok dilli bir uygulama yapmaya çalışıyorum.Spring boot + Thymeleaf'da I18n

Farklı iletileri kaydetmek için birkaç özellik dosyası yaptım ancak yalnızca tarayıcı dilimde görüntüleyebiliyorum (tarayıcı yerel ayarını değiştirmek için uzantıları denedim ancak çalışmıyor gibi görünüyor), yine de bir Bu görevi yapmak için web sitemdeki butonu (dili değiştirmek), fakat nasıl yönetileceğini ve nasıl yönetileceğini bilmiyorum. Projenin

Structure of the project


I18n yapılandırma sınıfı

import org.springframework.context.MessageSource; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.support.ResourceBundleMessageSource; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@Configuration 
@EnableWebMvc 
public class I18nConfiguration extends WebMvcConfigurerAdapter { 

    @Bean 
    public MessageSource messageSource() { 
     ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
     messageSource.setBasename("i18n/messages"); 
     messageSource.setDefaultEncoding("UTF-8"); 
     return messageSource; 
    } 

} 

Thymleaf HTML sayfası içinde

Yapısı:

boy Sana benim yapılandırma göstermek

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

<head> 
<title>Spring Boot and Thymeleaf example</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body> 
    <h3>Spring Boot and Thymeleaf</h3> 
    <p>Hello World!</p> 
    <p th:text="${nombre}"></p> 
    <h1 th:text="#{hello.world}">FooBar</h1> 
</body> 
</html> 

Mesajlar (Özellikler dosyaları)

messages_en_US.properties

hello.world = Hello people 

messages_es.properties

hello.world = Hola gente 

Aslında, İspanyolca'da ileti görüntüleniyor, nasıl değiştirdiğimi tam olarak bilmiyordum, eğer bana yardım ederseniz çok teşekkür ederim.

Aklıma gelen başka bir soru var ... İletiler yerine veritabanı dosyasındaki iletileri nasıl alabilirim?

+0

Aptal soru: 'Yerel Ayarı' nasıl ayarlıyorsunuz? Bir ['LocaleResolver'] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/LocaleResolver.html) yapılandırdınız mı? İstediğiniz bölgeyi nasıl iletiyorsunuz? –

+0

Öyle değil, sanırım bahar bunu tarayıcı yapılandırmasından alıyor. Düğmeye basarak yerel ayarı ayarlayayım mı? Bu şekilde çalışıp çalışmadığından emin değilim. –

+1

[üst] başından başlayın (http://www.concretepage.com/spring-4/spring-4-mvc-internationalization-i18n-and-localization-l10n-annotation-example) ve devam edin.İhtiyacınız olan 3 şey var: 1) bir 'MessageSource', 2) 'LocaleResolver', belirli bir istek için hangi yerel ayarı kullanacağını ve (isteğe bağlı) 3) bir' LocaleChangeInterceptor' için istekte bulunabilmenizi, Yerel ayarı 'LocaleResolver' içinde ayarlayın. –

cevap

9

Başvurunuz gerektiği uzanır WebMvcConfigurerAdapter

@SpringBootApplication 
public class NerveNetApplication extends WebMvcConfigurerAdapter { 

public static void main(String[] args) { 
    SpringApplication.run(NerveNetApplication.class, args); 
} 

@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()); 
} 

} Eğer param ile lang dili geçiş yapabilirsiniz tarayıcıda Sonra

Örnek: http://localhost:1111/?lang=kh hangi messages_kh.properites içeriğini saklayacaktır Khmer dili.