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 Globalisering i Kvalitetskontroll hjälper ett internationaliserat projekt att fungera världen över. Den körs vid QA av uppgifter och på pull requests och läser bara sådant som en ändring berör:

  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 att hitta 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 sidorna med en pseudöversättning.

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

Det här blockerar som standard

En ändring skickas tillbaka för åtgärd om den lämnar strängar saknade eller trasiga, eller om koden som läggs till skriver text som visas för användare direkt i koden eller bygger ihop en mening av delar. Allt annat rapporteras som en iakttagelse och blockerar inget tills 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, Det här i koden skickar tillbaka en ändring, och Sidproblem som skickar tillbaka en ändring för åtgärd. Kontrollera källkod och Rendera sidor stänger av kod- och sidkontrollerna.

Katalogkoder

KodBetydelseBlockerar som standard
missingSträngen saknar översättningJa
invalid_syntaxÖversättningen kan inte tolkas, till exempel på grund av trasig ICU-syntaxJa
placeholder_mismatchPlatshållarna skiljer sig från källtextenJa
plural_categoriesEtt pluralmönster som språket kräver saknasJa
staleKälltexten ändrades efter att strängen översattesNej

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

Kodkoder

KodVad den hittarBlockerar som standard
hardcoded_textText som användaren ser, skriven direkt i koden i stället för i katalogen: JSX- och malltext, synliga attribut som placeholder, title, alt och aria-labelsamt toastmeddelanden och aviseringarJa
concatenated_textEn mening som byggs ihop av delar: en översättning som sammanfogas med text eller ett värde med +, en malliteral eller intilliggande elementJa
locale_numberEtt tal som formateras utan läsarens språk- och regioninställningar, till exempel toFixed i UI-kod eller toLocaleString() utan språk- och regioninställningarNej
locale_dateEtt datum eller en tid som formateras utan läsarens språk- och regioninställningar, 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 lokalNej
case_mappingtoUpperCase() eller toLowerCase() på text utan lokalenNej
physical_directionVänster och höger i CSS och utility-klasser i ett projekt med ett språk som skrivs från höger till vänsterNej
postal_code_formatEtt postnummer som valideras med mönstret för ett enda landNej
phone_number_formatEtt telefonnummer som valideras enligt nordamerikanskt formatNej
latin_only_inputEtt namn, en stad, en gata eller en adress som begränsas till a–zNej
joined_listEn lista som personer lä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 bredvid ett visat talNej
locale_parsingEtt tal som någon har skrivit in, uppläst med parseFloat eller NumberNej
ime_compositionEnter 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 korrigeringen för varje iakttagelse.

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 sammanhang anger det: ett mönster för postnummer rapporteras bara intill ett postnummerfält, och en hopslagen lista bara där människor läser den.

  • Översatt 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 ord som konfigurationsfilen tillåter.
  • Utelämnat med flit. 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
excludeFilglobbmönster som reglerna hoppar över
translateÖversättningsfunktioner utöver ramverkens egna
allowOrd som aldrig översätts, utöver skyddade termer
formatter, currenciesStälls in i steget Kultur i guiden; se Kultur
renderSå startar du appen med pseudolokaliserade sidor; se Pseudo-Lokalisering

Iakttagelser och åtgärder

Varje iakttagelse sparas i körningen av kontrollen och listas under uppgiften på fliken Hittade problem: katalogiakttagelser efter katalog, nyckel och språk, kodiakttagelser efter fil, rad och den hittade texten samt sidiakttagelser efter sida, element och text. En iakttagelse är åtgärdad när den inte längre förekommer 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.

Vid pull requests visas kodiakttagelser även som kommentarer på de ändrade raderna: som ett fel när de blockerar och som en varning när de bara rapporteras.

När kontrollen blockerar en uppgift får utvecklaragenten varje blockerande iakttagelse, till exempel src/pricing.tsx:7 hardcoded_text: “Simple pricing”, tillsammans med instruktioner för 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å sina egna ändringar innan den lämnar över uppgiften.

Bidrag från alla källor

Kontrollen ställer samma krav på varje ändring, oavsett vem som har 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 formatterare, logisk layout för höger-till-vänster-språk och marknadskonventionerna från Culture.
  • Pull requests från människor och andra verktyg får samma kontroller via Coroid Check, med samma resultat och kommentarer. Aktivera Granska varje PR för att köra den på varje pull request.
  • Ändringar som mergas utan att klara kontrollen fångas upp efter merge. Översätt strängar som mergats utanför Coroid läser resultatet från kontrollen som kördes på pull request. Den skapar en översättningsuppgift om strängar saknas eller är inaktuella. Om kontrollen blockerade kodfynd skapar den också en uppgift med namnet Internationalisera koden som mergats i pull request och ange var du ska leta. Varje merge får högst en uppgift av varje typ.

Befintlig kod blockeras aldrig: Redo för hela världen listar det och skapar åtgärdsuppgifter som du kan starta när du vill.

Kör det 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 översättningskatalogerna, så det fungerar även när de inte är konfigurerade ännu. 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.