Documentation

Le contrôle de la globalisation

Vérifiez chaque modification pour détecter les traductions manquantes ou corrompues, ainsi que le texte et la mise en forme dans le nouveau code qui supposent une langue ou une culture spécifique ; lors de la configuration, vérifiez également les pages qui présentent des erreurs dans d'autres langues.

Le Globalisation Le contrôle qualité vérifie que le projet internationalisé reste opérationnel dans toutes les langues. Il s'exécute lors de la validation des tâches et des demandes de fusion, et analyse uniquement ce qu'une modification a touché :

  1. Catalogues. Les chaînes de caractères ajoutées ou modifiées par la modification, dans toutes les langues.
  2. Code. Les lignes ajoutées par la modification, pour le texte et la mise en forme qui supposent une langue ou une culture spécifique.
  3. Pages. Lorsque le projet définit comment démarrer son application, ses pages sont affichées avec une pseudo-traduction.

L'assistant active cette vérification par défaut dès que son pull request est fusionné. Ses paramètres se trouvent dans Contrôle qualité → Globalisation; l'interface de travail Paramètres indique si elle est activée.

Ce qui bloque par défaut

Une modification est renvoyée pour correction si elle présente des chaînes manquantes ou corrompues, ou si le code ajouté insère du texte destiné à être lu directement dans le code ou assemble une phrase à partir de parties. Tout le reste est signalé comme constatation sans bloquer quoi que ce soit tant que vous ne choisissez pas de le faire. Les constatations relatives à la mise en forme, au tri et à la disposition restent signalées jusqu'à ce qu'un projet les ait constatées dans son propre code.

Choisissez ce qui doit bloquer sous Contrôle qualité → Globalisation: les codes de catalogue, Ce qui dans le code renvoie une modification en arrière, et Les problèmes de page qui renvoient une modification pour correction. Vérifier le code source et Afficher les pages désactive les étapes liées au code et aux pages.

Codes de catalogue

CodeSignificationBloque par défaut
missingLa chaîne n'a pas de traductionOui
invalid_syntaxLa traduction ne peut pas être analysée, par exemple une erreur ICUOui
placeholder_mismatchLes espaces réservés diffèrent de la sourceOui
plural_categoriesUne forme plurielle requise par la langue est absenteOui
staleLa source a été modifiée après la traduction de la chaîneNon

Le glossaire, les règles de longueur et les termes interdits génèrent leurs propres codes lorsque votre fichier de configuration les active.

Codes de code

CodeCe qu'il détecteBloque par défaut
hardcoded_textDu texte destiné à être lu par une personne inséré dans le code au lieu du catalogue : le texte JSX et les modèles, les attributs visibles tels que placeholder, title, alt et aria-label, les notifications et alertesOui
concatenated_textUne phrase assemblée à partir de parties : une traduction combinée avec du texte ou une valeur via +, un littéral de modèle ou des éléments voisinsOui
locale_numberUn nombre formaté sans tenir compte de la locale du lecteur, comme toFixed dans le code de l'interface utilisateur ou toLocaleString() sans localeNon
locale_dateUne date ou une heure formatée sans tenir compte de la locale du lecteur, ou avec un modèle fixe comme MM/dd/yyyyNon
hardcoded_currencyUn symbole ou un code monétaire placé à côté d'un montantNon
ordinal_sortDu texte trié ou comparé selon le code des caractères, ou localeCompare sans localeNon
case_mappingtoUpperCase() ou toLowerCase() sur du texte sans localeNon
physical_directionGauche et droite en CSS et dans les classes utilitaires, dans un projet utilisant une langue écrite de droite à gaucheNon
postal_code_formatUn code postal validé selon le modèle d'un paysNon
phone_number_formatUn numéro de téléphone validé comme étant nord-américainNon
latin_only_inputUn nom, une ville, une rue ou une adresse limités aux caractères a-zNon
joined_listUne liste destinée à être lue par des personnes, séparée par une virgule ou « et »Non
calendar_namesLes noms de jours ou de mois écrits dans le code, ou un premier jour de semaine fixeNon
paper_sizeLettre, format A4 et autres valeurs fixes dans les paramètres d'impression ou de PDFNon
fixed_unitUne unité comme mi, lb ou °F placée à côté d'un nombre affichéNon
locale_parsingUn nombre saisi par une personne et lu avec parseFloat ou NumberNon
ime_compositionLa touche Entrée gérée dans un champ de saisie sans vérifier si un mot chinois, japonais ou coréen est encore en cours de compositionNon

Conception adaptée à chaque marché affiche la correction pour chacun.

Ce que la vérification analyse

