Localize-Swift ile iOS Localization Çoklu Dil Desteği



Herkese merhabalar. Ben Yuşa, WeWALK'ta iOS Developer olarak çalışıyorum. Bu yazıda, iOS uygulamamız için çoklu dil desteğini nasıl entegre edeceğimizi öğreneceğiz. Bu yöntemi Storyboard'a veya SwiftUI projenize uygulayabilirsiniz.


Bir uygulama, harika özelliklere sahip mükemmel bir uygulama olabilir, ancak çoklu dil desteği yoksa, büyümesinin ve büyüme hızının sınırlı olacağından eminim. Çoklu dil desteği eklemek, uygulamanızı gözle görülür bir biçimde büyütecektir ve ilgiyi arttıracaktır. Bunu kanıtlamak için Distomo'nun araştırmasına bakalım. Distomo'nun araştırması'na göre uygulamalar, çoklu dil desteği eklendikten kısa bir süre sonra indirmelerde ortalama %128'lik bir büyüme yaşıyor.


Beni GitHub'da takip ediyorsanız, kesinlikle açık kaynak kodu ne kadar sevdiğimi biliyorsunuzdur. Açık kaynaklı iOS projelerimin birinde, uygulamamın tüm dünyaya hitap edebilmesi amacıyla çoklu dil desteğini kullanmaya başladım. Şimdi, sizlere çoklu dil desteğini kullandığım bu projeden bazı kod parçalarını göstereceğim. Mevcut bir proje veya yepyeni bir proje için yazıdaki kod satırlarının tamamını uygulayabilirsiniz. Seçim sizin! Ek olarak, yazının sonunda bu açık kaynak projeye de ulaşabilirsiniz! Öyleyse başlayalım!



Yerelleştirme (Localization) Dosyalarını Ekleme


Yerelleştirme dosyalarını eklemek için, lütfen Project Navigator'da proje dosyamızı, ve PROJECT and TARGETS listesinden projemizi seçelim. Info sekmesini açıp Localizations bölümünün altındaki "+" düğmesini tıklayalım. Ardından, gösterilen açılır listeden (dropdown list) desteklemek istediğimiz dili seçelim.



Yerelleştirme dosyasını ekleme işlemi

Xcode, yeni dil için eklenecek kaynakları gösteren bir iletişim kutusu (dialog) açacaktır. Finish butonuna basmak, bu dosyaları [Yeni Dil] .lproj adlı yeni dil proje klasörü altında oluşturacaktır. (Bu örnekte İspanyolca dil desteği ekledim, böylece es.lproj klasörü oluşturulmuş oldu.)


Dil desteğini projeye kaydetme

Yeni bir Strings File eklemek için, dosyayı kaydetmek istediğimiz bir klasöre sağ tıklayalım (benim için bu, Localizable klasörü olacak) ve New File öğesini seçelim. Resource bölümünün altında, Strings File'ı göreceğiz. Strings File'ı seçip Next'e tıklayalım. Sonunda, kaydetmek istediğimiz klasörü seçip dosyamıza bir ad verelim (benim için bu isim Localization olacak) ve ardından Create'e tıklayalım.


Strings File

Localization.strings dosyasını açalım, dili seçmek için Xcode'un sağ tarafında yer alan Show the Inspectors'a, ardından da Show the File Inspector'a tıklayalım. Show the File Inspector bölümünün altında Localization adlı bir bölüm olacak. Localization altında, Localize... adlı bir buton göreceğiz. O butona tıklayalım ve dil desteği eklemek istediğimiz dili seçelim (benim için bu dil, İspanyolca olacak).


Hem İngilizce hem de İspanyolca için dil desteği dosyalarımızı oluşturalım. Tüm kelimeleri ve(ya) cümleleri aşağıdaki satırdaki gibi tanımlayabiliriz:

// An example
"hello_world" = "Hello World!";

Şimdi dosyalarımızı ihtiyaç duyduğumuz anahtar kelimeler ve anlamlarıyla dolduralım, ve sırasıyla İngilizce ve İspanyolca dil desteği dosyalarımızı görelim.

İngilizce için dil desteği dosyası

İspanyolca için dil desteği dosyası

Bundan sonra, dil desteği için ilgili kütüphaneyi projemize kuralım.



Kütüphaneyi Projeye Kurma


Artık, programlamaya geçelim! Yapacağımız ilk iş, dil desteği kütüphanesini kurmak olacak. Bunun için Localize-Swift kullanacağız. Localize-Swift, Swift dostu bir yerelleştirme ve uygulama içi dil değiştirme özelliğine sahip bir kütüphanedir. Yüklemek için aşağıdaki adımları takip edebiliriz:

  1. File > Swift Packages > Add Package Dependency'yi seçelim. Açılan "Choose Package Repository" penceresine https://github.com/marmelroy/Localize-Swift.git linkini girelim.

  2. Sonraki sayfada, sürüm çözümleme kuralını "3.2.0" ile "Up to Next Major" olarak belirtelim.

  3. Xcode, kaynağı kontrol ettikten ve sürümü çözümledikten sonra, artık "Localize-Swift" kitaplığını seçebilir ve uygulamaya ekleyebiliriz.



