Granska alla lokaliseringsnycklar i en Mac-app genom att bygga de relevanta målen, kontrollera varje strängtabell mot alla språk som stöds och sedan testa meddelandevarianter i appen medan den körs. Katalogens fullständighet och korrekt visning vid körning kräver separata kontroller.

Det här arbetsflödet är avsett för en utvecklare som underhåller en Mac-app för datorer i Xcode. Den konkreta uppgiften är att skapa en spårbar redovisning av saknade meddelanden, ofärdiga översättningar, felaktiga argument och visningsproblem. Exemplen använder påhittade etiketter och antal; de beskriver en granskningsmetod som du kan tillämpa på ditt eget projekt.

Definiera vad som räknas som ett fullständigt meddelande

Börja med ett enkelt granskningsunderlag. Anteckna appmålet, resurspaketet, strängtabellen, nyckeln, språkversionen som stöds, obligatoriska varianter, översättningsstatus och resultat vid körning. Behandla varje kombination av paket, tabell och nyckel som en separat meddelandeidentitet, så att identiska nyckeltexter i olika resurser inte döljer något som saknas.

Apple beskriver att lokaliserbara API:er kan ange en tabell och ett paket, och att resurser utanför huvudpaketet behöver rätt paket för uppslagning. Om du bara kontrollerar standardfilen Localizable.xcstrings kan du därför missa meddelanden på andra ställen i appen. Se Förbereda appens text för översättning.

Läs projektets språkversioner som stöds i projektredigeraren: markera projektet under Project, öppna Info och granska Localizations. Kontrollera även vilka resurser som ingår i dessa språkversioner. Apples Lägga till stöd för språk och regioner förklarar projektinställningarna och resursvalen.

I granskningsunderlaget kan du använda påhittade alias som Språkversion A, Språkversion B och Språkversion C. Spara kopplingen till projektets faktiska språkidentifierare i dina arbetsanteckningar. Dessa alias är etiketter för underlaget, inte värden som ska anges i Xcode.

Använd följande kriterier för fullständighet i granskningen. Det här är en föreslagen granskningsmetod, inte en status för fullständighet som Apple har definierat.

Kontroll Dokumentera belägg
Inventering Meddelandet har ett identifierat mål, paket, tabell och nyckel.
Upptäckt Meddelandet hämtas från kod eller underhålls avsiktligt manuellt.
Täckning Varje språkversion som krävs har de nödvändiga meddelandevarianterna.
Argument Varje argument behåller sin avsedda betydelse och en kompatibel typ.
Körning Rätt meddelande och värden visas i det relevanta Mac-gränssnittet.
Hantering Varje fynd är åtgärdat, avsiktligt undantaget med en motivering eller fortfarande öppet.

Skapa en kataloginventering innan du granskar översättningarna

Öppna projektets befintliga strängkataloger. Om ett mål saknar katalog är Apples dokumenterade sätt att skapa en att välja File > New > File from Template och sedan String Catalog. Standardnamnet är Localizable; använd det tabellnamn som koden förväntar sig. Välj Product > Build för att fylla i och uppdatera katalogen. Se Lokalisera och variera text med en strängkatalog.

Bygg varje relevant Mac-schema i stället för att betrakta en lyckad byggrunda som en fullständig inventering. Apple förklarar att extraheringen hittar strängar för det aktuella schemat och plattformen. Ett meddelande som saknas i en byggrunda bör undersökas innan du drar slutsatsen att det inte används. Den här begränsningen beskrivs i Upptäcka strängkataloger.

Kontrollera bygginställningen Use Compiler to Extract Swift Strings. Apple kräver uttryckligen att den är aktiverad för att all lokaliserbar Swift-text ska ingå i lokaliseringsfilerna som exporteras. Om du behöver en utbyteskopia för översättningsarbetet markerar du projektet och väljer Product > Export Localizations, och väljer sedan de språkversioner som krävs. Det exporterade .xcloc-paketet är en Xcode Localization Catalog och skiljer sig från en enskild .xcstrings-strängtabell. Se Exportera lokaliseringar.