L'étape liée au code analyse le JavaScript et le TypeScript, ainsi que JSX, et lit les modèles Vue, Svelte, Astro, HTML, ERB et Handlebars ainsi que le CSS en tant que texte. Une règle s'applique uniquement là où son contexte la désigne : un modèle de code postal n'est signalé qu'à côté d'un champ de code postal, et une liste jointe uniquement là où des personnes la lisent.

  • Traduit par définition. Texte situé dans les appels de traduction et les composants du projet (t(), formatMessage, <Trans>, <FormattedMessage>, $t()) et les fonctions énumérées dans le fichier de configuration.
  • Jamais de texte. Termes protégés ainsi que les mots autorisés par le fichier de configuration.
  • Omis volontairement. Une ligne contenant un i18n-ignore commentaire, ainsi que la ligne suivante. Indiquez la raison : // i18n-ignore: product name.

Le paramètre optionnel world section de .coroid/i18n.json définit le reste :

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
ChampSignification
excludeEnsembles de fichiers ignorés par les règles
translateFonctions de traduction autres que celles fournies par les frameworks
allowMots qui ne sont jamais traduits, en plus des termes protégés
formatter, currenciesDéfini lors de l'étape Culture de l'assistant ; consultez Culture
renderComment démarrer l’application pour les pages pseudo-localisées ; voir Pseudo-Localisation

Constatations et corrections

Chaque constatation est enregistrée lors de l'exécution des vérifications et figure dans la tâche associée. Problèmes détectés: les constatations sont classées par catalogue, clé et langue ; les constatations de code par fichier, ligne et texte trouvé ; les constatations de page par page, élément et texte. Une constatation est considérée comme résolue lorsque la dernière vérification du même travail ne la mentionne plus.

Traduire le texte de la page de paiementTâche
Problèmes détectés
  • Ouvrirui · checkout.total · fr: missingMondialisation · Non traduit
  • En cours de correctionsrc/pricing.tsx:7 · “Tarification simple”Mondialisation · Texte inséré directement dans le code
  • Ouvrir/{locale}/ · p#promo · “Livraison gratuite pour toute commande” · runtime_text (de-DE, ar-SA)Mondialisation · Texte non issu du catalogue
  • En cours de correctionui · cart.items · ja: placeholder_mismatchMondialisation · Les espaces réservés diffèrent de la source
  • Corrigéui · cart.count · ar: plural_categoriesMondialisation · Formes plurielles absentes pour cette locale

Résultats de qualité de la vérification Globalisation : chaînes de caractères du catalogue, modification de code ajoutée et page pseudo-localisée, un code de problème par constatation. Données illustratives.

Sur les demandes de fusion, les constatations de code apparaissent également sous forme d'annotations sur les lignes modifiées : une erreur en cas de blocage, un avertissement s'il s'agit seulement de rapports.

Lorsqu'une vérification bloque une tâche, l'agent développeur reçoit chaque constatation bloquante, comme src/pricing.tsx:7 hardcoded_text: “Simple pricing”, ainsi que les instructions pour la corriger. Il répare les traductions via une session de traduction pour la tâche, jamais en modifiant manuellement les catalogues d'autres langues. Il déplace le texte dans le catalogue source, reformule les phrases assemblées en un seul message avec des espaces réservés, et applique les règles de code sur son propre changement avant de remettre la tâche en traitement.

Des contributions provenant de toutes les sources

La vérification applique les mêmes normes à chaque modification, quel que soit son auteur :

  • Coroid's agents Pour les projets internationalisés, chaque tâche précise le catalogue source et la fonction de traduction, un message par phrase, le formateur du projet, la disposition logique pour les langues écrites de droite à gauche, ainsi que les conventions des marchés définies par Culture.
  • Les demandes de fusion provenant des utilisateurs et d'autres outils passent par Coroid Check afin d'obtenir les mêmes constatations et annotations. Activez Révisez chaque PR pour l'exécuter sur chaque pull request.
  • Les modifications fusionnées sans avoir passé cette étape sont détectées après la fusion. Les chaînes de caractères traduites fusionnées en dehors de Coroid lit les résultats de la vérification effectuée sur le pull request. Il crée une tâche de traduction lorsque des chaînes manquent ou sont obsolètes. Si la vérification bloque des constatations liées au code, il génère également une tâche nommée Internationaliser le code fusionné le pull request, en indiquant où chercher. Chaque fusion génère au maximum une tâche de chaque type.

Le code existant n'est jamais bloqué : Préparation au marché mondial le liste et crée des tâches de correction que vous pouvez lancer à votre convenance.

Exécutez-le vous-même

Le moteur est l'outil en ligne de commande coroid-i18n, dont la version est définie dans votre fichier de configuration :

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

source lit le code sans avoir à consulter les catalogues, ce qui permet son fonctionnement même lorsqu'ils ne sont pas encore configurés. Sans --changed ou --diff il analyse l'ensemble du dépôt. Ces deux commandes renvoient la valeur 1 en cas de détection d'un élément ; ajoutez --format json pour obtenir un rapport lisible par machine.