För att ta bort oanvända lokaliseringsnycklar i Xcode, behandla Stale-poster som granskingskandidater. Kontrollera körningsnyckelkonstruktion innan radering, bevara nödvändiga dynamiska meddelanden som manuellt hanterade poster, och testa de berörda Mac-appsskärmarna efter rensning.
Den här guiden riktar sig till en utvecklare som underhåller en SwiftUI Mac-app med strängkataloger. Uppgiften är en katalogrensning: identifiera meddelanden som kan tas bort samtidigt som etiketter och räknemeddelanden som appen fortfarande visar bevaras. Beslutsstödet nedan skiljer extraktionsbevis från körningsbeteende.
Vad betyder en föråldrad lokaliseringsnyckel egentligen?
Xcode upptäcker lokaliserbara strängar vid byggprocesser. Apple förklarar att extraktion täcker det aktuella schemat och plattformen. När en tidigare extraherad sträng försvinner, kan Xcode ta bort en översatt post automatiskt; en post med översättningar kvarstår och får Stale-status. Den statusen betyder att Xcode inte längre hittar strängen i koden. Apple gör raderingen explicit villkorlig genom att kräva bekräftelse på att strängen inte längre behövs. Discover String Catalogs
Den praktiska konsekvensen är att en saknad källreferens inleder en undersökning. En exakt sökning efter panel.compact kan hitta en litterär referens, men den kan inte fastställa om koden konstruerar nyckeln genom att sammanfoga panel. med ett valt läge. Granska både kandidatnyckeln och koden som producerar söknycklar.
Använd den föreslagna granskningstabellen för varje kandidat. Det är ett beslutsstöd härlett från den dokumenterade extraktionsgränsen, inte en ytterligare Xcode-funktion.
| Bevis funnen vid granskning | Beslut | Nästa åtgärd |
|---|---|---|
| En borttagen skärm var dess enda konsument; ingen körningsnyckelproducerare kvarstår | Radera kandidat | Ta bort posten, bygg sedan om och kontrollera ändringen |
| Körningskod kan fortfarande producera denna exakta nyckel | Behåll | Bevara den genom manuell hantering eller ersätt sökningen med explicita lokaliserbara referenser |
| Nyckeln refereras fortfarande i ett annat mål eller byggvillkor | Behåll | Bygg och inspektera relevant konfiguration |
| En liknande nyckel finns i en annan tabell | Undersök separat | Bekräfta tabell och resursbunt som används av varje sökning |
| Ingen konsument hittas, men nyckelproducerande kod är otydlig | Skjut upp | Spåra produceraren innan raderingsbeslut fattas |
Hur etablerar du en användbar baslinje i Xcode?
Först, spara en återställbar kopia av katalogen eller commita dess nuvarande tillstånd. Öppna sedan app-projektet och välj det Mac-schema du avser att granska. Anteckna vilka mål och villkorsbaserade konfigurationer som kan leverera meddelanden till det berörda gränssnittet; detta håller granskningen knuten till ett explicit omfång.
Välj katalogen i Projektnavigatorn och välj Product > Build. Apple dokumenterar att byggprocesser fyller och uppdaterar strängkataloger från lokaliserbar källtext. Med katalogen vald, välj Editor > Assistent, välj sedan en nyckel för att inspektera dess källplats. Katalogen ger även navigation tillbaka till källan. Localizing and varying text with a string catalog
Om förväntade Swift-strängar saknas, kontrollera att målets Use Compiler to Extract Swift Strings-bygginställning är aktiverad. Apple dokumenterar detta krav för kompilerarextraktion. En katalog fylld med ofullständig extraktion är en dålig baslinje för att bestämma vad som ska tas bort. Localize your SwiftUI app
För varje kandidat, registrera nyckel, katalog, misstänkt konsument och beslut. Sök först efter exakta nyckeln, sedan dess stabila prefix och relevanta lokaliseringsomslag. Inspektera modellvärden och bundlade sökdata som matar dessa omslag. Upprepa relevanta byggprocesser när ett annat mål eller kompilationsvillkor ändrar vilken källkod som ingår.
Slå inte ihop beslut enbart för att två poster visar samma text. Apples lokaliserings-API:er accepterar tabellnamn, och resurser utanför huvudappen kan kräva en annan bunt. Spåra sökningens tabell och bunt innan du behandlar en annan post som ersättning. Preparing your app’s text for translation
Hur bevarar du dynamiskt refererade meddelanden?
Apple dokumenterar manuell hantering specifikt för strängar vars nycklar konstrueras dynamiskt. Välj den nödvändiga posten och använd dess inspektör för att göra den manuellt hanterad. Sådana poster uppdateras inte och tas inte bort av Xcodes efterbyggnadssynkronisering för lokalisering. För en saknad dynamisk post visar Apple även hur man lägger till en manuell sträng med katalogens plusknapp. Discover String Catalogs
Manuell hantering kräver en explicit underhållsregel. Registrera de giltiga nycklarna bredvid koden eller data som väljer dem, och förklara deras användning i katalogkommentarer. När ett stödt läge tas bort senare, granska även dess manuella post; automatisk extraktion kommer inte att utföra den rensningen åt dig.
Kontrollera om SwiftUI faktiskt utför en sökning
En String-variabel som skickas till Text visas utan lokalisering. För att använda en variabel som söknyckel, dokumenterar Apple att man konstruerar en LocalizedStringKey från den. En litteral som skickas direkt till Text tar den lokaliserbara vägen automatiskt. Dessa överladdningar kan ge identisk källspråksutdata medan de beter sig annorlunda. LocalizedStringKey
Följande kompletta demonstrationsapp håller en körningsvald nyckel separat från en interpolerad räknare. I ett tillfälligt SwiftUI Mac-appprojekt med Xcode 15 eller senare och macOS 13 som distributionsmål, ersätt den genererade appdeklarationen med denna kod. Behåll endast en @main-deklaration. Den granskades mot de dokumenterade API:erna; den kompilerades inte här eftersom en Swift-verktygskedja inte var tillgänglig.
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)
}
}
Lägg till Localizable.xcstrings till app-målet. Lägg till manuellt hanterade poster för panel.compact och panel.expanded, med källvärden Compact panel och Expanded panel. Bygg projektet för att extrahera de litterära meddelandena. Den explicita LocalizedStringKey-konverteringen begär en körningssökning; den levererar inte en litterär deklaration av varje möjlig konstruerad nyckel till extraheraren.
För en liten, ändrad uppsättning val, överväg att ersätta nyckelkonstruktion med explicita lokaliserbara litteraler i varje gren. För anpassade gränssnitt som skickar meddelanden mellan komponenter, rekommenderar Apple LocalizedStringResource, som bär lokaliseringsinformation som tabell, kommentar och standardvärde. Välj den representation som gör den fullständiga uppsättningen stödda meddelanden enklast att inspektera. Preparing your app’s text for translation
Varför är ändrade räknare olika från ändrade nycklar?
I demonstrationen ändrar valet av layout vilken meddelandenyckel appen söker upp. Att ändra itemCount levererar ett annat argument till ett lokaliserbart meddelande. SwiftUI-interpolering konverterar inbäddade värden till formatplatshållare för lokalisering; körningsrendering levererar deras värden. Localize your SwiftUI app
Du behöver därför inte separata nycklar för de renderade etiketterna 2 items, 3 items och 4 items. Bygg exemplet, hitta det extraherade räknemeddelandet, Control-klicka på dess nyckel och välj Vary by Plural. För en engelskkäll lokalisering, ange %lld item för One och %lld items för Other, med hjälp av heltalsplatshållaren som Xcode visar. Apple dokumenterar detta räknemeddelande-arbetsflöde och tillägg av lämpliga pluralvarianter för andra stödda lokaliseringar. Localizing and varying text with a string catalog
Under rensning, inspektera ett räknemeddelande som en komplett resurs, inklusive dess variationer. Frånvaron av en renderad fras som 4 items från källkoden säger inget om om den underliggande interpolerade meddelandet används. Likaså bevarar inte en räkneskabelon en orelaterad dynamisk nyckel bara för att båda meddelanden visas i samma panel.
Vilka poster bör en rensning faktiskt ta bort?
Överväg en illustrativ granskning av 24 kandidater. Dessa antal beskriver ett syntetiskt exempel, inte ett mätprojektresultat.
| Granskningresultat | Poster | Åtgärd |
|---|---|---|
| Enda konsumenter hörde till en borttagen panel | 9 | Radera efter bekräftelse att panelen och dess sökdata är borta |
| Nycklar förblir tillgängliga genom körningsval | 8 | Behåll och dokumentera manuell hantering |
| Referenser tillhör ett annat mål eller villkorlig bygg | 5 | Behåll och verifiera byggomfattningen |
| Nyckelursprung förblir olöst | 2 | Bevara i väntan på undersökning |
| Totalt granskade | 24 | 9 raderingskandidater |
Denna beräkning gör rensningsbeslutet reviderbart: 24 granskade poster innebär inte 24 raderingar. För var och en av de nio raderingskandidaterna, behåll en kort anledning som identifierar den borttagna konsumenten och de kontrollerade körningssökvägarna. För de åtta dynamiska posterna, registrera den tillåtna nyckeluppsättningen så att nästa granskning kan upprepa beslutet.
Ta bort endast de bekräftade kandidaterna, inspektera sedan katalogen diff. Kontrollera att ändringen innehåller de avsedda nycklarna och deras tillhörande översättningar, utan att orelaterade plural- eller enhetsvarianter försvinner. Bygg om relevanta konfigurationer. Om en raderad nyckel återkommer genom extraktion, granska dess konsument innan du raderar den igen.
Hur verifierar du de behållna meddelanden på din Mac?
Använd Product > Scheme > Edit Scheme, välj Run, och öppna Options. Välj en befintlig stödd lokalisering från App Language, stäng redigeraren, och kör Mac-målet. Apple dokumenterar dessa schemakontroller för test av lokaliserade byggar. Upprepa för de lokaliseringar din app stöder. Testing localizations when running your app
Testa alla tillåtna dynamiska val, inklusive båda layouterna i demonstrationen. Bekräfta att appen visar de förväntade katalogvärdena snarare än identifierarna. För räknemeddelanden, kontrollera syntetiska värden som 0, 1, 2 och 12, och verifiera ytterligare pluralkategorier där dina stödda lokaliseringar kräver dem. Att ändra provets initiala räknare räcker för att nå dessa testvärden.
När ett behållet meddelande visar fel, inspektera den exakta nyckeln, tabellen, bunt och Text-initialiseringen innan du ändrar katalogen. Apples nyare genererad-symbol-arbetsflöde kan också göra manuella resurser enklare att referera: Xcode 26 introducerade strängkatalogsymbolgenerering, aktiverad för befintliga projekt genom Generate String Catalog Symbols. Detta är en valfri refaktoreringsväg, inte bevis för att en orefererad manuell resurs är oanvänd. Code-along: Explore localization with Xcode
Avsluta med en liten, förklarlig raderingsuppsättning och en dokumenterad lista över behållna dynamiska meddelanden. Det användbara resultatet är en katalog vars återstående poster har identifierbara konsumenter, med körningsvalda nycklar och formaterade räknemeddelanden som fortfarande fungerar i Mac-gränssnittet.
Källor
- Upptäck strängkataloger — Apple Developer
- Lokalisera och variera text med en strängkatalog — Apple Developer
- Förbereda appens text för översättning — Apple Developer
- LocalizedStringKey — Apple Developer
- Lokalisera din SwiftUI-app — Apple Developer
- Testa lokaliseringar när du kör din app — Apple Developer
- Kodalong: Utforska lokalisering med Xcode — Apple Developer