Untuk membuang kunci penyetempatan yang tidak digunakan dalam Xcode, anggap entri Stale sebagai calon untuk disemak. Semak pembinaan kunci semasa masa jalan sebelum memadam, kekalkan mesej dinamik yang diperlukan sebagai entri yang diurus secara manual, dan uji skrin app Mac yang terjejas selepas pembersihan.
Panduan ini ditujukan kepada pembangun yang menyelenggara app Mac SwiftUI dengan Katalog Rentetan. Tugas ini ialah pembersihan katalog: kenal pasti mesej yang boleh dibuang sambil mengekalkan label dan mesej bilangan yang masih dipaparkan oleh app. Panduan keputusan di bawah membezakan bukti pengekstrakan daripada tingkah laku semasa masa jalan.
Apakah maksud sebenar kunci penyetempatan lapuk?
Xcode menemui rentetan yang boleh disetempatkan semasa binaan. Apple menjelaskan bahawa pengekstrakan meliputi skema dan platform semasa. Apabila rentetan yang pernah diekstrak hilang, Xcode boleh membuang entri yang belum diterjemahkan secara automatik; entri yang mempunyai terjemahan dikekalkan dan menerima keadaan Stale. Keadaan itu bermaksud Xcode tidak lagi menemui rentetan tersebut dalam kod. Apple menyatakan dengan jelas bahawa pemadaman hanya wajar selepas mengesahkan rentetan itu tidak lagi diperlukan. Temui Katalog Rentetan
Akibatnya, ketiadaan rujukan sumber memulakan penyiasatan. Carian tepat untuk panel.compact boleh menemui rujukan literal, tetapi tidak dapat menentukan sama ada kod membina kunci itu dengan menggabungkan panel. dengan mod yang dipilih. Semak calon kunci dan kod yang menghasilkan kunci carian.
Gunakan jadual semakan yang dicadangkan ini untuk setiap calon. Jadual ini ialah panduan keputusan berdasarkan skop pengekstrakan yang didokumenkan, bukannya ciri Xcode tambahan.
| Bukti yang ditemui semasa semakan | Keputusan | Tindakan seterusnya |
|---|---|---|
| Skrin yang dibuang ialah satu-satunya pengguna; tiada lagi kod yang menghasilkan kunci semasa masa jalan | Buang calon | Buang entri itu, kemudian bina semula dan semak perubahan |
| Kod semasa masa jalan masih boleh menghasilkan kunci tepat ini | Kekalkan | Kekalkan melalui pengurusan manual atau gantikan carian dengan rujukan setempat yang eksplisit |
| Kunci itu masih dirujuk dalam sasaran lain atau syarat binaan | Kekalkan | Bina dan periksa konfigurasi yang berkaitan |
| Kunci yang namanya serupa wujud dalam jadual lain | Siasat secara berasingan | Sahkan jadual dan ikatan sumber yang digunakan oleh setiap carian |
| Tiada pengguna ditemui, tetapi kod yang menghasilkan kunci tidak jelas | Tangguhkan | Jejaki penghasil kunci sebelum membuat keputusan untuk memadam |
Bagaimanakah anda menetapkan garis dasar yang berguna dalam Xcode?
Mula-mula, simpan salinan katalog yang boleh dipulihkan atau komitkan keadaannya sekarang. Kemudian buka projek app dan pilih skema Mac yang ingin disemak. Catat sasaran dan konfigurasi bersyarat yang boleh membekalkan mesej kepada antara muka yang terjejas; langkah ini memastikan semakan mempunyai skop yang jelas.
Pilih katalog dalam navigator Projek dan pilih Product > Build. Apple mendokumenkan bahawa binaan mengisi dan mengemas kini Katalog Rentetan daripada teks sumber yang boleh disetempatkan. Dengan katalog dipilih, pilih Editor > Assistant, kemudian pilih kunci untuk memeriksa lokasi sumbernya. Katalog itu juga menyediakan navigasi kembali ke sumber. Menyetempatkan dan mempelbagaikan teks dengan katalog rentetan
Jika rentetan Swift yang dijangka tiada, semak sama ada tetapan binaan Use Compiler to Extract Swift Strings untuk sasaran itu diaktifkan. Apple mendokumenkan prasyarat ini untuk pengekstrakan oleh pengkompil. Katalog yang pengekstrakannya tidak lengkap ialah garis dasar yang kurang sesuai untuk menentukan perkara yang patut dibuang. Setempatkan app SwiftUI anda
Bagi setiap calon, catat kunci, katalog, pengguna yang disyaki dan keputusan. Cari kunci tepat dahulu, kemudian awalan stabilnya dan pembalut penyetempatan yang berkaitan. Periksa nilai model dan data carian yang digabungkan yang membekalkan nilai kepada pembalut tersebut. Ulang binaan yang berkaitan apabila sasaran lain atau syarat kompilasi mengubah sumber yang disertakan.
Jangan gabungkan keputusan hanya kerana dua entri memaparkan teks yang sama. API penyetempatan Apple menerima nama jadual, dan sumber di luar app utama mungkin memerlukan ikatan yang berbeza. Jejaki jadual dan ikatan bagi carian itu sebelum menganggap entri lain sebagai pengganti. Menyediakan teks app anda untuk terjemahan
Bagaimanakah anda mengekalkan mesej yang dirujuk secara dinamik?
Apple mendokumenkan pengurusan manual khusus untuk rentetan yang kuncinya dibina secara dinamik. Pilih entri yang diperlukan dan gunakan pemeriksanya untuk menjadikannya diurus secara manual. Entri sedemikian tidak dikemas kini atau dibuang oleh penyegerakan penyetempatan selepas binaan Xcode. Untuk entri dinamik yang tiada, Apple juga menunjukkan cara menambah rentetan manual dengan butang tambah katalog. Temui Katalog Rentetan
Pengurusan manual memerlukan peraturan penyelenggaraan yang jelas. Catat kunci yang sah bersebelahan kod atau data yang memilihnya, dan jelaskan penggunaannya dalam komen katalog. Apabila mod yang disokong dibuang kemudian, semak juga entri manualnya; pengekstrakan automatik tidak akan melakukan pembersihan itu untuk anda.
Semak sama ada SwiftUI benar-benar melakukan carian
Pemboleh ubah String yang dihantar kepada Text dipaparkan tanpa penyetempatan. Untuk menggunakan pemboleh ubah sebagai kunci carian, Apple mendokumenkan pembinaan LocalizedStringKey daripadanya. Literal yang dihantar terus kepada Text menggunakan laluan yang boleh disetempatkan secara automatik. Beban berlebihan ini boleh menghasilkan output bahasa sumber yang sama tetapi berkelakuan secara berbeza. LocalizedStringKey
App demonstrasi lengkap berikut mengasingkan kunci yang dipilih semasa masa jalan daripada bilangan yang diinterpolasikan. Dalam projek app Mac SwiftUI sementara yang menggunakan Xcode 15 atau lebih baharu dan sasaran penggunaan macOS 13, gantikan pengisytiharan app yang dijana dengan kod ini. Kekalkan hanya satu pengisytiharan @main. Kod ini telah disemak berdasarkan API yang didokumenkan; kod ini tidak dikompil di sini kerana rantaian alat Swift tidak tersedia.
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)
}
}
Tambahkan Localizable.xcstrings pada sasaran app. Tambahkan entri yang diurus secara manual untuk panel.compact dan panel.expanded, dengan nilai sumber Compact panel dan Expanded panel. Bina projek untuk mengekstrak mesej literal. Penukaran eksplisit LocalizedStringKey meminta carian semasa masa jalan; ia tidak memberikan kepada pengekstrak pengisytiharan literal bagi setiap kunci yang mungkin dibina.
Bagi set pilihan yang kecil dan terhad, pertimbangkan untuk menggantikan pembinaan kunci dengan literal yang boleh disetempatkan secara eksplisit dalam setiap cabang. Untuk antara muka tersuai yang menghantar mesej antara komponen, Apple mengesyorkan LocalizedStringResource, yang membawa maklumat penyetempatan seperti jadual, komen dan nilai lalai. Pilih perwakilan yang memudahkan pemeriksaan keseluruhan set mesej yang disokong. Menyediakan teks app anda untuk terjemahan
Mengapakah bilangan yang berubah berbeza daripada kunci yang berubah?
Dalam demonstrasi, pemilihan susun atur mengubah kunci mesej yang dicari oleh app. Perubahan pada itemCount membekalkan argumen yang berbeza kepada satu mesej yang boleh disetempatkan. Interpolasi SwiftUI menukar nilai terbenam menjadi pemegang tempat format untuk penyetempatan; pemaparan semasa masa jalan membekalkan nilainya. Setempatkan app SwiftUI anda
Oleh itu, anda tidak memerlukan kunci berasingan untuk label yang dipaparkan seperti 2 items, 3 items dan 4 items. Bina contoh itu, cari mesej bilangan yang diekstrak, klik kanan kekuncinya sambil menekan Control, kemudian pilih Vary by Plural. Untuk penyetempatan sumber bahasa Inggeris, masukkan %lld item untuk One dan %lld items untuk Other, dengan menggunakan pemegang tempat integer yang ditunjukkan oleh Xcode. Apple mendokumenkan aliran kerja mesej bilangan ini serta penambahan variasi jamak yang sesuai untuk penyetempatan lain yang disokong. Menyetempatkan dan mempelbagaikan teks dengan katalog rentetan
Semasa pembersihan, periksa mesej bilangan sebagai sumber lengkap, termasuk variasinya. Ketiadaan frasa yang dipaparkan seperti 4 items daripada kod sumber tidak menunjukkan sama ada mesej berinterpolasi yang mendasarinya digunakan. Begitu juga, mengekalkan templat bilangan tidak mengekalkan kunci dinamik yang tidak berkaitan hanya kerana kedua-dua mesej muncul dalam panel yang sama.
Entri manakah yang patut dibuang dalam pembersihan?
Pertimbangkan semakan ilustrasi terhadap 24 calon. Bilangan ini menggambarkan contoh sintetik, bukannya hasil projek yang diukur.
| Hasil semakan | Entri | Tindakan |
|---|---|---|
| Satu-satunya pengguna ialah panel yang telah dibuang | 9 | Buang selepas mengesahkan panel dan data cariannya telah tiada |
| Kunci masih boleh dicapai melalui pemilihan semasa masa jalan | 8 | Kekalkan dan dokumentasikan pengurusan manual |
| Rujukan tergolong dalam sasaran lain atau binaan bersyarat | 5 | Kekalkan dan sahkan skop binaan itu |
| Asal kunci masih belum dikenal pasti | 2 | Kekalkan sementara menunggu penyiasatan |
| Jumlah yang disemak | 24 | 9 calon untuk dibuang |
Pengiraan ini menjadikan keputusan pembersihan boleh diaudit: 24 entri yang disemak tidak bermakna 24 entri perlu dibuang. Bagi setiap satu daripada sembilan calon untuk dibuang, simpan alasan ringkas yang mengenal pasti pengguna yang telah dibuang dan laluan carian semasa masa jalan yang telah disemak. Bagi lapan entri dinamik, catat set kunci yang dibenarkan supaya semakan seterusnya boleh mengulangi keputusan itu.
Buang hanya calon yang telah disahkan, kemudian periksa perbezaan katalog. Pastikan perubahan hanya mengandungi kunci yang dimaksudkan serta terjemahan berkaitannya, tanpa variasi jamak atau peranti yang tidak berkaitan turut hilang. Bina semula konfigurasi yang berkaitan. Jika kunci yang dipadam muncul semula melalui pengekstrakan, semak semula penggunaannya sebelum memadamkannya sekali lagi.
Bagaimanakah anda mengesahkan mesej yang dikekalkan pada Mac anda?
Gunakan Product > Scheme > Edit Scheme, pilih Run, kemudian buka Options. Pilih penyetempatan sedia ada yang disokong daripada App Language, tutup editor dan jalankan destinasi Mac. Apple mendokumenkan kawalan skema ini untuk menguji binaan yang disetempatkan. Ulang langkah ini untuk penyetempatan yang disokong oleh app anda. Menguji penyetempatan semasa menjalankan app
Uji setiap pilihan dinamik yang dibenarkan, termasuk kedua-dua susun atur dalam demonstrasi. Pastikan app memaparkan nilai katalog yang dijangka dan bukannya pengecam. Bagi mesej bilangan, semak nilai sintetik seperti 0, 1, 2 dan 12, serta sahkan kategori jamak tambahan apabila penyetempatan yang disokong memerlukannya. Mengubah bilangan awal contoh sudah memadai untuk mencapai nilai ujian tersebut.
Apabila mesej yang dikekalkan dipaparkan dengan tidak betul, periksa kunci, jadual, ikatan dan pemula Text yang tepat sebelum mengubah katalog. Aliran kerja simbol yang dijana oleh Apple yang lebih baharu juga boleh memudahkan rujukan sumber manual: Xcode 26 memperkenalkan penjanaan simbol Katalog Rentetan, yang diaktifkan untuk projek sedia ada melalui Generate String Catalog Symbols. Ini ialah laluan pemfaktoran semula pilihan, bukannya bukti bahawa sumber manual yang tidak dirujuk tidak digunakan. Ikuti kod: Terokai penyetempatan dengan Xcode
Akhiri dengan set kecil pemadaman yang mudah dijelaskan dan senarai mesej dinamik yang dikekalkan serta didokumenkan. Hasil yang berguna ialah katalog yang entri bakinya mempunyai pengguna yang dikenal pasti, sementara kunci yang dipilih semasa masa jalan dan mesej bilangan berformat terus berfungsi dalam antara muka Mac.
Sumber
- Temui Katalog Rentetan — Pembangun Apple
- Menyetempatkan dan mempelbagaikan teks dengan katalog rentetan — Pembangun Apple
- Menyediakan teks app anda untuk terjemahan — Pembangun Apple
- LocalizedStringKey — Pembangun Apple
- Setempatkan app SwiftUI anda — Pembangun Apple
- Menguji penyetempatan semasa menjalankan app — Pembangun Apple
- Ikuti kod: Terokai penyetempatan dengan Xcode — Pembangun Apple