paint-brush
Swift'de Yerelleştirmenin Evrimi: Dizelerden Dize Kataloglarınaile@mniagolov
892 okumalar
892 okumalar

Swift'de Yerelleştirmenin Evrimi: Dizelerden Dize Kataloglarına

ile Maksim Niagolov8m2024/06/12
Read on Terminal Reader

Çok uzun; Okumak

Swift, yerelleştirmeyi uygulamalara kolayca dahil etmek için güçlü araçlar sunar. Bu kılavuz, geliştiricilerin bu yeteneklerden tam olarak yararlanmasına yardımcı olmak için Swift'de yerelleştirmedeki ilk tekniklerden en son araca geçişi açıklamaktadır. Yerelleştirme, kullanıcı deneyimini geliştirir, erişim alanını genişletir ve yazılımın uluslararası düzeydeki başarısı üzerinde büyük bir etkiye sahip olabilir.
featured image - Swift'de Yerelleştirmenin Evrimi: Dizelerden Dize Kataloglarına
Maksim Niagolov HackerNoon profile picture

Dünyanın küresel bir pazar haline geldiği günümüzde, mobil uygulamalarınızın farklı dil ve kültürlerde olabilmesi sadece bir seçenek değil, bir zorunluluktur. Yerelleştirme, kullanıcı deneyimini geliştirir, erişim alanını genişletir ve yazılımın uluslararası düzeydeki başarısı üzerinde büyük bir etkiye sahip olabilir.


Swift, iOS geliştiricileri için yerelleştirmeyi uygulamalara kolayca dahil etmek için güçlü araçlar sunuyor. Bu kılavuz, geliştiricilerin bu yeteneklerden tam anlamıyla yararlanmasına yardımcı olmak için Swift'de yerelleştirmedeki ilk tekniklerden en son araca geçişi açıklıyor.


Yerelleştirmede İlk Zorluklar

Başlangıçta, Swift ilk tanıtıldığında yerelleştirme altyapısını Localizable.strings dosyası ve NSLocalizedString işlevi etrafında oluşturulan Objective-C'den devraldı. Bu şekilde geliştiriciler, yerelleştirilmiş dizeleri manuel olarak düzenlemek ve bunları farklı dil dosyaları arasında senkronize etmekle uğraşmak zorunda kaldı; bu, hem hatalara açık hem de zaman alıcı bir süreçti.

Localizable.strings Temelleri

Yerelleştirilebilir dosya, dizelerin "anahtar" = "değer" biçiminde depolandığı basit bir anahtar/değer çifti dosyasıdır; burada "anahtar", kod tanımlayıcıdır ve "değer", kullanıcının göreceği yerelleştirilmiş dizedir. Bu dosyanın çoğaltılması ve desteklenen her dile çevrilmesi ve İngilizce dili için 'en.lproj' ve Almanca dili için 'de.lproj' gibi uygun '.lproj' dizinlerine yerleştirilmesi gerekir.

Localizable.strings Girişi Örneği :

 "hello_world_key" = "Hello, World!";


Swift kodunda bu dize şu şekilde alınabilir:

 let greeting = NSLocalizedString("hello_world_key", comment: "The default greeting")


NSLocalizedString işlevi, Localizable.strings anahtarları kullanarak yerelleştirilmiş içeriğe erişmeyi kolaylaştırır.


Bu işlev bir anahtar alır, bir geri dönüş değeri sağlar ve çevirmenler için bir yorum ekler. Yorum sunmak, çevirmenlere çevirilerin doğruluğunu ve uygunluğunu artıracak alt metni sağladığı için çok önemlidir.


Örnek: Bir kullanıcıyı günün saatine göre selamlamak:

 func greetingBasedOnTime() -> String { let hour = Calendar.current.component(.hour, from: Date()) let key = hour < 12 ? "good_morning_key" : "good_evening_key" return NSLocalizedString(key, comment: "Greeting based on time of day") }


Karşılık gelen Localizable.strings ile girişler şöyle görünür:

 "good_morning_key" = "Good morning!"; "good_evening_key" = "Good evening!";


Yerelleştirilebilirlik ile ilgili bazı zorlukları burada bulabilirsiniz. karşılaşabileceğiniz dizeler:
1) Ölçeklenebilirlik Sorunları.

Tel sayısı arttıkça bunları yönetmek zorlaşır. Zamanla birden fazla .strings dosyasını yönetmek hantal hale gelir.


2) Çoğaltma.

Her dilin ayrı bir dosya gerektirmesi, dizelerin yönetilmesinde olası tutarsızlıklara ve yinelenen çabalara yol açıyordu. Desteklenecek tek bir dil varsa sorun olmayabilir ancak birden fazla dili yönetmeniz gerektiğinde bazen çok zahmetli hale gelebilir.


