2016-04-10 5 views
6

मैं स्प्रिंग बूट और थाइमेलीफ का उपयोग करके बहुभाषी एप्लिकेशन बनाने की कोशिश कर रहा हूं।I18n + Thymeleaf

मैंने अलग-अलग संदेशों को सहेजने के लिए कुछ गुण फ़ाइलें बनाई हैं, लेकिन मैं इसे केवल अपनी ब्राउज़र भाषा में प्रदर्शित करने में सक्षम हूं (मैंने ब्राउजर लोकेल बदलने के लिए एक्सटेंशन की कोशिश की लेकिन वे काम नहीं कर रहे हैं), वैसे भी मैं एक रखना चाहता था इस कर्तव्य को करने के लिए मेरी वेबसाइट में बटन (भाषा बदलना), लेकिन मुझे नहीं पता कि इसे कैसे प्रबंधित किया जाए या कैसे प्रबंधित किया जाए।

परियोजना

Structure of the project


I18n विन्यास वर्ग

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 पृष्ठ के संरचना:

गोना तुम मेरे config दिखाने

<!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> 

संदेश (गुण फ़ाइलें)

messages_en_US.properties

hello.world = Hello people 

messages_es.properties

hello.world = Hola gente 

दरअसल यह संदेश स्पैनिश में प्रदर्शित होता है, यह सुनिश्चित नहीं करता कि मैं इसे कैसे बदलूं, इसलिए यदि आप मेरी मदद कर सकते हैं तो आपको बहुत धन्यवाद।

एक और सवाल है जो मेरे दिमाग में आता है ... मैं गुण फ़ाइल से डेटाबेस से संदेश कैसे प्राप्त करूं?

+0

बेवकूफ सवाल: आप 'लोकेल' कैसे सेट कर रहे हैं? क्या आपने एक ['लोकेल रिसेल्वर'] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/LocaleResolver.html) कॉन्फ़िगर किया है? आप इसे उस लोकेल को कैसे पारित कर रहे हैं जिसे आप चाहते हैं? –

+0

मुझे नहीं लगता, मुझे लगता है कि वसंत इसे ब्राउज़र कॉन्फ़िगरेशन से ले रहा है। क्या मैं एक बटन प्रेस के आधार पर लोकेल सेट करूँगा? यकीन नहीं है कि यह इस तरह से काम करेगा। –

+1

[शीर्ष] पर शुरू करें (http://www.concretepage.com/spring-4/spring-4-mvc-internationalization-i18n-and-localization-l10n-annotation-example) और जारी रखें।आपको 3 चीजें चाहिए 1) एक 'संदेश स्रोत', 2) एक विशेष अनुरोध के लिए निर्धारित करने के लिए 'लोकेल रिसेल्वर', किस लोकेल का उपयोग करना है, और (वैकल्पिक) 3) 'लोकेल चेंजइंटरसेप्टर' ताकि आप अनुरोध से, लोकेल को 'लोकेल रिसेल्वर' में सेट करें। –

उत्तर

9

आपका आवेदन करना चाहिए फैली 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()); 
} 

}

बाद ब्राउज़र को आप परम भाषा बदल सकते हैं लैंग पर

उदाहरण: http://localhost:1111/?lang=kh जो messages_kh.properites की सामग्री का संग्रह किया जायेगा खमेर भाषा