iOS Localization(Yerelleştirme)

Localization, uygulamanızın diğer dilleri desteklemesini sağlama sürecidir. Çoğu durumda, uygulamanızı önce İngilizce veya Türkçe kullanıcı arayüzü ile yaparsınız ve ardından uygulamayı Japonca gibi diğer dillere yerelleştirirsiniz. Lokalizasyon süreci can sıkıcıdır ve XCode'un güncellenmesi ile ilgili adımlar azar azar değişmektedir. Bu yazıda XCode 10.1  temel alınmıştır.
Yerelleştirme çalışmasına başlamadan önce, “Use Base Internationalization” onay işaretini seçtiğinizden emin olun.



“Base Internationalization” nedir? 

Yeni XCode projesi oluşturduğunuzda, XCode otomatik olarak kaynakları ve varsayılan dil için bunları içeren dosya yapısını oluşturur.


Bu "Base" dili denir. Uygulamanızı global pazar için yapıyorsanız, normal olarak bu “Base” dil kaynaklarında İngilizce metinleri kullanmak istersiniz.

Yeni Yerelleştirme Ekleniyor 

Tamam, varsayılan olarak Base dil kaynak yapısına sahibiz. Yeni dil desteği ekleyelim. Proje Gezgini'nde(Project Navigator) proje dosyanızı seçin ve projenizi proje ve hedefler listesinde seçin. Bilgi sekmesini açın ve Localization bölümünün altındaki “+” düğmesini tıklayın. Ardından, gösterilen açılır listeden desteklemek istediğiniz dili seçin.


XCode, yeni dil için eklenecek kaynakları gösteren bir iletişim kutusu açar. Son düğmesine basmak, bu dosyaları [New Language].lproj adlı yeni dil proje klasörü altında üretecektir. (Bu örnekte Japon desteği ekledim, böylece ja.lproj klasörü oluşturuldu.)


Şimdi, proje klasöründe aşağıdaki gibi bir dosya yapımız var.


Localizable.strings dosyası nerede? 

Localizable.strings dosyası, çeviri verilerini anahtar / değer (key-value) çiftleri olarak eklediğiniz yerdir. XCode'un son sürümleri varsayılan olarak Localizable.strings dosyası oluşturmaz. Localizable.strings dosyasını eklemek için Dosya-> Yeni-> Dosya'ya (File->New->File) gidin, iOS'un Kaynak (Resource) sekmesi altındaki String File seçin, Localizable.strings olarak adlandırın ve dosyayı oluşturun.



Şimdi, aşağıdaki gibi bir Base Language için bir Localizable.strings dosyası var.


Japonca için Localizable.strings eklemek için Dosya Denetçisi'nde (File Inspector) Japonca'yı tıklatın. Bu ja.lproj klasörünün altında yeni bir Localizable.strings dosyası oluşturur.


Artık iki Localizable.strings dosyası var. Bunlardan biri Base.lproj klasörünün altında, diğeri ja.lproj klasörünün altında. Uygulamada kullanılan kelimeleri ve kelime öbeklerini Base'nin Localizable.strings dosyasına ekleyelim. Aşağıda "Welcome" = "Welcome" i eklediğim bir örnek var; Sol taraf, daha sonra sağdaki metni çıkarmak için NSLocalizedString yöntemi tarafından kullanılan Key olarak adlandırılır. Bu, anahtar-değer çifti veri türüdür.


Aşağıda, NSLocalizedString yönteminin örneği verilmiştir. Yöntemin ilk parametresi olarak bir anahtar belirledik. Anahtarı ilk parametre olarak belirterek, karşılık gelen değeri Localizable.strings dosyasından çıkarabilir ve değeri döndürür. Bu örnekte, uyarı başlığı, mesaj ve düğmeler için yerelleştirilmiş dizeler elde ediyorum.

let alertTitle = NSLocalizedString("Welcome", comment: "")
let alertMessage = NSLocalizedString("Thank you for trying this app, you are a great person!", comment: "")
let cancelButtonText = NSLocalizedString("Cancel", comment: "")
let signupButtonText = NSLocalizedString("Signup", comment: "")

let alert = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: UIAlertControllerStyle.Alert)
let cancelAction = UIAlertAction(title: cancelButtonText, style: UIAlertActionStyle.Cancel, handler: nil)
let signupAction = UIAlertAction(title: signupButtonText, style: UIAlertActionStyle.Default, handler: nil)
alert.addAction(cancelAction)
alert.addAction(signupAction)
presentViewController(alert, animated: true, completion: nil)

Uygulamayı çalıştırın ve İngilizce metinle uyarıyı görmeliyiz.


Bir sonraki adım olarak, aşağıdaki gibi ja.lproj klasörünün altındaki Localizable.strings dosyasına Japonca metinleri ekliyoruz. Aynı anahtarları kullanıyoruz ancak değerleri karşılık gelen Japonca çevirilerle değiştiriyoruz.


Bundan sonra, iOS simülatöründe telefon dilini Japonca olarak değiştirin ve uygulamayı çalıştırın, şimdi Japonca metinlerle uyarıyı görmelisiniz.


