Xcode’da kullanılmayan yerelleştirme anahtarlarını kaldırırken Stale durumundaki girdileri inceleme adayı olarak değerlendirin. Silmeden önce anahtarın çalışma zamanında nasıl oluşturulduğunu kontrol edin, gerekli dinamik iletileri elle yönetilen girdiler olarak koruyun ve temizlikten sonra etkilenen Mac uygulaması ekranlarını test edin.
Bu kılavuz, String Catalog kullanan bir SwiftUI Mac uygulamasının bakımını yapan geliştiricilere yöneliktir. Yapılacak iş, katalogda temizliktir: kaldırılabilecek iletileri belirlerken uygulamanın hâlâ gösterdiği etiketleri ve sayım iletilerini koruyun. Aşağıdaki karar tablosu, çıkarım kanıtlarını çalışma zamanı davranışından ayırır.
Eski bir yerelleştirme anahtarı aslında ne anlama gelir?
Xcode, derlemeler sırasında yerelleştirilebilir dizeleri keşfeder. Apple, çıkarımın geçerli şemayı ve platformu kapsadığını açıklar. Daha önce çıkarılmış bir dize artık bulunmadığında Xcode, çevrilmemiş bir girdiyi otomatik olarak kaldırabilir; çevirileri olan bir girdi ise kalır ve Stale durumunu alır. Bu durum, Xcode’un kodda artık bu dizeyi bulamadığı anlamına gelir. Apple, silme işlemini dizenin artık gerekli olmadığının doğrulanması koşuluna bağlar. String Catalog’ları keşfetme
Bunun pratik sonucu, kaynakta bir başvurunun bulunmamasının incelemeyi başlatmasıdır. panel.compact için tam eşleşmeli arama, doğrudan yazılmış bir başvuruyu bulabilir; ancak kodun bu anahtarı seçilen bir modu panel. ile birleştirerek oluşturup oluşturmadığını gösteremez. Hem aday anahtarı hem de arama anahtarlarını üreten kodu inceleyin.
Her aday için aşağıdaki inceleme tablosunu kullanın. Bu, belgelenmiş çıkarım kapsamından türetilmiş bir karar yardımcısıdır; ek bir Xcode özelliği değildir.
| İnceleme sırasında bulunan kanıt | Karar | Sonraki adım |
|---|---|---|
| Kaldırılmış bir ekran bu girdiyi kullanan tek yerdi; çalışma zamanında anahtar üreten bir kod kalmadı | Adayı sil | Girdiyi kaldırın, ardından yeniden derleyip değişikliği kontrol edin |
| Çalışma zamanındaki kod bu anahtarı aynen üretebilir | Koru | Elle yöneterek saklayın veya aramayı açık yerelleştirilebilir başvurularla değiştirin |
| Anahtara başka bir hedefte veya derleme koşulunda hâlâ başvuruluyor | Koru | İlgili yapılandırmayı derleyip inceleyin |
| Başka bir tabloda benzer adlı bir anahtar var | Ayrı olarak incele | Her aramanın kullandığı tabloyu ve kaynak paketini doğrulayın |
| Kullanıcı bulunamadı, ancak anahtarı üreten kod belirsiz | Ertele | Silme kararı vermeden önce üretici kodun izini sürün |
Xcode’da işe yarar bir başlangıç noktası nasıl oluşturulur?
Önce kataloğun geri yüklenebilir bir kopyasını kaydedin veya geçerli durumunu kaydedin. Ardından uygulama projesini açın ve incelemek istediğiniz Mac şemasını seçin. Etkilenen arayüze ileti sağlayabilecek hedefleri ve koşullu yapılandırmaları kaydedin; böylece incelemenin kapsamı açıkça belirlenmiş olur.
Project gezgininde kataloğu seçip Product > Build komutunu seçin. Apple, derlemelerin yerelleştirilebilir kaynak metninden String Catalog’ları doldurup güncellediğini belgeliyor. Katalog seçiliyken Editor > Assistant komutunu seçin, ardından kaynak konumunu incelemek için bir anahtar seçin. Katalogdan kaynağa da gidilebilir. String Catalog ile metni yerelleştirme ve farklılaştırma
Beklenen Swift dizeleri eksikse hedefin Use Compiler to Extract Swift Strings derleme ayarının etkin olduğunu kontrol edin. Apple, derleyiciyle çıkarım için bu önkoşulu belgeliyor. Eksik çıkarım içeren bir katalog, neyin kaldırılacağına karar vermek için iyi bir başlangıç noktası değildir. SwiftUI uygulamanızı yerelleştirme
Her aday için anahtarı, kataloğu, olası kullanıcıyı ve kararı kaydedin. Önce anahtarın tam hâlini, ardından sabit önekini ve ilgili yerelleştirme sarmalayıcılarını arayın. Bu sarmalayıcılara veri sağlayan model değerlerini ve paketlenmiş arama verilerini inceleyin. Başka bir hedef veya derleme koşulu kaynakları değiştirdiğinde ilgili derlemeleri tekrarlayın.
İki girdi aynı metni gösteriyor diye kararları birleştirmeyin. Apple’ın yerelleştirme API’leri tablo adlarını kabul eder ve ana uygulamanın dışındaki kaynaklar farklı bir paket gerektirebilir. Başka bir girdiyi yedek olarak kabul etmeden önce aramanın tablosunu ve paketini izleyin. Uygulamanızın metinlerini çeviriye hazırlama
Dinamik başvurulan iletiler nasıl korunur?
Apple, özellikle anahtarları dinamik olarak oluşturulan dizeler için elle yönetimi belgeliyor. Gerekli girdiyi seçin ve denetçisini kullanarak elle yönetilecek şekilde ayarlayın. Bu tür girdiler, derleme sonrası yerelleştirme eşitlemesinde Xcode tarafından güncellenmez veya kaldırılmaz. Eksik bir dinamik girdi için Apple, kataloğun artı düğmesini kullanarak elle dize eklemeyi de gösteriyor. String Catalog’ları keşfetme
Elle yönetim açık bir bakım kuralı gerektirir. Geçerli anahtarları, bunları seçen kodun veya verinin yanında kaydedin ve katalog yorumlarında kullanımlarını açıklayın. Desteklenen bir mod daha sonra kaldırıldığında elle yönetilen girdisini de inceleyin; otomatik çıkarım bu temizliği sizin yerinize yapmaz.
SwiftUI’nin gerçekten arama yapıp yapmadığını kontrol edin
Text’e aktarılan bir String değişkeni, yerelleştirme yapılmadan görüntülenir. Değişkeni arama anahtarı olarak kullanmak için Apple, ondan bir LocalizedStringKey oluşturulmasını belgeliyor. Doğrudan Text’e aktarılan sabit bir değer ise otomatik olarak yerelleştirilebilir yolu izler. Bu aşırı yüklemeler kaynak dilde aynı çıktıyı verebilir, ancak farklı davranır. LocalizedStringKey
Aşağıdaki eksiksiz tanıtım uygulaması, çalışma zamanında seçilen anahtarı enterpole edilen sayıdan ayrı tutar. Xcode 15 veya daha yeni bir sürümle ve macOS 13 dağıtım hedefiyle oluşturulmuş, gözden çıkarılabilir bir SwiftUI Mac uygulaması projesinde oluşturulan uygulama bildirimini bu kodla değiştirin. Yalnızca bir @main bildirimi bırakın. Kod, belgelenmiş API’lerle karşılaştırılarak incelendi; Swift araç zinciri kullanılamadığı için burada derlenmedi.
import SwiftUI
@main
struct CatalogReviewDemoApp: App {
var body: some Scene {
WindowGroup {
CatalogReviewView()
}
}
}
struct CatalogReviewView: View {
@State private var compact = true
@State private var itemCount = 2
private var selectedKey: String {
"panel." + (compact ? "compact" : "expanded")
}
var body: some View {
VStack(alignment: .leading, spacing: 12) {
Toggle("Compact layout", isOn: $compact)
Text(LocalizedStringKey(selectedKey))
Text("\(itemCount) items",
comment: "Number of items in the sample panel.")
Button("Add item") {
itemCount += 1
}
}
.padding()
.frame(minWidth: 320)
}
}
Uygulama hedefine Localizable.xcstrings ekleyin. panel.compact ve panel.expanded için kaynak değerleri Compact panel ve Expanded panel olan, elle yönetilen girdiler ekleyin. Sabit iletileri çıkarmak için projeyi derleyin. Açık LocalizedStringKey dönüşümü çalışma zamanı araması yapılmasını sağlar; çıkarıcıya oluşturulabilecek her anahtarın sabit bir bildirimini vermez.
Az sayıda, sonlu seçenek için anahtar oluşturmayı her dalda açık yerelleştirilebilir sabit değerlerle değiştirmeyi değerlendirin. İletileri bileşenler arasında aktaran özel arayüzlerde Apple, tablo, yorum ve varsayılan değer gibi yerelleştirme bilgilerini taşıyan LocalizedStringResource türünü öneriyor. Desteklenen ileti kümesinin tamamını incelemeyi kolaylaştıran gösterimi seçin. Uygulamanızın metinlerini çeviriye hazırlama
Değişen sayılar neden değişen anahtarlardan farklıdır?
Tanıtım uygulamasında bir düzen seçildiğinde, uygulamanın aradığı ileti anahtarı değişir. itemCount değiştiğinde ise tek bir yerelleştirilebilir iletiye farklı bir bağımsız değişken sağlanır. SwiftUI enterpolasyonu, gömülü değerleri yerelleştirme için biçim yer tutucularına dönüştürür; çalışma zamanı görüntülemede bu değerlere karşılık gelen değerleri sağlar. SwiftUI uygulamanızı yerelleştirme
Bu nedenle görüntülenen 2 öğe, 3 öğe ve 4 öğe etiketleri için ayrı anahtarlara ihtiyacınız yoktur. Örneği derleyin, çıkarılan sayım iletisini bulun, anahtarına Control tuşuyla tıklayın ve Vary by Plural seçeneğini belirleyin. İngilizce kaynak yerelleştirmesi için, Xcode’un gösterdiği tamsayı yer tutucusunu kullanarak One için %lld item, Other için %lld items girin. Apple, bu sayım iletisi iş akışını ve desteklenen diğer yerelleştirmeler için uygun çoğul biçimlerinin eklenmesini belgeliyor. String Catalog ile metni yerelleştirme ve farklılaştırma
Temizlik sırasında sayım iletisini, varyasyonları da dâhil olmak üzere eksiksiz bir kaynak olarak inceleyin. Kaynak kodda 4 öğe gibi görüntülenen bir ifadenin bulunmaması, temelindeki enterpolasyonlu iletinin kullanılıp kullanılmadığı hakkında bilgi vermez. Aynı şekilde, bir sayım şablonunu korumak, aynı panelde görünüyorlar diye ilgisiz bir dinamik anahtarı korumaz.
Temizlikte hangi girdiler gerçekten kaldırılmalı?
24 adayın incelendiği örnek bir durumu ele alalım. Bu sayılar ölçülmüş bir proje sonucunu değil, kurgusal bir örneği anlatır.
| İnceleme sonucu | Girdi sayısı | Eylem |
|---|---|---|
| Tek kullanıcıları kaldırılmış bir panele aitti | 9 | Panelin ve arama verilerinin kaldırıldığını doğruladıktan sonra silin |
| Anahtarlara çalışma zamanı seçimiyle hâlâ ulaşılabiliyor | 8 | Koruyun ve elle yönetimi belgeleyin |
| Başvurular başka bir hedefe veya koşullu derlemeye ait | 5 | Koruyun ve ilgili derleme kapsamını doğrulayın |
| Anahtarın kaynağı henüz çözülemedi | 2 | İnceleme tamamlanana kadar tutun |
| İncelenen toplam | 24 | 9 silme adayı |
Bu hesaplama, temizlik kararının denetlenebilir olmasını sağlar: incelenen 24 girdi, 24’ünün de silineceği anlamına gelmez. Dokuz silme adayının her biri için kaldırılmış kullanıcıyı ve kontrol edilen çalışma zamanı arama yollarını belirten kısa bir gerekçe kaydedin. Sekiz dinamik girdi için izin verilen anahtar kümesini kaydedin ki sonraki incelemede aynı karar tekrarlanabilsin.
Yalnızca doğrulanmış adayları kaldırın, ardından katalog farkını inceleyin. Değişikliğin amaçlanan anahtarları ve bunlara bağlı çevirileri içerdiğini, ilgisiz çoğul veya aygıt varyasyonlarının kaybolmadığını kontrol edin. İlgili yapılandırmaları yeniden derleyin. Silinen bir anahtar çıkarım yoluyla geri dönerse yeniden silmeden önce kullanıcısını tekrar inceleyin.
Mac’inizde korunan iletileri nasıl doğrularsınız?
Product > Scheme > Edit Scheme yolunu izleyin, Run seçeneğini belirleyin ve Options bölümünü açın. App Language alanından mevcut desteklenen bir yerelleştirmeyi seçin, düzenleyiciyi kapatın ve Mac hedefinde uygulamayı çalıştırın. Apple, yerelleştirilmiş derlemeleri test etmek için bu şema denetimlerini belgeliyor. Uygulamanızın desteklediği yerelleştirmelerin her biri için bunu tekrarlayın. Uygulamanızı çalıştırırken yerelleştirmeleri test etme
Tanıtım uygulamasındaki her iki düzen dâhil olmak üzere izin verilen tüm dinamik seçimleri deneyin. Uygulamanın tanımlayıcılar yerine beklenen katalog değerlerini gösterdiğini doğrulayın. Sayım iletilerinde 0, 1, 2 ve 12 gibi örnek değerleri kontrol edin; desteklenen yerelleştirmeleriniz gerektiriyorsa ek çoğul kategorilerini de doğrulayın. Örneğin başlangıç sayısını değiştirmek bu test değerlerine ulaşmak için yeterlidir.
Korunan bir ileti yanlış görüntülendiğinde kataloğu değiştirmeden önce anahtarın tam hâlini, tabloyu, paketi ve Text başlatıcısını inceleyin. Apple’ın daha yeni oluşturulan sembol iş akışı, elle yönetilen kaynaklara başvurmayı da kolaylaştırabilir: Xcode 26, String Catalog sembol oluşturmayı kullanıma sundu; mevcut projelerde bu özellik Generate String Catalog Symbols ayarıyla etkinleştirilir. Bu, isteğe bağlı bir yeniden düzenleme yoludur; elle yönetilen, başvurulmayan bir kaynağın kullanılmadığının kanıtı değildir. Kodla birlikte: Xcode ile yerelleştirmeyi keşfedin
Sonuç, açıklanabilir az sayıda silme adayı ve belgelenmiş, korunan dinamik iletiler listesi olsun. Katalogdaki kalan girdilerin tanımlı kullanıcıları bulunmalı; çalışma zamanında seçilen anahtarlar ve biçimlendirilmiş sayım iletileri Mac arayüzünde çalışmaya devam etmelidir.
Kaynaklar
- String Catalog’ları keşfetme — Apple Developer
- String Catalog ile metni yerelleştirme ve farklılaştırma — Apple Developer
- Uygulamanızın metinlerini çeviriye hazırlama — Apple Developer
- LocalizedStringKey — Apple Developer
- SwiftUI uygulamanızı yerelleştirme — Apple Developer
- Uygulamanızı çalıştırırken yerelleştirmeleri test etme — Apple Developer
- Kodla birlikte: Xcode ile yerelleştirmeyi keşfedin — Apple Developer