Gå sedan igenom appens vanliga ytor på datorn: huvudfönster, menyer, verktygsfält, inställningar, paneler, tomma lägen och etiketter som beror på antal. Leta upp motsvarande rad i granskningsunderlaget för varje meddelande som tillhör appen. Den här omvända kontrollen, från gränssnitt till inventering, hjälper dig att hitta text som aldrig kom med i en katalog.

Utgå inte från att extraheringen hittar alla godtyckliga stränguttryck. Apple beskriver extrahering via lokaliserbara API:er. Om ett förväntat meddelande saknas bör du undersöka hur koden skapar och skickar det innan du lägger till en andra post manuellt. Se Förbereda appens text för översättning.

Håll isär extrahering, uppslagning och formatering vid körning

De här åtgärderna besvarar olika frågor. Extrahering handlar om huruvida Xcode kan hitta ett meddelande under utvecklingen. Uppslagning handlar om vilken lokaliserad resurs appen begär när den körs. Formatering vid körning tillhandahåller det variabla innehåll som det valda meddelandet visar.

För SwiftUI spelar argumenttyper roll. En literal som Text("Open collection") används vid lokaliserad uppslagning. Om du skickar en vanlig String-variabel till motsvarande initierare visas normalt variabeln utan lokalisering. Apple beskriver den här skillnaden i LocalizedStringKey.

Om du uttryckligen skapar en LocalizedStringKey från en variabel begärs uppslagning, men det visar inte att extraheringen vid byggtillfället upptäckte alla möjliga variabelvärden. Jämför den fullständiga tillåtna uppsättningen nycklar med katalogen för dynamiskt valda nycklar. Undersök varje värde som inte matchar i stället för att förlita dig på det värde som råkade visas under ett test.

Interpolation har också en roll på meddelandenivå. SwiftUI kan slå upp ett lokaliserat meddelande som innehåller en formatspecifikation och infoga det interpolerade värdet före visning. Apple rekommenderar interpolation för att sätta samman lokaliserbar text i dokumentationen för Text.

Tänk dig ett exempelmeddelande som anger antalet objekt. Katalogen lagrar meddelandets lokaliserbara struktur och varianter; det änderliga antalet hanteras vid körning. Om du testar antal som 1 och 24 behöver du inte underhålla två separata nycklar bara för att numret ändras.

En etikett som ser rimlig ut är ett svagt belägg för att uppslagningen lyckades. Apple anger att SwiftUI kan visa själva nyckeln om det inte hittar det lokaliserade värdet. Om en nyckel består av läsbar källtext kan ett uppslagningsproblem se ut som en vanlig etikett. Kontrollera den valda språkversionen och katalogposten tillsammans med det visade resultatet. Se Förbereda vyer för lokalisering.

Granska varje språk och varje nödvändig variant

Gå igenom en tabell i taget och en språkversion i taget. Kontrollera varje meddelandes översättningsstatus, text, argument och utökade varianter. Låt ofärdiga rader stå öppna även när de omgivande meddelandena är klara.

I Apples arbetsflöde för kataloger skiljer man mellan New, Needs Review, översatta poster och inaktuella strängar (Stale). En inaktuell post hittades inte längre i koden; manuellt hanterade poster uppdateras eller tas inte bort automatiskt vid synkronisering. Bekräfta att en inaktuell nyckel inte längre behövs innan du tar bort dess översättningar. Se Upptäcka strängkataloger.

För meddelanden som beror på antal Ctrl-klickar du på den interpolerade nyckeln och väljer Vary by Plural. Granska alla former som Xcode tillhandahåller för varje språkversion. Vilka former som krävs kan variera, så det räcker inte att jämföra med källspråkets antal rader. Om katalogen innehåller enhetsvarianter kontrollerar du både Mac-värdet och det allmänna värdet. Apple beskriver båda kontrollerna i Lokalisera och variera text med en strängkatalog.

