Documentación

La comprobación de Globalización

Compruebe cada cambio en busca de traducciones faltantes o rotas, de texto y formato en código nuevo que supongan un único idioma o cultura, y, si lo configura, de páginas que fallen en otros idiomas.

El Globalización La verificación en Control de Calidad mantiene un proyecto internacionalizado listo para el mundo. Se ejecuta en la QA de tareas y en las solicitudes de incorporación de cambios, y solo analiza lo que un cambio modifica:

  1. Catálogos. Las cadenas que el cambio agrega o modifica, en todos los idiomas.
  2. Código. Las líneas que el cambio agrega, para texto y formato que asumen un único idioma o cultura.
  3. Páginas. Cuando el proyecto indica cómo iniciar su aplicación, sus páginas se renderizan con una pseudotraducción.

El asistente activa la verificación de forma predeterminada una vez que se fusiona su pull request. Su configuración se encuentra en Control de Calidad → Globalización; el entorno de trabajo Configuración muestra si está activado.

Qué bloquea de forma predeterminada

Un cambio vuelve a revisión si deja cadenas ausentes o dañadas, o si el código que agrega coloca directamente el texto que leen las personas dentro del código o ensambla una oración a partir de partes. Todo lo demás se registra como hallazgo y no bloquea nada hasta que decida hacerlo. Los hallazgos de formato, orden y diseño se siguen reportando hasta que el proyecto los detecte en su propio código.

Elija qué bloquear en Control de Calidad → Globalización: los códigos de catálogo, Qué en el código devuelve un cambio a revisión, y Problemas de página que devuelven un cambio a revisión. Verificar código fuente y Renderizar páginas desactivan los pasos de código y de página.

Códigos de catálogo

CódigoSignificadoBloquea de forma predeterminada
missingLa cadena no tiene traducciónSí
invalid_syntaxLa traducción no se puede analizar, por ejemplo por un error en ICU, o muestra un fallo del modelo: una oración truncada, puntuación sobrante, comillas sin cerrar o una palabra duplicadaSí
placeholder_mismatchLos marcadores de posición o términos protegidos difieren del origen, por ejemplo un nombre de producto escrito dos vecesSí
plural_categoriesFalta una forma plural que necesita el idiomaSí
staleEl origen cambió después de traducir la cadenaNo
obsoleteEl origen ya no contiene la cadena, ni la página donde se encontrabaNo

El glosario y las reglas de longitud y de términos prohibidos reportan sus propios códigos cuando su archivo de configuración los establece.

La traducción elimina las cadenas obsoletas de todos los idiomas y borra las traducciones de una página cuya fuente ya no existe. Solo elimina los archivos Coroid traducidos, nunca una página que exista en un único idioma.

Códigos de código

CódigoQué encuentraBloquea de forma predeterminada
hardcoded_textTexto que una persona lee escrito dentro del código en lugar del catálogo: texto JSX y de plantillas, atributos visibles como placeholder, title, alt y aria-label, avisos y alertasSí
concatenated_textUna oración ensamblada a partir de partes: una traducción unida con texto o un valor mediante +, una expresión literaria de plantilla o elementos vecinosSí
locale_numberUn número formateado sin la configuración regional del lector, como toFixed en código de interfaz de usuario o toLocaleString() sin configuración regionalNo
locale_dateUna fecha u hora formateada sin la configuración regional del lector, o con un patrón fijo como MM/dd/yyyyNo
hardcoded_currencyUn símbolo o código de moneda escrito junto a un importeNo
ordinal_sortTexto ordenado o comparado por código de caracteres, o localeCompare sin configuración regionalNo
case_mappingtoUpperCase() o toLowerCase() en texto sin la configuración regionalNo
physical_directionIzquierda y derecha en clases CSS y de utilidades, en un proyecto con un idioma de derecha a izquierdaNo
postal_code_formatUn código postal validado con el patrón de un paísNo
phone_number_formatUn número de teléfono validado como norteamericanoNo
latin_only_inputUn nombre, ciudad, calle o dirección limitado a a-zNo
joined_listUna lista que las personas leen unida con una coma o "y"No
calendar_namesNombres de días de la semana o meses escritos en el código, o un primer día de la semana fijoNo
paper_sizeLetra, A4 y similares fijados en configuraciones de impresión o PDFNo
fixed_unitUna unidad como mi, lb o °F escrita junto a un número mostradoNo
locale_parsingUn número que una persona escribió y se lee con parseFloat o NumberNo
ime_compositionLa tecla Enter se maneja en un campo de texto sin comprobar si una palabra en chino, japonés o coreano todavía se está componiendoNo

Diseño para cada mercado muestra la solución para cada caso.

Qué muestra la comprobación

