iOS uygulamalarında çoklu dil desteğini backend ile sağlamak

Beytullah Özer
LCW Digital
Published in
3 min readNov 24, 2023

Merhaba,

iOS projenizde çoklu dil desteğini backend ile gerçekleştirmek nasıl olur ?Lütfen unutmayalım ki, burada Swiftin bize sağladığı Localize imkanı ile gerçeklemek yerine backend ile devam edeceğiz.

Birden fazla dil seçeneği sunabilmek ve kullanıcıya hangi dil seçildiyse o dilin tüm verileri uygulamanızın tüm ekranlarına yansıtabilmek önemli bir noktadır. Bu noktada geliştirmemiz nasıl olmalı ve hangi adımlardan geçeceğiz şimdi görelim.

Splash ekranından sonra dil seçim ekranı olduğunu varsayalım.

Örnek dil seçimi ekranı tasarımı
  • Kullanıcının uygulamayı ilk defa açtığında hangi dilde açılacağını belirlemek için kontrol yapılacaktır.
  • Dil dosyaları türkçe (tr-TR) ve ingilizce (en-EN) şeklinde iki tane var olduğunu bilelim. Default tr-TR tanımlanabilir. Dil kodlarını yazarken veya kendi uygulamanızı geliştirirken bunu göz önünde bulundurabilirsiniz.

Dil seçim ekranı uygulamanızın ilk sayfalarından biri olmalır. Kullanıcı bu sayfada dil seçecek ve tüm uygulamayı o dil üzerinden kullanacak.

  • Dil seçim ekranı geldiğinde, eğer burada ve önceki sayfada dil kontrol etmek isterseniz örnek supportedValueDict isimli bir servis isteği atabiliriz.
  "supportedValueDict" : [
{
"regionId" : 1,
"areaCode" : 09,
"countryId" : 1,
"countryCode" : "TR",
"countryName" : "Turkey | Türkiye",
"supportedLanguages" : [
{
"culture" : "tr-TR",
"translate" : {
"title" : "Dil Seçiniz",
"languageName" : "Türkçe",
"cancelButtonTranslate" : "İptal",
"saveButtonTranslate" : "Devam Et"
},
"languageId" : 9
},
{
"culture" : "en-EN",
"translate" : {
"title" : "Choose Language",
"languageName" : "English",
"cancelButtonTranslate" : "Cancel",
"saveButtonTranslate" : "Continue"
},
"languageId" : 18
}
]
}
]
  • Bu örnek servis isteği ile sayfanın label’larına model verilerimizi uygulattığımızda çeviriyi değişmesini, çevirilerin kontrolünü rahatça sağlayabiliriz.
  • Bilinmesi gereken bir diğer nokta ise hangi ülke kodu, bu ülkenin ismi ne, ülke id’si gibi gerekli verileri response’da almamız gerekmektedir. Bu sayede response‘dan veriyi çekerek sonraki sayfalara işlem yaptırabiliriz.
  • Kullanıcıya dil seçimi yaptırdığımızda seçtiğimiz dil İngilizce olsun.
  • İngilizceyi seçtikten sonra continueButton’a bastığımızda languageTranslationValue isimli bir servis isteği atılmış olacaktır.
  • Servis isteği atıldığında gelen çeviri response’u okuyabileceğimiz modelimiz bulunmaktadır. Modelde ise bir dictionary string tanımlayalım.
  • var languageValues: Dictionary<String, String>?

Atılan istek ile ingilizce seçip continueButton ile devam ettiysek servis bize ingilizce verileri languageValues ile String halde paylaşılan çevirileri response olarak bize vermektedir. Aşağıda örnek bir json paylaşılmıştır.

"languageValues": {
"whatsappSupport": "Whatsapp Support",
"pleaseSelectTopics": "Please Select Topics"
"warningMessage": "Wrong information."
.
.
}
"languageValues": {
"whatsappSupport": "Whatsapp Destek",
"pleaseSelectTopics": "Lütfen Başlık Seçiniz"
"warningMessage": "Yanlış Bilgi."
.
.
}

Peki bu verileri cihazda nasıl kullanmaktayız?

Veriler cihazın cache’inde tutulmaktadır. Keyin karşılığını dictionary’den al ve kullan dememiz gerekmektedir. Bu işlemi yaptıktan sonra string’i proje içinde kullanmak için bir fonksiyon yazmamız gerekmektedir.

  • languageValues’un içindeki whatsappSupport key’ini ele alalım.

Bu işlemi yaparken self.getStringData fonsiyonu çağırılmaktadır. İçi şu şekildedir.

  • Projede bu isteği attıktan servis isteğinin süresi tüm verileri aldığı süre boyunca geçerli olur ve istek bittiğinde anasayfadan tekrar yenilenen dil çevirileri ile labellarımızı verilerimiz doldurmuş olacaktır.
  • Bu işlem ;
    UserDefaults.standard.set(language, forKey: kAppLanguage)
    UserDefaults.standard.synchronize() ile yapılmaktadır.
  • Veriler üzerine yazılmaktadır ve uygulamanızdaki çeviriler yenilenmiş olarak UIda gözlemlenecektir.

Projenizde whatsappSupport keyinizi bir UIda göstermek için ise whatsapSupport.getString() diyebilirsiniz. Bu sayede getString() fonksiyonu çalışacak ve keyinizi burada yazdırmış olacaksınız.

Label’da gelen verinin string yazdırılması

Sonuç olarak, backend ile iletişim kurarak servise bağlı bir işlem yaptırtıyoruz. Localizable servise eklendiğinde tüm çeviriler projede tek bir servis isteği üzerinden atılmış ve kullanılmış oluyor. Genellikle birçok sayfası bulunan geniş kapsamlı app’lerde bu düzen mevcuttur.

Umarım, sizin için faydalı bir makale olmuştur.

Teşekkürler 👋🏻

--

--