{nombre} en la copia de traducción se pierde, cómo detenerlo antes de conectarse
Si {nombre} se pierde en la copia de la traducción, se producirán errores en línea. El juicio regular no es confiable. Este artículo utiliza la biblioteca estándar de Python string.Formatter.parse para estructurar los marcadores de posición de verificación, con ejemplos de síntesis correctos e incorrectos, scripts directamente ejecutables y límites de revisión manual.
En la copia traducida, variables como {name} a menudo se traducen juntas y la página a menudo no informa un error hasta que el valor realmente se completa. Si solo confía en los ojos humanos o las expresiones regulares para verificar las llaves antes de conectarse, es fácil pasarlas por alto. Este artículo está dirigido a desarrolladores y editores responsables de la localización, las plantillas y las comprobaciones de entrega. Presenta cómo utilizar la biblioteca estándar de Python string.Formatter.parse para realizar una verificación estructurada en marcadores de posición y explica qué situaciones aún requieren revisión manual.
Después de leer, puede tener una idea de verificación que se puede ejecutar directamente: verifique la identidad del campo, la frecuencia de aparición y las especificaciones de formato cuando se entregue la traducción, en lugar de esperar hasta que se descubra el problema en línea. Los ejemplos utilizan muestras sintéticas y el código se ha verificado en un entorno aislado, pero esto no representa una garantía de todos los archivos reales o del rendimiento del producto. Antes de procesar documentos importantes, conserve los originales y revíselos de acuerdo con los límites y los elementos de aceptación a continuación.
¿Se perdieron marcadores de posición después de la traducción? Conclusión de una frase
Primero, utilice el análisis estructurado para extraer los campos en la cadena de formato y luego compárelos uno por uno con los campos de la copia fuente; si los nombres de los campos, los tiempos de aparición o las especificaciones de formato son inconsistentes, se rechazará directamente y el ajuste del orden de las palabras se dejará para revisión manual.
| tu situación | Prácticas recomendadas | razón |
|---|---|---|
| Los nombres de las variables en la traducción están traducidos. | Restaurar el nombre del campo de la interfaz antes de la entrega | El nombre de la variable pertenece al contrato de interfaz. Después del cambio, se informará un error al completar el valor en la página. |
| A la traducción le falta un campo con el mismo nombre una vez | Rechaza el artículo y comprueba si falta traducción. | El número de apariciones de un mismo campo también forma parte del contrato. |
| Sólo se ajustó la posición del campo. | Aceptar, si el orden de las palabras de lectura es natural. | Los cambios en el orden de los campos generalmente no afectan los resultados al completar los valores. |
| Las especificaciones de formato, como los decimales, han cambiado. | El marcado es inconsistente, confirme según el protocolo de localización. | Las especificaciones de formato también están protegidas y si se permiten cambios debe decidirse mediante acuerdo. |
Seleccione primero la sintaxis del formato
Este artículo solo trata los marcadores de posición de estilo Python str.format y no cubre cadenas de plantillas de JavaScript, ICU MessageFormat u otros sistemas de marcadores de posición. Los diferentes sistemas tienen reglas de anidamiento, escape y pluralización muy diferentes, y una expresión regular no puede pretender admitirlas todas. El ejemplo requiere el uso de campos con nombre y rechaza campos numerados automáticamente (como {}).
Puede encontrar una descripción completa de la sintaxis de los campos en Cadena de Python y documentación del formateador.
Las llaves de escape no son variables
{{name}} representa el texto mostrado {name} y no debe contarse como un campo. También puede haber campos anidados en la especificación de formato, como {value:{width}}. El siguiente código lee la especificación de forma recursiva y mantiene un recuento de las apariciones repetidas del mismo campo.
from string import Formatter
from collections import Counter
def contract(text, depth=0):
if depth > 5:
raise ValueError("nested format budget")
result = Counter()
for literal, field, spec, conversion in Formatter().parse(text):
if field is None:
continue
if not field or field != field.strip():
raise ValueError("named field without surrounding whitespace required")
result[(field, conversion, spec)] += 1
if spec:
result.update(contract(spec, depth + 1))
return result
assert contract("Hi {name}, total {amount:.2f}") == contract("{name}:金额 {amount:.2f}")
assert contract("{{name}}") == Counter()
assert contract("{name} {name}") != contract("{name}")
assert contract("{value:{width}}")[("width", None, "")] == 1
assert contract("{amount:.2f}") != contract("{amount:.0f}")
for bad in ["Hi {name", "{ name}", "{}"]:
try:
contract(bad)
except ValueError:
pass
else:
raise AssertionError("invalid template accepted")
Este contrato es deliberadamente estricto
Las especificaciones de formato también se consideran contenido protegido aquí, por lo que se marcará el cambio del número de decimales. Algunas tareas de localización requieren cambiar la forma en que se presentan los números, en cuyo caso debe crear una regla separada para eso en lugar de cancelar todas las comprobaciones de marcadores de posición. El límite de profundidad de anidamiento en el ejemplo es un presupuesto de demostración y no es un requisito de la especificación del lenguaje.
La siguiente tabla enumera varios tipos comunes de cambios y sus correspondientes métodos de manejo:
| cambiar | El resultado de este ejemplo. | revisar la acción |
|---|---|---|
| Cambiar campos | aceptar | ¿Es natural el orden de lectura de las palabras? |
| Falta el mismo campo una vez | rechazar contrato | Comprobar si faltan traducciones |
| Los nombres de las variables están traducidos. | rechazar contrato | Nombre del campo de la interfaz de recuperación |
| Cambios en la especificación decimal | Las etiquetas son inconsistentes | Confirmar según acuerdo de localización |
📊 Comparación central
| Tipo de cambio | Si pasa la verificación | Acciones de seguimiento |
|---|---|---|
| Cambiar campos | aprobar | ¿Es natural el orden de lectura de las palabras? |
| Falta el mismo campo una vez | fallido | Comprobar si faltan traducciones |
| Los nombres de las variables están traducidos. | fallido | Nombre del campo de la interfaz de recuperación |
| Cambios en la especificación decimal | Marcar como inconsistente | Confirmar según acuerdo de localización |
🎯 ¿Qué método es el adecuado para ti?
Si usted es responsable de la entrega de la traducción
Ejecute una verificación de estructura antes de la entrega y devuelva al traductor las entradas rechazadas con nombres de campos faltantes o alterados.
Si eres responsable de las plantillas e interfaces
Deje claro qué nombres de campos pertenecen al contrato de interfaz y enumérelos en las instrucciones de entrega para facilitar la comparación por parte de traductores y revisores.
Si necesita cambiar la forma en que se presentan los números
Desarrolle un protocolo de localización por separado para las especificaciones de formato y agréguelo a las reglas de verificación en lugar de desactivar la verificación general.
❓ Preguntas frecuentes (FAQ)
1. ¿Puede este método manejar plantillas de JavaScript o ICU MessageFormat?
no puedo. Este artículo solo se centra en los campos con nombre del estilo str.format de Python. Las reglas de anidamiento, escape y pluralización de otros sistemas deben procesarse por separado.
2. ¿Se marcará {{name}} como variable?
No. Representa el texto mostrado {name}, que no se cuenta como un campo cuando se analiza.
3. Si simplemente ajusto la posición del campo en la oración, ¿será rechazado?
No. En este caso, se aceptan cambios en las posiciones de los campos y luego se leen manualmente para ver si el orden de las palabras es natural.
4. ¿Puedo llamar a format directamente para verificar la traducción?
El código de este artículo solo analiza y en realidad no llama a format para completar el objeto. No es un entorno limitado de seguridad de plantilla. La representación posterior también requiere restricciones en los campos disponibles, el acceso a los objetos y el contexto de salida, especialmente las reglas de escape en las páginas HTML.
📝 Resumen
El uso del análisis estructurado para verificar los marcadores de posición durante la entrega de la traducción puede evitar problemas con los nombres de los campos, las horas y las especificaciones de formato antes de conectarse. El revisor aún debe juzgar por separado si el idioma es fluido.
Pruébelo ahora: cargue el documento para comenzar la traducción, conservando el diseño original