El paso de código analiza JavaScript y TypeScript, incluyendo JSX, y lee plantillas de Vue, Svelte, Astro, HTML, ERB y Handlebars, así como CSS en formato de texto. Una regla solo se aplica cuando su contexto lo indica: un patrón de código postal se detecta únicamente junto a un campo de código postal, y una lista unida solo donde las personas la lean.

  • Se traduce por definición. El texto dentro de las llamadas de traducción del proyecto y componentes (t(), formatMessage, <Trans>, <FormattedMessage>, $t()) y las funciones que figuran en el archivo de configuración.
  • Nunca se traduce este texto. Términos protegidos y las palabras que permite el archivo de configuración.
  • Se omite intencionadamente. Una línea con un i18n-ignore comentario, y la línea siguiente. Indique el motivo: // i18n-ignore: product name.

Lo opcional world apartado de .coroid/i18n.json define el resto:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
CampoSignificado
excludeConjuntos de archivos que las reglas omiten
translateFunciones de traducción adicionales a las propias de los frameworks
allowLas palabras que Nunca se traducen, aparte de los términos protegidos
formatter, currenciesSe configura en el paso Cultura del asistente; consulte Cultura
renderCómo iniciar la aplicación para páginas seudolocalizadas; consulta Pseudo-Localización

Hallazgos y correcciones

Cada hallazgo se guarda en la ejecución de la comprobación y se incluye en la tarea Problemas encontrados: los hallazgos de catálogo se clasifican por catálogo, clave e idioma; los hallazgos de código, por archivo, línea y texto detectado; y los hallazgos de página, por página, elemento y texto. Un hallazgo se considera corregido cuando la última comprobación del mismo trabajo ya no lo muestra.

Traducir el texto del proceso de pagoTarea
Se han detectado incidencias
  • Abrirui · checkout.total · fr: missingGlobalización · No traducido
  • En proceso de correcciónsrc/pricing.tsx:7 · “Precios sencillos”Globalización · Texto escrito directamente en el código
  • Abrir/{locale}/ · p#promo · “Envío gratuito en todos los pedidos” · runtime_text (de-DE, ar-SA)Globalización · Texto que no proviene del catálogo
  • En proceso de correcciónui · cart.items · ja: placeholder_mismatchGlobalización · Los marcadores diferén del origen
  • Corregidoui · cart.count · ar: plural_categoriesGlobalización · Faltan formas plurales para este locale

Hallazgos de calidad del análisis de Globalización: cadenas de catálogo, un cambio en el código y una página pseudotraducida, un código de problema por hallazgo. Datos ilustrativos.

En las solicitudes de extracción, los hallazgos de código también aparecen como anotaciones en las líneas modificadas: como error si bloquean, y como advertencia si solo se reportan.

Cuando la comprobación bloquea una tarea, el agente desarrollador recibe cada hallazgo que la impide, como src/pricing.tsx:7 hardcoded_text: “Simple pricing”, junto con las instrucciones para corregirlo. Corrige las traducciones mediante una sesión de traducción para la tarea, nunca editando manualmente los catálogos de otros idiomas. Mueve el texto al catálogo de origen, reescribe las frases ensambladas como un único mensaje con marcadores de posición y ejecuta las reglas de código sobre su propio cambio antes de entregar la tarea.

Aportes de cualquier origen

La comprobación aplica el mismo estándar a todos los cambios, independientemente de quién los haya creado:

  • Coroid's agents En un proyecto internacionalizado, se indica en cada tarea: el catálogo de origen y la función de traducción, un mensaje por frase, el formateador del proyecto, el diseño lógico para idiomas escritos de derecha a izquierda y las convenciones de los mercados según Culture.
  • Solicitudes de extracción realizadas por personas y otras herramientas pasan la comprobación mediante Coroid Check, con los mismos Hallazgos y anotaciones. Se ejecuta en cada pull request siempre que la aplicación Coroid GitHub esté instalada en el repositorio y la política del proyecto se active en las solicitudes de extracción.
  • Los cambios fusionados sin superar esta comprobación se detectan después de la fusión. Traducir cadenas fusionadas fuera de Coroid Lee la comprobación que se ejecutó en el pull request. Genera una tarea de traducción para las cadenas que el pull request dejó sin traducir o desactualizadas. Si la comprobación detectó incidencias de código bloqueantes, también genera una tarea llamada Internacionalizar el código fusionado en pull request, indicando dónde buscar. Cada fusión genera como máximo una tarea de cada tipo.

El código existente nunca se bloquea: Preparación para el mercado mundial Lo enumera y archiva las tareas de corrección que inicias al seleccionarlas.

Ejecútalo tú mismo

El motor es la herramienta de línea de comandos coroid-i18n, cuya versión se fija en tu archivo de configuración:

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

source Lee el código sin necesidad de consultar los catálogos, por lo que funciona incluso cuando no están configurados todavía. Sin --changed o --diff lee todo el repositorio. Ambos comandos devuelven el valor 1 al encontrar algún elemento; añade --format json para obtener un informe legible por máquina.