Çoğullaştırılmış bir Mac uygulaması etiketini tamamlamak için Xcode’da çoğul varyasyonları ekleyin, desteklenen her yerelleştirme için gereken tüm kategorileri sağlayın ve görüntülenen sonuçları test edin. Bu kılavuzda sentetik bir öğe seçimi mesajı kullanılıyor.
Amaç, SwiftUI Mac uygulamasındaki sayıya bağlı tek bir etiketi tamamlamaktır. Mesaj, kaç öğe seçildiğini bildirir, negatif olmayan bir tam sayı kabul eder ve bu anlamı çeviriler boyunca korur. İş akışı; doldurulmuş bir katalog girdisi için net bir kabul ölçütü oluşturmak üzere kategori kapsamını, yer tutucu denetimlerini ve çalışma zamanı testlerini bir araya getirir.
Çoğul kapsamının tamamlanması ne gerektirir?
Apple, Xcode 15 ve sonraki sürümlerde çoğul yerelleştirmesi için String Catalogs kullanılmasını önerir. Çoğul belgelerinde zorunlu bir yedek ile dilbilgisi açısından eksiksizlik birbirinden ayrılır: other, bir strings sözlüğünde zorunludur; ancak dile özgü ek kategorilerin atlanması dilbilgisinin yanlış olmasına yol açabilir. İngilizcede one ve other gereklidir; zero kategorisi isteğe bağlıdır. Çoğul içeren dizeleri yerelleştirme.
Olası kategori adları şunlardır: zero, one, two, few, many ve other. Bunlar, her dilde ortak olan altı sayısal aralığı değil, dile bağlı dilbilgisel grupları tanımlar. one adlı bir kategori, yalnızca sayının bire eşit olup olmadığını denetleyen evrensel bir uygulama kuralına dönüşmemelidir. Unicode, kategorileri sayıların bir ifadede gerektirdiği değişikliklere göre tanımlar; bu değişiklikler yalnızca isimle sınırlı değildir. Çoğul Kuralları.
Bu görev için aşağıdaki mesaj sözleşmesini kullanın. Bunlar Apple’ın zorunlu kıldığı gereksinimler değil, örnek uygulamaya yönelik gereksinimlerdir.
| Sözleşme alanı | Bu örneğin gereksinimi |
|---|---|
| Mesaj anahtarı | selection.count |
| İngilizce varsayılan değer | \(count) items selected |
| Girdi | count adlı, negatif olmayan bir Swift Int |
| Anlam | O anda seçili olan öğelerin sayısı |
| Çıktı | Sayıyı içeren, yerelleştirilmiş ve eksiksiz tek bir etiket |
| Kapsam | Kaynak yerelleştirme dâhil desteklenen tüm yerelleştirmeler |
| Kabul ölçütü | Gerekli kategorilerin sağlanması, sayısal yer değiştirme bilgisinin korunması ve temsili çıktıların denetlenmesi |
Sayının görünmesini zorunlu tutmak bu etiket için bilinçli bir tercihtir. Apple, sayıyı yazıyla ifade eden veya sayısal biçim belirtecini atlayan çoğul varyantlara izin verir. Farklı bir mesaj sözleşmesi buna izin verebilirdi. Burada sayıyı görünür tutmak, etiketi anlattığı seçimle karşılaştırmayı kolaylaştırır. Çoğul içeren dizeleri yerelleştirme.
Swift mesajını kataloğa bağlama
Swift’in String.LocalizationValue türü, çalışma zamanında enterpolasyon içeren yerelleştirilebilir metni destekler. Sabit bir tanımlayıcının İngilizce kaynak metinden farklı olması gerektiğinde Apple, ayrı bir defaultValue parametresi alan String başlatıcısını önerir. selection.count buna uyar: tanımlayıcı mesajı adlandırırken varsayılan değer İngilizce metni sağlar. String.LocalizationValue.
Küçük bir test uygulaması için Xcode 15 veya sonraki bir sürümde SwiftUI kullanan bir macOS uygulama projesi oluşturun ve macOS dağıtım hedefini 12 veya sonraki bir sürüme ayarlayın. Oluşturulan uygulama giriş dosyasını aşağıdaki eksiksiz programla değiştirin; hedefte yalnızca bir @main bildirimi bulunsun. Katalog adımlarına geçmeden önce Localizable.xcstrings dosyasını uygulama hedefine ekleyin. Program Xcode ve macOS SDK’sını gerektirir; bu araştırma ortamında derlenmemiştir.
import Foundation
import SwiftUI
@main
struct PluralSampleApp: App {
var body: some Scene {
WindowGroup {
PluralSampleView()
}
}
}
struct PluralSampleView: View {
@State private var count: Int = 1
private let samples: [Int] = [
0, 1, 2, 3, 4, 5, 10, 11, 12,
20, 21, 22, 100, 101, 102, 1_000_000
]
private var selectionLabel: String {
String(
localized: "selection.count",
defaultValue: "\(count) items selected",
comment: "Selection summary. The integer is the number of selected items. Keep the count visible in every plural variant."
)
}
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Picker("Sample count", selection: $count) {
ForEach(samples, id: \.self) { value in
Text(verbatim: String(value)).tag(value)
}
}
Text(verbatim: selectionLabel)
}
.padding(24)
.frame(minWidth: 360)
}
}
Sayısal seçici girdileri test değerleridir. Yerelleştirilmiş özet String(localized:defaultValue:comment:) ile çözümlenir, ardından elde edilen dize görüntülenir. Apple, başlatıcının ilk bağımsız değişkeninin arama anahtarını, varsayılan değerinin kaynak metni sağladığını ve yorumların çeviri bağlamı sunduğunu belgeliyor. Xcode, derleme sırasında yerelleştirilebilir API’lere aktarılan dizeleri çıkarır. Uygulamanızın metnini çeviriye hazırlama.
Tam sayıyı yerelleştirilebilir enterpolasyonun içinde tutun. Bu sözleşme kapsamında, uygulama dallarında ayrı İngilizce tekil ve çoğul cümleleri önceden oluşturmayın. Tek mesaj kullanmak, kataloğa net bir sorumluluk verir: sağlanan sayıya uygun yerelleştirilmiş ifadeyi seçmek.
Desteklenen her yerelleştirme için kategorileri sağlama
Varyasyon yapısını oluşturmak için Xcode düzenleyicisini kullanın:
- Kataloğu doldurmak için
Product > Buildseçeneğini seçin. Localizable.xcstringsdosyasını açıp kaynak yerelleştirmeyi seçin.selection.countöğesine Control tuşuyla tıklayın veVary by Pluralseçeneğini belirleyin.- Kaynak dilin her varyasyonunu doldurun.
- Kenar çubuğundaki
Adddüğmesini kullanarak desteklenen yerelleştirmeleri ekleyin, ardından varyasyonlarını doldurun.
Xcode, dile özgü çoğul biçimleri ekler ve enterpolasyonun biçim belirtecini belirler. Kaynak yerelleştirmeye çoğul varyasyonu uygulamak, diller arasındaki varyasyon yapısını eşzamanlı tutar; yalnızca başka bir yerelleştirmeye uygulamak ise sadece o yerelleştirmeyi etkiler. String Catalog ile metni yerelleştirme ve varyasyon oluşturma.
Bu tam sayı enterpolasyonu için İngilizce girdiler şöyle olabilir:
| İngilizce kategori | Katalog değeri |
|---|---|
one |
%lld item selected |
other |
%lld items selected |
Gerçek enterpolasyon türü için Xcode’un oluşturduğu belirteci kullanın. Apple’ın belgelenmiş tam sayı örneğinde %lld kullanılır; çeviriye farklı bir yer tutucu kopyalamak bağımsız değişken sözleşmesini bozabilir. Xcode başlangıçta varyasyon alanlarını anahtarın değeriyle doldurur; bu yüzden her alandaki ifadeyi inceleyin. String Catalog ile metni yerelleştirme ve varyasyon oluşturma.
Gerçek her yerelleştirme tanımlayıcısı için bir satır içeren bir kapsam çalışma sayfası oluşturun. Bu mesaj için Xcode’un oluşturduğu kategorileri, her birinin tamamlanmış metne sahip olup olmadığını ve hangi girdileri test edeceğinizi kaydedin. Projedeki gerçek tanımlayıcıları kullanmak, genel bir dil etiketinin incelenmemiş bir yerelleştirmeyi gizlemesini önler.
İngilizce kategori kümesini her satıra kopyalamayın. Benzer şekilde, her yerde altı kategorinin tümünü istemeyin. Çalışma yapısını katalogdan alın, ardından test girdilerini seçerken ilgili dilin temel sayı çoğul kurallarına başvurun. Temel sayı kuralları miktarlarla, sıra sayı kuralları ise konumlarla ilgilidir ve farklı bir soruya yanıt verir. Unicode bu kural türlerini ayrı ayrı belgeler. Unicode Teknik Standardı #35: Sayılar.
Yapıyı, yer tutucuları ve görüntülenen metni ayrı ayrı doğrulama
Her biri farklı bir soruyu yanıtladığından üç denetim kullanın. Eksik kategori bir kapsam sorunudur; yanlış yer tutucu bir biçimlendirme sorunudur; kulağa tuhaf gelen bir cümle ise ifade sorunudur. Bunları ayrı kaydetmek, bir sonraki düzeltmeyi netleştirir.
Kategori kapsamını denetleme
Çalışma sayfasındaki her satır için beklenen kategorileri doldurulmuş katalog girdileriyle karşılaştırın. other öğesinin bulunduğunu ve hiçbir beklenen kategorinin boş değer ya da kaynak metnin tamamlanmamış kopyasını içermediğini doğrulayın.
Basit bir eksiksizlik denetimi için beklenen kümeyi, bu yerelleştirme için oluşturulmuş kategoriler ile bilerek eklenen desteklenen geçersiz kılmalar olarak tanımlayın. Eksik küme, bitmiş metin içeren kategoriler kümesinin beklenen kümeden çıkarılmasıyla bulunur. Bu makalenin kabul ölçütüne göre, eksik kalan her kategori mesajın tamamlanmamış olduğu anlamına gelir. Bu, belgelenen varyasyon iş akışından türetilmiş pratik bir inceleme yöntemidir; Xcode’un bu kontrol listesini aynen zorunlu kıldığı iddiası değildir.
İki kategori için aynı ifade geçerli biçimde kullanılabiliyorsa gerektiği yerlerde bu ifadeyi koruyup iki girdiyi de inceleyin. Amaç, gerekli kategoriler boyunca mesajın anlamını korumaktır; her dize çiftinin görünür biçimde farklı olması gerekmez.
Sayısal yer değiştirmeyi denetleme
Kataloğu derleyin ve tanılama sonuçlarını inceleyin. Apple, biçim belirteçlerinin uyuşmaması gibi yaygın sorunlara yönelik String Catalog doğrulamasını belgeliyor. Bu tanılama sorunlarını giderin, ardından her varyantın sayıyı görüntüleme gereksinimini hâlâ karşılayıp karşılamadığını inceleyin. Çok dilli uygulamalar oluşturma.
Bu tek bağımsız değişkenli örnekte sayısal yer tutucunun bulunduğunu, türünün hâlâ sayısal olduğunu ve amaçlanan yerde bir kez eklendiğini denetleyin. Başarılı bir derleme yararlı bir kanıttır; ancak kabul kararı için kategori kapsamı ve gerçekten görüntülenen metin de gerekir.
Mac uygulamasında temsili sayıları test etme
Product > Scheme > Edit Scheme seçeneğini belirleyin, Run öğesini seçin ve Options bölümünü açın. App Language ile geçerli App Region değerini ayarlayın, iletişim kutusunu kapatın ve Mac uygulamasını çalıştırın. Desteklenen her yerelleştirme için tekrarlayın. Apple, yerelleştirilmiş çıktıyı test etmek için bu şema tabanlı yöntemi belgeliyor. Uygulamanızı çalıştırırken yerelleştirmeleri test etme.
Örnek seçici başlangıç niteliğinde bir sayı kümesi sağlar; tüm kategorileri evrensel olarak kapsamaz. Bir yerelleştirme için test satırını tamamlanmış saymadan önce o yerelleştirmeye uygun değerler ekleyin.
| Test seçimi | Denetlediği durum |
|---|---|
0, 1 ve 2 |
Boş, tek öğeli ve az sayıda öğe içeren seçimler |
| Gerekli her kategori için en az bir temsili girdi | Yerelleştirmenin dilbilgisel ayrımlarının kapsamı |
| İlgili kural sınırlarının iki tarafındaki değerler | En küçük sayıların ötesindeki kategori değişiklikleri |
| Geçerli büyük bir sayı | Sayısal yer değiştirme ve kullanılabilir etiket alanı |
| Test edilen her girdi | Anlam, eksiksiz ifade ve görünür sayı |
Unicode kuralları kategorileri koşullarla ve örnek değerlerle ilişkilendirir; kesir basamakları dâhil sayısal ayrıntılar önemli olabilir. Bu sözleşme yalnızca tam sayıları kabul eder. Uygulama ileride ondalık miktarları kabul ederse, tam sayı sonuçlarının kapsamı hâlâ kanıtladığını varsaymak yerine enterpolasyonu, kaynak ifadeyi ve testleri birlikte güncelleyin. Unicode Teknik Standardı #35: Sayılar.
Beklenmeyen bir sonucu teşhis etme
Bir sonraki incelemeyi gözlenen belirtiye göre seçin:
| Belirti | Sonraki işlem |
|---|---|
selection.count katalogda yok |
Yeniden derleyin ve yerelleştirilebilir çağrıyı ve seçilen tabloyu inceleyin |
| Yalnızca bir yerelleştirmede çoğul varyasyonları var | Vary by Plural seçeneğinin nerede uygulandığını yeniden inceleyin |
| Bir varyantta hâlâ İngilizce çoğul ifadesi var | Önceden doldurulmuş alanı inceleyip tamamlanmış çevirisini sağlayın |
| Görüntülenen sayı eksik veya hatalı | Varyantın yer tutucusunu Xcode’un oluşturduğu belirteçle ve mesaj sözleşmesiyle karşılaştırın |
| Daha büyük bir sayı beklenmeyen bir ifade kullanıyor | İlgili yerelleştirmenin kategori kuralını denetleyin ve temsili bir test ekleyin |
| Doğru ifade alana sığmıyor | Görünümü ayarlayıp etiketin tamamını yeniden test edin |
Xcode 15 öncesi sürümleri kullanan eski bir proje için Apple’ın desteklediği yol .strings ve .stringsdict kaynaklarını kullanır. Çoğul sözlüğü dile özgü varyantları sağlar ve other gerektirir; ancak doğru dilbilgisi için gereken diğer kategorileri sağlama ihtiyacını ortadan kaldırmaz. Çoğul içeren dizeleri yerelleştirme.
Desteklenen her yerelleştirme için kapsam satırı tamamlandığında, yer tutucular sözleşmeyi karşıladığında ve temsili sayılar çalışan uygulamada amaçlanan etiketi ürettiğinde mesajı tamamlayın. Desteklenen yerelleştirmeler, sayısal girdi türü veya mesajın anlamı değiştiğinde bu satırları yeniden inceleyin.
Kaynaklar
- String Catalog ile metni yerelleştirme ve varyasyon oluşturma — Apple
- Çoğul içeren dizeleri yerelleştirme — Apple
- String.LocalizationValue — Apple
- Uygulamanızın metnini çeviriye hazırlama — Apple
- Uygulamanızı çalıştırırken yerelleştirmeleri test etme — Apple
- Çok dilli uygulamalar oluşturma — Apple
- Çoğul Kuralları — Unicode Consortium
- Unicode Teknik Standardı #35: Unicode Ortak Yerel Ayar Verileri ve Kuralları (CLDR), Bölüm 3: Sayılar — Unicode Consortium