Yerelleştirme sonuçlarını her kontrol ettiğinizde telefon dilinizi değiştirmek yararlıdır. XCode, uygulamayı iOS Simulator uygulamasında çalıştırdığınızda dilleri yalnızca uygulama içinde değiştirmek için güzel bir özelliğe sahiptir. Bunu yapmak için, XCode penceresinin sol üst köşesindeki açılır listeden Edit Scheme'yi seçin ve Uygulama Dilini İngilizce'den Japonca'ya değiştirin (Kaybolduysanız aşağıdaki ekran görüntüsüne bakın). Bu yapılandırma simülatörün telefon dilini değiştirmez, ancak uygulama içindeki dil ortamını yalnızca belirtilen dile değiştirir. Bu, birkaç dil eklediğinizde ve yerelleştirme sonucunuzu kontrol etmek için diller arasında geçiş yapmak istediğinizde kullanışlıdır.


Storyboard Yerelleştirmesi 

Tamam, şimdi NSLocalizedString kullanarak yerelleştirilmiş metinlerin nasıl değiştirileceğini ve Localizalbe.strings dosyalarında verilerin nasıl hazırlanacağını biliyoruz. Bu, kullanıcılara yerelleştirilmiş metinleri programlı olarak göstermeniz için yeterlidir. Sonraki adım Storyboard'larda (button, label vb. başlıklar gibi) ayarlanan metinlerin yerelleştirilmesini desteklemektedir. Storyboard'larda button başlıkları veya label metinleri ayarlarsanız ve bu metinleri ViewControllers'de programsal olarak değiştirmezseniz, Storyboard dosyalarınızda yerelleştirmeniz gerekir. Storyboard'larda kullanılan kelimelere çeviri verileri eklemek için, önce Project Navigator'dan Storyboard dosyasını seçin, ardından sağdaki File Inspector'den Japonca'yı seçin ve ekleyin. Bu ja.lproj klasörünün altında [StoryboardFileName] .strings dosyasını oluşturur. Aşağıdaki örneğimizde, Storyboard dosya adı Main.storyboard olduğundan, Main.strings (Japonca) oluşturulur.


Main.strings dosyasının içinde aşağıdakine benzer bir şey göreceksiniz.

/* Class = "UIButton"; normalTitle = "Get Started"; ObjectID = "qs4-6I-gUp"; */
"qs4-6I-gUp.normalTitle" = "Get Started"; 

Yukarıdaki satırın “Get Started” bölümünü, ilgili Japonca ifadeye değiştirin.

/* Class = "UIButton"; normalTitle = "Get Started"; ObjectID = "qs4-6I-gUp"; */

"qs4-6I-gUp.normalTitle" = "始める";

Uygulamayı çalıştırın. Button başlığı, Japonca'ya uygun şekilde yerelleştirilmelidir.

Uygulama Başlığını Yerelleştirme 

Uygulama başlığını veya Info.plist dosyasında tanımlanan diğer şeyleri yerelleştirmek için bir InfoPlist.strings dosyası oluşturun. Dosya-> Yeni-> Dosya'ya gidin(File->New->File), iOS'un Kaynak(Resources) sekmesi altındaki String File seçin, InfoPlist.strings olarak adlandırın. Base.lproj klasörünü InfoPlist.strings dosyasının konumu olarak seçin. (Bunu yaparak, bu InfoPlist.strings dosyası, XCode tarafından temel dil için bir tane olarak tanınır.) Normalde, bu iki değeri info.plist dosyasında yerelleştirmek istiyoruz. 

  • CFBundleDisplayName - Ana ekranda gösterilen uygulama adı 
  • NSHumanReadableCopyright - Telif hakkı açıklaması (ör. 2014 Goldrush Computing Inc. Tüm hakları saklıdır) Aşağıdaki gibi bu iki anahtar için bir uygulama adı ve telif hakkı ayarlayın.


/* 
  InfoPlist.strings
  LocalizationTutorialApp

  Created by Takamitsu Mizutori on 2016/07/25.
  Copyright © 2016年 Goldrush Computing Inc. All rights reserved.
*/

"CFBundleDisplayName" = "MyApp";

"NSHumanReadableCopyright" = "2016 Goldrush Computing Inc. All rights reserved."

Daha sonra File Inspector'den, ja.lproj klasörünün altında bir InfoPlist.strings eklemek için Japonca'yı işaretleyin (bunu yaparken InfoPlist.strings dosyasının seçili olmasını sağlamalısınız).


InfoPlist.strings (Japonca) dosyasında, aşağıdaki gibi Japonca çeviri ile değerleri değiştirin.

/* 
  InfoPlist.strings
  LocalizationTutorialApp

  Created by Takamitsu Mizutori on 2016/07/25.
  Copyright © 2016年 Goldrush Computing Inc. All rights reserved.
*/
"CFBundleDisplayName" = "マイアプリ";

"NSHumanReadableCopyright" = "2016年 Goldrush Computing Inc. All rights reserved."

Uygulamayı çalıştırın ve uygulama başlığınızın Japonca'ya uygun şekilde yerelleştirilmiş olup olmadığını görün.


Bu, bir uygulamayı başka bir dilde yerelleştirmenin tüm sürecidir.