Swift ile Localization

Burak Furkan Asiltürk
5 min readFeb 8, 2019

--

Bu yazıda bir iOS uygulamasında birden fazla dili nasıl desteklediğimizi örnek proje üzerinden inceleyeceğiz.

Uygulama arayüzü, “Hello World!” yazan bir label ’dan ve tıklandığında kullanıcıya alert basan bir buton’dan oluşuyor. Amacımız karşılama yazısını ve alert mesajını farklı dillerde kullanıcıya sunmak, hadi başlayalım.

iOS Uygulamalarda Localization

iOS uygulamaları kullanıcı ayarları göz önünde alınarak başlatılır. Yazdığımız projede birden fazla dili destekliyorsak, iOS uygulamayı başlatırken kullanıcının mevcut cihazında kullandığı dilin, uygulama tarafından sunulup sunulmadığına bakar. Eğer mevcut dil destekleniyorsa ilgili dil dosyası sistem tarafından otomatik olarak seçilerek kullanıcıya sunulur. Eğer dil desteklenmiyorsa geliştirici tarafından tanımlanan default dil baz alınarak uygulama başlatılır.

Nasıl Uygulanır?

iOS uygulamalarında çoklu dili desteklemek için göz önüne almamız gereken iki şey vardır: Storyboard ve XIB dosyaları üzerindeki arayüz objeleri ve kaynak koddan gelen string ifadeler.

Örnek projemizde “Hello World!” yazısının Interface Builder üzerinden, alert mesajını da kaynak kod üzerinden hedef dile nasıl çevrildiğini öğreneceğiz. Hadi başlayalım.

Localization — Arayüz Objeleri

Xcode’da projeyi açıp demo_localization dosyasına tıklıyoruz.

Proje seçeneklerine erişmek için navigation bardan Project altındaki demo_localization yazısına tıklıyor ve açılan pop-up’tan projeyi seçiyoruz.

Proje ayarlarına eriştik. Info tab’ı altında Localizations kısmında +/- secenekleriyle projeye hedef diller ekleyip çıkarabilirsiniz. Ben bu projede Türkçe, Almanca ve İspanyolca seçeneklerini ekledim.

Dil desteği eklemek istediğimiz Storyboard’u açılan pencereden seçiyoruz. Örnek projede LaunchScreen ekranında localization desteklemeyeceğimizden seçmedim.

Main.storyboard’ın localization için seçilmesi
Eklenen diller Localization bölümünde listelenir.

Dil Dosyalarına Erişim

Hedef diller seçildikten sonra Project Navigator altında Main.storyboard dosyasına her bir dil için Main.strings adında yeni dosya oluşturulur. Bu dosyalar üzerinde hedef storyboard objeleri için string ifadeler vardır. Örneğin Main.strings(Spanish) seçtiğimde buton ve label dosyalarının karşılığında string ifadeleri görüyorsunuz.

İlgili dillere çevirip textleri değiştirerek localization işlemini tamamlıyoruz:

Localization Test Edilmesi

Yaptığımız değişiklikleri test etmek için simulatör kullanacağız ancak öncesinde projeyi farklı dillerde başlatmak için şema ayarlarında değişiklikler yapalım.

Target üzerinden “Edit Scheme” a tıkladığımızda şema ayarlaryıla karşılaşırız. Proje çalıştırma opsiyonlarında uygulama bölge ve diline sistem default verileri atandığını görüyoruz.

Duplicate Scheme butonuna tıklayarak yeni şema oluşturup “Copy of demo_localization” yerine dilediğiniz ismi verin. Ben örneğin Türkçe için “demo_localization — TR” ismini verdim. Ardından yine Run->Options sekmesine geldim ve uygulama dilini Türkçe olarak değiştirdim:

Projeyi çalıştırdığımızda arayüz objelerinin Türkçe olduğunu göreceksiniz. Diğer diller için de yeni şemalar ekleyip localization’ı test edebilirsiniz.

İlk şemamızda uygulama dili sistem dili olarak seçilmişti, iOS cihazınızı Türkçe kullanıyorsanız, default şema ile proje başlatıldığında ilgili text’lerin sistem diline otomatik dönüştüğünü göreceksiniz.

Arayüz objeleriyle işimiz tamam. Şimdi gelin kaynak koddaki string ifadelerin nasıl localize edildiğini görelim.

Localization — String Veriler

Uygulama kaynak dosyasından gelen verilerin localize etmek için NSLocalizedString() fonksiyonunu kullanacağız. Bu fonksiyon iki parametre alır: key ve comment.

Key localize edilecek string ifadenin kendisi, Comment ise ilgili text’i farkli dillere çevirirken text’e referans olması için eklediğimiz yorumdur.

Öncelikle kaynak dosyasındaki text’lere bakalım:

İmg: NSLocalizedString öncesi

ViewController sınıfı içerisinde ilgili text ifadeleri NSLocalizedString() fonksiyonu ile yeniden düzenleyelim:

İmg: NSLocalizedString sonrası

Yukardaki örnekte olduğu gibi ilgili text’leri NSLocalizedString() fonksiyonuyla değiştiriyoruz.

Ardından localized olarak işaretlenmiş textleri bulmak için terminalden projenin bulunduğu dizine gidip aşağıdaki komutu çalıştırıyoruz:

Terminal komutları sonrası Localizable Base.lproj klasörü altında Localizable.string dosyası oluşturulur. Bu string dosyasını projeye ekleyemek için Xcode içerisinde demo_localization klasörüne sağ tıklayıp dosya ekle diyoruz: — Referans olarak eklediğimize dikkat edin

Xcode’a Localizable dosyası eklediğimizde preferenses kısmında localization seçeneklerinden ilgili dilleri seçiyoruz, seçilen diller .strings uzantılı alt dosyalar olarak Localizable.string altına ekleniyor:

Artık her bir dil için çeviri text’i ekleyerek uygulamayı tamamlayacağız. Örnek text için aşağıda alert mesajının eklendiğini görüyorsunuz, uygulamada kalan kısımları size bırakıyorum, Final projesini indirerek çevirileri tamamlayabilirsiniz.

Terminalde sorun yaşadıysan:

— terminal kullanmakta tecrübeli değilseniz, demo projesini masaüstüne atın, ardından dizine ulaşmak için şu komutu çalıştırın:

cd Desktop/demo_localization/

Hatırlatma:

localization’ı mevcut projenize uyguluyorsanız Base.lproj klasörü proje klasörünün bir alt dizinin bulunmayabilir. Bu durumda terminalden Base.lproj klasörünün bulunduğu dizinin bir üst dizinine giderek kodu çalıştırmalısınız.

Best Practice!

Kaynak kodları incelediğimizde projede sürekli NSLocalizedString() fonksiyonu ile karşılaşıyoruz. Daha yalın kod için extension kullanarak String’i genişletip ona localized() metotu ekliyoruz:

Bu metot, ilgili textin dile göre localized versiyonunu getirecektir. Yorum satırı eklemek isterseniz parametre olarak gönderebilirsiniz:

Ne Öğrendik?

Bu bölümde iOS uygulamalarında kaynak kodlarındaki string ifadeler ile arayüz objelerinin Swift’te nasıl localize edildiğini öğrendik.

Proje Linki: https://github.com/asilturk/Swift-Medium-Tutorials/tree/master/Localization

Happy Coding.

--

--

No responses yet