Localize-Swift'i Import Etme


Bir COVID-19 uygulaması olan projemde RecentsView ve WorldDataView olmak üzere iki farklı View var. RecentsView, dünya çapında COVID-19'un istatistiksel bilgilerini bize sunarken, WorldDataView ise bir ülkenin COVID-19 verilerini ayrıntılı bir şekilde karşımıza çıkarıyor. Bu kısa bilgilendirmeden sonra, uygulamamıza dil desteğini entegre edebiliriz.


Swift'te aşağıdaki kod satırını kullanarak dil desteğini import edebiliriz:

import Localize_Swift

Dil desteğini uygulamak için tüm anahtar kelimelerin (keyword) sonunda .localized() kullanacağız. Anahtar kelimeleri aşağıdaki satırdaki gibi uygulayabiliriz:

// NavigationView will cover the RecentsView.
NavigationView {

...

     // The title of the NavigationView.
     .navigationBarTitle("Spreat - \(("recent").localized())", displayMode: .inline)

}

Artık uygulamamızın dili, telefonumuzun diline göre otomatik olarak değişebilecek. Bunu test etmek için telefonumuzdan Ayarlar > Genel > Dil ve Bölge > iPhone Dili yollarını izleyerek dil güncellemesi yapabiliriz.


Uygulama İçerisinden Mevcut Dili Değiştirme


İkinci bir seçenek olarak uygulama dilini, uygulama içerisinden de değiştirme imkanımız mevcut.


Bunun için bir Picker oluşturalım ve mevcut dilleri Picker'a ekleyelim. Picker'da seçilen dili ve bu dilin kodunu Localize-Swift'e ve Notification Center'a bildirelim.


ÖNEMLİ BİR NOT: Localize.setCurrentLanguage(x) metodu ile yeni dili set ettikten sonra localized() metodları yeni dile göre çalışmaya başlayacak. Ancak dili değiştirmeden önce load olmuş olan controller'lara navigation back ile geri dönüldüğünde bu ekranlardaki metinlerin değişmediğini gözlemlersiniz. Bunu engellemek için changeLocale adlı lokal bildirim fırlatıyoruz. Geride bulunan controller'ların load olurken changeLocale bildirimini dinlemesi gerekiyor. Bu bildirimi yakalayan ilgili controller'daki metinlerin yeni dile göre değişmesi için bildirim metodunda localized() metodlarınızı çağırdığınızdan emin olmalısınız.



import Localize_Swift

...

// Current languages that have been support by Spreat.
private let languages: [String] = Localize.availableLanguages()

  // Store the selected language from the picker.
 @State private var selectedLanguageIndex: Int = 0
 
  var body: some View {
    NavigationView {
  
    ...
 
      Picker("", selection: $selectedLanguageIndex) {
          ForEach(0..<languages.count) {
              Text(self.languages[$0])
          }
      }
      .pickerStyle(WheelPickerStyle())
 
      if #available(iOS 14.0, *) {
          Button(action: {

              ...

              // Set the current language.
               Localize.setCurrentLanguage(
                   self.languages[self.selectedLanguageIndex]
               )

              // To update the UI in the View where a language change can take place, observe LCLLanguageChangeNotification.
              NotificationCenter.default.addObserver(self, selector: Selector(("changeLocale")), name: NSNotification.Name(rawValue: LCLLanguageChangeNotification), object: nil)
              self.showRecents.toggle()
          }) {
              Text("ok".localized())
          }
          .fullScreenCover(isPresented: $showRecents) {
              // Go to the "RecentsView".
              RecentsView()
          }
      } else {
          // Fallback on earlier versions
      }
 
   ...
 
   }



İlgili kodları entegre ettik, artık sonuçları görelim:


Spreat'in ana ekranına dair iki ekran görüntüsü

Spreat'in ana sayfasına ait bir GIF


Sonuç


Sonuç olarak, çoklu dil desteğimizi başarıyla uyguladık. Yazının başında da söylediğim gibi dil desteğini kullandığım bu projeyi sizlerle paylaşıyorum. Cümlenin sonundaki linke tıklayarak projemize ulaşabilirsiniz: Spreat


Hepinize, sağlıklı bir gün geçirmenizi diliyorum!


#ios #localization #multilanguage #localizeswift

0 yorum

Son Paylaşımlar

Hepsini Gör

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2021 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın