22 Ekim 2015 Perşembe

Spring MVC ve çoklu dil desteği (i18n)

Merhabalar,

Yeni geliştirmekte olduğumuz projede çoklu dil desteğini uygulamak istedik. İnternetten araştırdığımızda (çok fazla türkçe kaynak bulunmadığı için) sorunumuza çözüm olmayan  bir çok çözümlerle karşılaştık.

İnternette diğer kaynaklarda anlatıldığı gibi i18n'i adım adım uyguladık ama ~

baz aldığımız kaynaklar;

http://www.mkyong.com/spring-mvc/spring-mvc-internationalization-example/

http://www.journaldev.com/2610/spring-mvc-internationalization-i18n-and-localization-l10n-example

application-context.xml sayfamızdan default dili "en" ya da "tr" verdiğimizde düzgünce çalışıyor ama maalesef "Türkçe" ve "English" linklerine bastığımızda mesajlar ilgili dile çevrilmiyordu.

        <!-- changes are then saved in cookies for future request -->
<bean id="localeResolver"
   class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
   <property name="defaultLocale" value="en"/>
</bean>

Araştırmaya devam ettikçe application-context.xml'e mvc'yi dahil etmem gerektiğini okudum.

<mvc:annotation-driven/>

ve



<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>

dahil ettim. bu seferde;

"cvc-complex-type.2.4.c: The matching wildcard is string:but no declaration can be found for the element mvc:annotation-driven"  hatası aldım.

Bu hatanın sebebi ise, kullandığımız mvc'nin versiyonundan kaynaklanmaktaydı. Kimisi versiyonun sonuna mvc'yi referans gösteren "xsd" dahil edilmesini kimisi kaldırılması gerektiğini söylüyordu.
ve en sonunda hiçbir versionu kullanmadan aşağıdaki gibi tanımlama yaptım xsi:schemaLocation'a.

http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"

"xmlns" yani namespace kısmına da mvc'yi tanımlamanız gerekmekte.





Bizin jsp sayfalarımız > src  > WEB_INF > views altında ayrı ayrı dosyalarda yer almakta
messages'larımız ise 


Diğer kaynaklarda belirtilen tanımlanan "LocaleChangeInterceptor"ı ve localeResolver'ı mvc içinde tanımladım. Bu doğrultuda i18n için application-context.xml'imize aşağıdaki değerleri girdik.


Dil desteğinin verilecek olduğu jsp sayfasındaki buton ya da link'i de aşağıdaki gibi tanımlamanız gerekiyor ki application-context.xml'imizdeki tanımlama ile uyumlu olsun.

<a href="?lang=en">English</a>|<a href="?lang=tr">Türkçe</a>

Hiç yorum yok:

Yorum Gönder