3) Bağlam Eksikliği.

Ancak yorumlar NSLocalizedString'e eklenebilir; her zaman çevirmenin bağlamı tam olarak anlamasına yardımcı olmasalar bile bu, çeviride yanlışlıklara yol açabilir. Geliştiriciler genellikle bunları doğru şekilde dolduramayacak kadar tembeldir.

Çoğullaştırma için stringsdict geçiş

stringsdict dosyalarının kullanıma sunulması, Swift yerelleştirmesi için önemli bir gelişme sağladı ve bu, öncelikle çoğullaştırma sorunlarını giderdi. Bunun temel nedeni, çoğul dillerin farklı biçimlendirilmesi ve İngilizce için etkili olabilecek şeyin Rusça veya Arapça gibi diğer diller için geçerli olmayabilmesidir.


stringsdict tanıtılmasından önce bunları yönetmek çok zordu. stringsdict programcıların "bir", "birkaç", "çok" ve "diğer" gibi kategoriler için kurallar belirlemesine olanak tanır ve bu da diller arası çeviride aynı düzeyde doğruluk sağlar.


stringsdict dosyalarını anlama

Stringsdict dosyası, sayısal değerlere bağlı olarak yerelleştirilmiş dizeler oluşturmak için kullanılan bir XML özellik listesidir. Bu işlevsellik çoğul biçimleri doğru şekilde işlemeyi amaçlamaktadır çünkü farklı dillerin çoğul biçimleri işlemek için kendi farklı kuralları vardır.

Bir stringsdict dosyasının yapısı :

Bir stringsdict dosyası örneği, çoğullaştırılması gereken tüm dizelerin girişlerini içerir. Her giriş, bir anahtar ve kullanıcının farklı çoğul kategorileri temsil eden bir veya daha fazla alt anahtarı tanımladığı bir sözlükten oluşur.


 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>numberOfSongs</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@songs@</string> <key>songs</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One song</string> <key>other</key> <string>%d songs</string> </dict> </dict> </dict> </plist>


Çoğullaştırma için stringsdict kullanma örneği

Bir kullanıcının okuduğu makale sayısını gösteren bir uygulamamız olduğunu varsayalım. Ekranda okunan makale sayısının doğru çoğul halini gösteren bir mesaj görünmelidir.


İngilizce ve Lehçe için Localizable.stringsdict :

 <!-- English --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One article</string> <key>other</key> <string>%d articles</string> </dict> </dict> <!-- Polish --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>Jeden artykuł</string> <key>few</key> <string>%d artykuły</string> <key>many</key> <string>%d artykułów</string> <key>other</key> <string>%d artykułu</string> </dict> </dict>


Burada, Polonya yerelleştirmesi, farklı sayısal bağlamları doğru bir şekilde temsil etmek için birden fazla çoğul kategorinin (bir, birkaç, birçok, diğer) kullanılmasının gerekli olduğu bazı dillerdeki çoğul biçimlerin karmaşıklığını açıkça göstermektedir.


Hızlı Uygulama:

stringsdict girişleri, NSLocalizedString çağrılırken dosyada tanımlanan anahtarlara başvurularak kodda kullanılabilir.

 let count = getArticleCount() let formatString = NSLocalizedString("article_count", comment: "Count of articles read by a user") let message = String(format: formatString, count)

Bu yaklaşım, desteklenen dillerin grameriyle eşleşecek şekilde çıktı dizesini uyarlamalı olarak değiştirmenize olanak tanır; bunların hepsi yalnızca tek bir kod satırında.


stringsdict faydaları

  • Verimlilik: Bu, normalde yerelleştirme dosyalarının yönetilmesi ve değiştirilmesi için harcanacak zaman ve emekten tasarruf etmenize yardımcı olur.
  • Doğruluk: Doğrudan geliştirme ortamında daha fazla bağlamın verildiği kelime çevirilerinin doğruluğunu artırmaya yardımcı olur.
  • Esneklik: Yerelleştirilmiş içerikte gerçek zamanlı ve dinamik ayarlamaları destekler.

String Kataloglarla Modern Yerelleştirme Teknikleri

Xcode 15 ile sunulan yeni özelliklerden biri, geliştiricilerin iOS ve macOS uygulamalarının yerelleştirilmesini eskisinden daha kolay hale getirmesine yardımcı olması beklenen Dize Katalogları'dır. Localizable.strings ve stringsdict dizeleri depolamak ve düzenlemek için yararlı kaynaklar olsa da, Dize Katalogları, yerelleştirilmiş dizeleri yönetmek için çok daha uyumlu ve kullanıcı arayüzüne daha uygundur.


