Localization In Spring Framework
Merhabalar arkadaşlar.
Bu yazıda sizlere Spring Framework içerisinde yerelleştirme (Internalization) konusunu örnekleyeceğim.
Bu yazıdaki kodlar aklıma geldikçe üzerine eklemeler yaparak halen geliştirmekte olduğum MemberRestAPI projesinde yer almaktadır. Kodlara şuaradan ulaşabilirsiniz: https://github.com/ilkgunel/MemberRestAPIProject
Yerelleştirme konusu basit hali ile kullanıcılara bir takım mesajların kullanıcıların dillerinde gösterilmesi mevzusudur. Biz de yazımız içerisinde Rest API üzerinde gelen dil parametresine göre mesaj dönümünü göreceğiz.
ApplicationCofig.java
ApplicationConfig sınıfımız gelen dil parametresine ilgili mesajı dönecek olan metodu barındıran sınıftır.
-
Sınıfımız diğer sınıflaramız içerisinde çağırılıp kullanbilmek için ilk olarak @Componenet notasyonu ile işaretlendi.
-
Sınıfımız içerisinde her mesaj getiriminde yeniden oluşturulmasın, bir tane oluşturulup bellekte kalsın diyerek static bir ResourceBundleMessageSource nesnesi tanımlı.
-
getValueOfProperty(…) metodu kendisine verilen anahtar bilgisine ait mesajı kendisine gelen dil parametresine göre dönecek metottur. İçerisinde eğer messageSourceInstance o an için oluşturulmamış durumda ise ResourceBundleMessageSource sınıfından bir nesne oluşturuyor. Bu nesneye setBasenames() metodu ile sonu en ya da tr olarak biten dosyalardaki prefix kelimeyi atıyoruz. Bizim örneğimizde Türkçe ve İngilizce mesajları tutan dosyalarımızın isimleri messageTexts_tr.properties ve messageTexts_en.properties şeklinde olduğu için setBaseNames metoduna messageTexts değerini veriyoruz. Encoding değerini de atadıktan sonra nesnemiz hazır hale geliyor.
-
Son adımda ResourceBundleMessageSource sınıfındaki getMessage(…) metoduna ilgili anahtar kelimeyi (propertyName) ve dil parametresini geçirerek mesajı bize döndürüyor.
MemberSaveService.java
Şimdi MemberSaveService sınıfı içerisindeki addOneMember(…) metodu ile yerelleştirme işlemini örneklemiş olacağız. Metot şu şekilde:
-
addOneMember(…) metodumuz içerisinde ilk olarak loglama işlemine dikkat edelim.INFO seviyesindeki loglama sırasında neyin loglanacağı applicationConfig.getValueOfProperty(role + “_memberAddingMethod”, member.getMemberLanguageCode()) ifadesi ile az önce ApplicationConfig sınıfı içerisinde gördüğümüz getValueOfProperty(…) metodu ile belirleniyor. Anahtar olarak role + “_memberAddingMethod” ifadesi geçiriliyor. role ifadesi burada ROLE_USER ya da ROLE_ADMIN olacaktır. member.getMemberLanguageCode() ifadesi ile de gelen dil parametresini geçiriyoruz.
-
memberOperationPojo.setResult(…) ifadesi ile de dönülecek API response’unda yer alacak mesaj bilgisi gelen dile göre çekilip koyulacak.
messageTexts_en.properties
İngilizce karşılıkları tutan dosyada bu yazı için kullanacağımız metin şu şekilde:
ROLE_USER_memberAddingMethod=One user member adding method is running!
messageTexts_tr.properties
Türkçe karşılıkları tutan dosyada da anahtara karşılık gelen değer şöyle:
ROLE_USER_memberAddingMethod=Tekil kullanıcı üye ekleme metodu çalışıyor!
Ekran Görüntüleri memberLanguageCode parametresini içeren JSON datasını ilgili adres’e POST ediyorum.
Ben memberLanguageCode olarak tr gönderdiğim için dönen JSON datasının result alanında yukarıda gördüğümüz Türkçe mesaj metni dönüyor.
Şimdi memberLanguageCode olarak en değerini gönderiyorum:
Dönen JSON datasının result alanında İngilizce metin dönüyor:
Şimdi bir de log dosyalarımıza bakalım.
Log dosyamızda 3:39:54’de atılan log Türkçe metin içerirken 3:44:57’de atılan log İngilizce metin içermektedir.
Bu yazıda anlatacaklarım bu kadar arkadaşlar. Başka bir yazıda görüşmek üzere.
Görüşene kadar sağlıcakla kalın.
Selam ve Sevgilerimle