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.
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
TemelleriYerelleş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.
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ı
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:
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:
String Kataloğu Oluşturun: Projenize yeni bir String Kataloğu ekleyin. Bu bir .stringcatalog
dosyası oluşturacaktır.
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.
İç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.
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ı ö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.
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!