Dizi kataloglarında vurgulanması gereken ana hususlar şunlardır:

  • Görsel Düzenleyici: Geleneksel basit düz metin dosyalarının aksine, Dize Katalogları, Xcode'daki görsel bir düzenleyicinin yardımıyla düzenlenir; bu, yerelleştirilmiş dizelerin eklenmesini, değiştirilmesini veya silinmesini çok daha kolaylaştırır.


  • Satır İçi Dokümantasyon: Geliştiriciler, açıklamaları ve bağlamı doğrudan Dizi Kataloğu içerisinde sağlayabilir; bu da çevirinin netliğini ve doğruluğunu önemli ölçüde artırır.


  • Dinamik Yerelleştirme: Dizeler Kataloğu dinamik yerelleştirmeyi destekler, böylece geliştiricilerin uygulamadan çıkmadan yerelleştirilmiş dizeleri değiştirmesine izin verilir; bu, test ve yinelemeli geliştirme için idealdir.


  • Gelişmiş Çoğullaştırma ve Uyarlama: Ayrıca çoğul biçimlerin ve kullanıcı arayüzü öğelerine ve cihaz türlerine bağlı olarak varyasyonlara sahip metinlerin daha iyi kontrol edilmesini sağlayarak stringsdict bazı eksikliklerinin üstesinden gelir.


Hızlı Uygulama:

Diyelim ki bir mesajlaşma uygulamasında kullanıcılara, okunmayan mesajların sayısı hakkında bilgi vermeniz gerekiyor. Bildirim, alınan mesajların sayısını gösterecek şekilde dinamik olmalı ve içerik türüne göre ayarlanmalıdır.


Adım Adım Kurulum:

  1. String Kataloğu Oluşturun: Projenize yeni bir String Kataloğu ekleyin. Bu bir .stringcatalog dosyası oluşturacaktır.


  2. Giriş Ekle: Yerelleştirilmesi gereken her dizeye giriş eklemek için düzenleyiciyi kullanın. Daha sonra her giriş için anahtarları, varsayılan değerleri ve varsa çoğul kuralları veya uyarlanabilir parametreleri belirtin.


  3. İçeriği Yerelleştirin: Desteklenen her dil için çeviriler sağlayın, çoğullar için farklı formlar belirtin, cihaz türleri için uyarlamalar vb.


  4. Kodda Uygulama: Swift kodunuzdaki yerelleştirilmiş tanımlayıcıları kullanarak bu dizelere referans verin.


 <!-- String Catalog Entry --> <key>unread_messages_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@messages@</string> <key>messages</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>You have one unread message.</string> <key>other</key> <string>You have %d unread messages.</string> </dict> </dict>


Bu dizeye şu şekilde erişebilirsiniz:

 let unreadCount = fetchUnreadMessagesCount() let message = NSLocalizedString("unread_messages_count", value: "You have \(unreadCount) unread messages.", comment: "Notify about unread messages") print(message)



Dizi Kataloglarının Faydaları

  • Verimlilik: Yerelleştirme dosyalarını yönetmek için gereken zamandan ve emekten tasarruf sağlar.


  • Doğruluk: Doğrudan geliştirme ortamında daha fazla doğrudan bağlam sağlayarak doğruluğu artırır.


  • Esneklik: Yerelleştirilmiş içeriğe yönelik gerçek zamanlı ve hatta dinamik güncellemeleri destekler; bu, özellikle hızlı bir geliştirme döngüsünde faydalıdır.

Zorluklar

Dizi Katalogları önemli iyileştirmeler sunarken aynı zamanda zorlukları da beraberinde getiriyor. Birincisi, bu bir öğrenme eğrisidir; yeni bir sisteme veya bir şeyler yaratma biçimine alışmak zaman alır. Geliştiricilerin karşılaşabileceği diğer bir potansiyel zorluk, Dize Kataloglarını, geleneksel yerelleştirme dosyalarının zaten oluşturulduğu ve kullanımda olduğu mevcut projelere entegre etmek için gereken zaman ve ayarlamalarla bağlantılıdır.

Çözüm

Swift'deki Dizi Katalogları, yalnızca güçlü değil aynı zamanda esnek ve kullanıcı dostu araçlar sağlayan yerelleştirme teknolojisindeki en son gelişmedir. Ekipler, teknolojiyi geliştirme yaşam döngüsünün bir parçası olarak ekleyerek yerelleştirme sürecinde verimliliği ve kaliteyi büyük ölçüde artıracak; dolayısıyla daha iyi küresel ürünler yaratılacak.


Bu makaleyi Swift yerelleştirme araçlarındaki en son gelişmelerle sürekli olarak güncelleyeceğim. Eğer bir şeyi atladığımı düşünüyorsanız ya da söylediklerim hakkında düşünceleriniz varsa aşağıdaki yorum kutusundan paylaşabilirsiniz. Daha fazla ilginç bilgi ve en son haberler için beni takip ettiğinizden emin olun!