Kontrollera argumenten utifrån betydelse såväl som utseende. Om ett exempelmeddelande anger antal objekt i flera grupper bör du identifiera vilket argument som står för antalet objekt och vilket som står för antalet grupper. En översättning kan placera dem i en annan ordning, men betydelsen måste bevaras. Apples genomgång av kataloger förklarar argumentpositioner, typspecifikationer och pluralutbyten i Upptäcka strängkataloger.

Lägg till sammanhang när en kort etikett är tvetydig. En kommentar för Open kan ange att det är åtgärden på en rad i en samling. Parametern comment i SwiftUI skickar med sammanhanget i lokaliseringsutdata; Apple beskriver den i Förbereda vyer för lokalisering.

Använd en täckningsmatris som visar ofärdigt arbete

En enda procentsiffra är användbar för att följa katalogens förlopp, men granskningen behöver separata kolumner för täckning och beteende. Det genomarbetade exemplet nedan visar varför. Siffrorna är påhittade och avser par av meddelande och språkversion, inte mätningar från en app.

Anta att inventeringen innehåller 48 meddelanden som krävs och tre språkversioner som stöds. Det blir 144 obligatoriska par: 48 multiplicerat med 3. Varje par kan innehålla ytterligare plural- eller enhetsgrenar som behöver kontrolleras separat.

Språkversion Obligatoriska par Katalogkontroller klara Körningskontroller klara
Språkversion A 48 48 48
Språkversion B 48 46 44
Språkversion C 48 48 45
Totalt 144 142 137

Här återstår katalogarbete för två par, och sju saknar fortfarande slutförda körningskontroller. Grupperna kan överlappa, så om du adderar dem får du inte ett tillförlitligt antal unika ofärdiga meddelanden. Behåll båda fynden på deras faktiska rader.

Anteckna en specifik nästa åtgärd för varje ofärdig rad: hitta ett källmeddelande som saknas, komplettera en pluralform, verifiera ett argument, undersöka paketvalet eller granska gränssnittet på en smalare bredd. Då blir matrisen en åtgärdslista i stället för en dekorativ lägesrapport.

Kör Mac-appen på varje språkversion som stöds

Använd Xcodes schemainställningar för upprepningsbara kontroller på appnivå. Välj Product > Scheme > Edit Scheme, markera Run, öppna Options och välj App Language och App Region. Stäng dialogrutan, välj Mac-körmålet och kör appen. Upprepa för kombinationerna som ingår i granskningen. Apple dokumenterar stegen i Testa lokaliseringar när du kör appen.

Följ samma väg genom gränssnittet vid varje körning. Testa varje meddelande med relevanta tillstånd: en tom samling, ett objekt, flera objekt och längre exempeltexter. För pluralmeddelanden väljer du ytterligare värden som krävs för att testa grenarna i den språkversionen. En liten, fast uppsättning antal visar inte att alla grenar har testats.

Granska fullständiga meningar, insatta värden, radbrytningar, trunkering och bredden på menyer och kontroller. Variera de två antalen oberoende av varandra när ett meddelande har två antal. Om du exempelvis ändrar antalet objekt medan antalet grupper hålls konstant kan det avslöja en felaktig koppling av argument.

SwiftUI-förhandsvisningar kan korta ned åtgärdsloopen. Apple stöder att du anger miljövärdet locale för förhandsvisningen och skapar flera lokaliserade förhandsvisningar efter att du har lagt till eller importerat språkversionerna. Använd dem för att granska en problematisk vy igen och verifiera sedan den faktiska vägen genom appen. Se Förhandsvisa lokaliseringar.

Avsluta granskningen när varje obligatoriskt par av meddelande och språkversion har en dokumenterad hantering och nödvändiga grenar har kontrollerats. Spara inventeringen, testvägen och olösta fynd tillsammans. Då blir nästa granskning konkret: ett ändrat meddelande har en känd plats, förväntade argument och varianter som krävs samt ett upprepningsbart sätt att kontrollera visningen.

Källor