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:
- Kataloger. Strängarna som ändringen har lagt till eller ändrat, på alla språk.
- 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.
- 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
| Kod | Betydelse | Blockerar som standard |
|---|---|---|
missing | Strängen saknar översättning | Ja |
invalid_syntax | Översättningen kan inte tolkas, till exempel på grund av trasig ICU-syntax | Ja |
placeholder_mismatch | Platshållarna skiljer sig från källtexten | Ja |
plural_categories | Ett pluralmönster som språket kräver saknas | Ja |
stale | Källtexten ändrades efter att strängen översattes | Nej |
Regler för ordlistor, längd och förbjudna termer rapporterar egna koder när de har konfigurerats i konfigurationsfilen.
Kodkoder
| Kod | Vad den hittar | Blockerar som standard |
|---|---|---|
hardcoded_text | Text 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 aviseringar | Ja |
concatenated_text | En mening som byggs ihop av delar: en översättning som sammanfogas med text eller ett värde med +, en malliteral eller intilliggande element | Ja |
locale_number | Ett tal som formateras utan läsarens språk- och regioninställningar, till exempel toFixed i UI-kod eller toLocaleString() utan språk- och regioninställningar | Nej |
locale_date | Ett datum eller en tid som formateras utan läsarens språk- och regioninställningar, eller med ett fast format som MM/dd/yyyy | Nej |
hardcoded_currency | En valutasymbol eller valutakod som skrivs intill ett belopp | Nej |
ordinal_sort | Text som sorteras eller jämförs efter teckenkod, eller localeCompare utan en lokal | Nej |
case_mapping | toUpperCase() eller toLowerCase() på text utan lokalen | Nej |
physical_direction | Vänster och höger i CSS och utility-klasser i ett projekt med ett språk som skrivs från höger till vänster | Nej |
postal_code_format | Ett postnummer som valideras med mönstret för ett enda land | Nej |
phone_number_format | Ett telefonnummer som valideras enligt nordamerikanskt format | Nej |
latin_only_input | Ett namn, en stad, en gata eller en adress som begränsas till a–z | Nej |
joined_list | En lista som personer läser, sammanfogad med kommatecken eller ”och” | Nej |
calendar_names | Veckodags- eller månadsnamn som skrivits in i koden, eller en fast första veckodag | Nej |
paper_size | Letter, A4 och liknande som är fast inställda i utskrifts- eller PDF-inställningar | Nej |
fixed_unit | En enhet som mi, lb eller °F som skrivs bredvid ett visat tal | Nej |
locale_parsing | Ett tal som någon har skrivit in, uppläst med parseFloat eller Number | Nej |
ime_composition | Enter hanteras i ett textfält utan att kontrollera om ett kinesiskt, japanskt eller koreanskt ord fortfarande håller på att skrivas | Nej |
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-ignorekommentar 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ält | Betydelse |
|---|---|
exclude | Filglobbmönster som reglerna hoppar över |
translate | Översättningsfunktioner utöver ramverkens egna |
allow | Ord som aldrig översätts, utöver skyddade termer |
formatter, currencies | Ställs in i steget Kultur i guiden; se Kultur |
render | Så 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.
- Ö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 mainsource 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.