Dokumentation

Globaliseringskontrollen

Kontrollera varje ändring efter saknade eller felaktiga översättningar, text och formatering i ny kod som förutsätter ett språk eller en kultur och, när du har konfigurerat det, sidor som inte fungerar på andra språk.

Kontrollen för Globalisering i Kvalitetskontroll ser till att ett internationaliserat projekt fungerar världen över. Den körs vid QA av uppgifter och pull requests, och läser bara sådant som en ändring har berört:

  1. Kataloger. Strängarna som ändringen har lagt till eller ändrat, på alla språk.
  2. Kod. Raderna som ändringen lägger till, för text och formatering som utgår från ett visst språk eller en viss kultur.
  3. Sidor. När projektet beskriver hur appen startas återges dess sidor med en pseudöversättning.

Guiden aktiverar kontrollen som standard när dess pull request har mergats. Inställningarna finns i Kvalitetskontroll → Globalisering; i arbetsbänken visar Inställningar om den är aktiverad.

Vad som blockeras som standard

En ändring skickas tillbaka för åtgärd om den lämnar strängar saknade eller trasiga, eller om koden den lägger till skriver text som människor läser direkt i koden eller bygger en mening av delar. Allt annat rapporteras som en iakttagelse och blockerar inget förrän du väljer att blockera det. Iakttagelser om formatering, sortering och layout rapporteras tills projektet har sett dem i sin egen kod.

Välj vad som ska blockeras under Kvalitetskontroll → Globalisering: katalogkoderna, Vad i koden skickar tillbaka en ändring, och Sidproblem som gör att en ändring skickas tillbaka för åtgärd. Kontrollera källkoden och Återge sidor stänger av kod- och sidstegen.

Katalogkoder

KodBetydelseBlockeras som standard
missingSträngen saknar översättningJa
invalid_syntaxÖversättningen går inte att tolka, till exempel på grund av trasig ICU, eller visar ett misstag från en modell: en avhuggen mening, kvarlämnad interpunktion, ett oavslutat citattecken eller ett dubblerat ordJa
placeholder_mismatchPlatshållare eller skyddade termer skiljer sig från källtexten, till exempel ett produktnamn som skrivits två gångerJa
plural_categoriesEn pluralform som språket kräver saknasJa
staleKälltexten ändrades efter att strängen översattesNej
obsoleteKälltexten innehåller inte längre strängen eller sidan där den fannsNej

Regler för ordlista, längd och förbjudna termer rapporterar egna koder när de har konfigurerats i konfigurationsfilen.

När du översätter tas inaktuella strängar bort från alla språk, och översättningarna av en sida vars källtext har försvunnit tas bort. Endast filer som Coroid har översatt tas bort, aldrig en sida som bara finns på ett språk.

Kodkoder

KodVad den hittarBlockeras som standard
hardcoded_textText som människor läser och som skrivits direkt i koden i stället för i katalogen: JSX- och malltext, synliga attribut som placeholder, title, alt och aria-label, toastmeddelanden och aviseringarJa
concatenated_textEn mening som byggs av delar: en översättning som sammanfogas med text eller ett värde med +, en mallsträng eller intilliggande elementJa
locale_numberEtt tal som formateras utan läsarens språkregion, till exempel toFixed i UI-kod eller toLocaleString() utan språkregionNej
locale_dateEtt datum eller en tid som formateras utan läsarens språkregion, eller med ett fast format som MM/dd/yyyyNej
hardcoded_currencyEn valutasymbol eller valutakod som skrivs intill ett beloppNej
ordinal_sortText som sorteras eller jämförs efter teckenkod, eller localeCompare utan en språkinställningNej
case_mappingtoUpperCase() eller toLowerCase() för text utan språkinställningNej
physical_directionVänster och höger i CSS och verktygsklasser i ett projekt med ett höger-till-vänster-språkNej
postal_code_formatEtt postnummer som valideras med mönstret för ett landNej
phone_number_formatEtt telefonnummer som valideras enligt nordamerikansk standardNej
latin_only_inputEtt namn, en stad, en gata eller en adress som begränsas till a–zNej
joined_listEn lista som läsaren ser, sammanfogad med kommatecken eller ”och”Nej
calendar_namesVeckodags- eller månadsnamn som skrivits in i koden, eller en fast första veckodagNej
paper_sizeLetter, A4 och liknande som är fast inställda i utskrifts- eller PDF-inställningarNej
fixed_unitEn enhet som mi, lb eller °F som skrivs intill ett visat talNej
locale_parsingEtt tal som en person har skrivit in, läst med parseFloat eller NumberNej
ime_compositionEnter som hanteras i ett textfält utan att kontrollera om ett kinesiskt, japanskt eller koreanskt ord fortfarande håller på att skrivasNej

Utforma för alla marknader visar lösningen för varje.

Vad kontrollen läser

Kodsteget parsar JavaScript och TypeScript, inklusive JSX, och läser Vue-, Svelte-, Astro-, HTML-, ERB- och Handlebars-mallar samt CSS som text. En regel gäller bara där dess kontext anger det: ett mönster för postnummer rapporteras bara intill ett postnummerfält, och en sammanfogad lista bara där människor läser den.

  • Översätts per definition. Text i projektets översättningsanrop och komponenter (t(), formatMessage, <Trans>, <FormattedMessage>, $t()) och funktionerna som anges i konfigurationsfilen.
  • Aldrig text. Skyddade termer och orden som konfigurationsfilen tillåter.
  • Utelämnas med avsikt. En rad med en i18n-ignore -kommentar och raden efter den. Ange orsaken: // i18n-ignore: product name.

Det valfria world avsnittet i .coroid/i18n.json anger resten:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
FältBetydelse
excludeFilmönster som reglerna hoppar över
translateÖversättningsfunktioner utöver ramverkens egna
allowOrd som aldrig översätts, utöver skyddade termer
formatter, currenciesAnges i guidens steg Kultur; se Kultur
renderSå startar du appen för pseudolokaliserade sidor; se Pseudo-Lokalisering

Iakttagelser och åtgärder

Varje iakttagelse sparas i kontrollkörningen och listas under uppgiftens Hittade problem: katalogiakttagelser per katalog, nyckel och språk, kodiakttagelser per fil, rad och den hittade texten samt sidiakttagelser per sida, element och text. En iakttagelse anses åtgärdad när den inte längre finns med i den senaste kontrollen av samma arbete.

Översätt kassatexterUppgift
Upptäckta problem
  • Öppnaui · checkout.total · fr: missingGlobalization · Inte översatt
  • Åtgärdassrc/pricing.tsx:7 · “Enkel prissättning”Globalization · Text som skrivits direkt i koden
  • Öppna/{locale}/ · p#promo · “Fri frakt på alla beställningar” · runtime_text (de-DE, ar-SA)Globalization · Text som inte kommer från katalogen
  • Åtgärdasui · cart.items · ja: placeholder_mismatchGlobalization · Platshållarna skiljer sig från källtexten
  • Åtgärdatui · cart.count · ar: plural_categoriesGlobalization · Pluralformer saknas för det här språket

Kvalitetsresultat från globaliseringskontrollen: katalogsträngar, kod som lagts till i en ändring och en pseudolokaliserad sida. En felkod per resultat. Illustrativa data.

I pull requests visas kodiakttagelser också som annoteringar på de ändrade raderna: som fel när de blockerar och som varningar när de bara rapporteras.

När kontrollen blockerar en uppgift får utvecklaragenten varje blockerande anmärkning, som src/pricing.tsx:7 hardcoded_text: “Simple pricing”, tillsammans med instruktioner om hur den åtgärdas. Den rättar översättningar i en översättningssession för uppgiften, aldrig genom att redigera andra språks kataloger för hand. Den flyttar text till källkatalogen, skriver om sammansatta meningar till ett enda meddelande med platshållare och kör kodreglerna på sin egen ändring innan den lämnar över uppgiften.

Bidrag från alla håll

Kontrollen tillämpar samma standard på varje ändring, oavsett vem som skrivit den:

  • Coroids agenter som arbetar med ett internationaliserat projekt får instruktioner i varje uppgift: källkatalogen och översättningsfunktionen, ett meddelande per mening, projektets formaterare, logisk layout för språk som skrivs från höger till vänster samt marknadskonventionerna från Culture.
  • Pull requests från människor och andra verktyg går igenom kontrollen via Coroid Check och får samma anmärkningar och kommentarer. Den körs på varje pull request när Coroid GitHub App har installerats i repot och projektets policy gäller för pull requests.
  • Ändringar som har mergats utan att klara kontrollen upptäcks efter mergningen. Översätt strängar som mergats utanför Coroid läser kontrollen som kördes på pull request. Den skapar en översättningsuppgift för strängar som pull request utelämnade eller lämnade inaktuella. När kontrollen blockerade kodfynd skapar den också en uppgift med namnet Internationalisera koden som mergats i i pull request, med en lista över var du ska leta. Varje merge ger högst en uppgift av varje typ.

Befintlig kod blockeras aldrig: Redo för alla marknader listar det och skapar fixuppgifter som du kan starta när du vill.

Kör själv

Motorn är kommandoradsverktyget coroid-i18n, den version som är låst i din konfigurationsfil:

coroid-i18n check                       # catalogues
coroid-i18n source --changed main       # the code a branch adds since main
coroid-i18n check --source --changed main

source läser koden utan att läsa katalogerna, så det fungerar även när de inte har konfigurerats än. Utan --changed eller --diff läser det hela repositoryt. Båda kommandona avslutas med 1 när de hittar något; lägg till --format json för en maskinläsbar rapport.