Pregunta ¿Cómo manejas la traducción del texto con el marcado?


Estoy desarrollando soporte multilingüe para nuestra aplicación web. Estamos usando Los ayudantes de Django alrededor de gettext biblioteca. Todo ha sido sorprendentemente fácil, excepto por la cuestión de cómo manejar oraciones que incluyen marcado HTML significativo. Aquí hay un ejemplo simple:

Please <a href="/login/">log in</a> to continue.

Aquí están los enfoques que puedo pensar:

  1. Cambia el enlace para incluir la oración completa. Independientemente de si el cambio es una buena idea en este caso, el problema con esta solución es que la IU se vuelve dependiente de las necesidades de i18n cuando las dos son idealmente independientes.

  2. Marque toda la cadena anterior para la traducción (formato incluido). Las cadenas de traducción también incluirían el HTML directamente. El problema con esto es que cambiar el formato HTML requiere cambiar toda la traducción.

  3. Acople bien las traducciones múltiples, luego use la interpolación de cadenas para combinarlas. Por ejemplo, la frase "Por favor% s para continuar" y "iniciar sesión" se pueden marcar por separado para la traducción, y luego combinar. El "inicio de sesión" se localiza, luego se envuelve en el HREF, luego se inserta en la frase traducida, lo que mantiene el% s en la traducción para marcar dónde debe ir el enlace. Este enfoque complica el código y rompe la independencia de las cadenas de traducción.

¿Hay más opciones? ¿Cómo han resuelto otros este problema?


32
2017-11-07 22:31


origen


Respuestas:


La solución 2 es lo que quieres. Envíales la oración completa, con el marcado HTML incrustado.

Razones:

  1. La herramienta de traducción predominante, Trados, puede preservar el marcado de la corrupción inadvertida por un traductor.
  2. Trados también puede traducir automáticamente el texto que ha visto antes, incluso si el contenido de las etiquetas ha cambiado (pero el número de etiquetas y su posición en la oración son las mismas). Por lo menos, el traductor le dará un buen descuento.
  3. El estilo es específico del lugar. En algunos casos, negrita será inapropiada en chino o japonés, y las cursivas se utilizan con menos frecuencia en idiomas de Asia Oriental, por ejemplo. El traductor debe tener la libertad de conservar o eliminar los estilos.
  4. El orden de las palabras es específico del idioma. Si tuviera que segmentar la frase anterior en fragmentos, podría funcionar para inglés y francés, pero en chino o japonés el orden de las palabras no sería correcto cuando concatena. Por esta razón, lo mejor es practicar la externalización de oraciones enteras, no fragmentos de oraciones.

17
2017-11-21 17:58



2, con un giro potencial.

Ciertamente podrías localizar toda la cadena, como:

loginLink=Please <a href="/login">log in</a> to continue

Sin embargo, según sus herramientas y su grupo de localización, es posible que prefiera que haga algo como:

// tokens in this string add html links
loginLink=Please {0}log in{1} to continue

Ese sería mi método preferido. Podría utilizar un patrón de sustitución diferente si tiene herramientas de localización que ignoran ciertos caracteres. P.ej.

loginLink=Please %startlink%log in%endlink% to continue

Luego realice la sustitución en su jsp, servlet o equivalente para el idioma que esté usando ...


11
2017-11-07 23:51



Descargo de responsabilidad: yo no tengo experiencia en la internacionalización del software.

  1. No creo que esto sea bueno en cualquier caso, solo introduce demasiado acoplamiento ...
  2. Mientras mantengas el formato escaso en las partes que necesitan ser traducidas, esto podría estar bien. Dando a los traductores la posibilidad de otorgar importancia especial a las palabras (ya sea convirtiéndolas en un enlace o probablemente utilizando <strong /> el énfasis suena como una buena idea. Sin embargo, las traducciones con (X) HTML posiblemente no se puedan usar en otro lugar fácilmente.
  3. Esto me parece un trabajo innecesario ...

Si fuera yo, creo que iría con el segundo enfoque, pero pondría el URI en un parámetro de formato, para que esto se pueda cambiar sin tener que cambiar todas esas traducciones.

Please <a href="%s">log in</a> to continue.

Debes tener en cuenta que es posible que necesites enseñar a tus traductores un conocimiento básico de (X) HTML si sigues este enfoque, para que no arruinen tu marcado y para que sepan qué esperar de ese texto que escriben. . De todos modos, este conocimiento adicional podría conducir a un mejor margen semántico, porque, como se mencionó anteriormente, los textos podrían traducirse y anotarse con (X) HTML para reflejar el estilo de escritura local.


7
2017-11-07 22:54



Lo que sea que haga, conserve toda la oración como una sola cuerda. Debes entender toda la frase para traducirla correctamente.

No todas las palabras deben traducirse en todos los idiomas: p. en noruego uno no usa "por favor" (nosotros poder diga "vær så snill", literalmente, "sea tan amable", pero cuando se usa como un comando suena demasiado enérgico) para que el noruego correcto sea:

  • "Logg inn for ä fortsette" lit .: "Iniciar sesión para continuar" o
  • "Fortsett ved å logge inn" lit .: "Continuar para iniciar sesión", etc.

Debe permitir cambiar completamente el orden, p. en un lenguaje de demostración ficticio:

  • "Für kontinuer Loggen bitte ins" (si fuera real): "Para continuar, inicie sesión, por favor"

Algún lenguaje puede incluso tener una sola palabra para (la mayoría de) esta oración también ...

Recomendaré la solución 1 o posiblemente "Por favor, {startlink} inicie sesión en% {endlink} para continuar". De esta forma, el traductor puede convertir toda la oración en un enlace, si es más natural, y puede reestructurarse por completo.


2
2017-11-12 13:18



Interesante pregunta, tendré este problema muy pronto. Creo que iré por 2, sin ningún tipo de cosas complicadas. El marcado HTML es simple, las URL no se moverán en el corto plazo, y si se cambia algo, se creará una nueva entrada en django.po, por lo que tenemos la oportunidad de revisar la traducción (por ejemplo, un script debe verificar las traducciones vacías después makemessages )

Entonces, en la plantilla:

{% load i18n %}
{% trans 'hello <a href="/">world</a>' %}

... a continuación, después python manage.py makemessages Me meto en mi django.po

#: templates/out.html:3
msgid "hello <a href=\"/\">world</a>"
msgstr ""

Lo cambio a mis necesidades

#: templates/out.html:3
msgid "hello <a href=\"/\">world</a>"
msgstr "bonjour <a href=\"/\">monde</a>"

... y en los casos simples pero frecuentes que encontraré, no valdrá más problemas. Las otras soluciones aquí parecen bastante inteligentes, pero no creo que la solución a los problemas de marcado sea más marcado. Además, quiero evitar demasiadas cosas confusas dentro de las plantillas.

Creo que sus plantillas deberían ser bastante estables después de un tiempo, pero no sé qué otro problema espera. Si el contenido cambia una y otra vez, tal vez el lugar de ese contenido no esté dentro de la plantilla, sino dentro de un modelo.

Editar: Acabo de comprobarlo en el documentación, si alguna vez necesitas variables dentro de una traducción, hay blocktrans.


1
2017-11-09 21:48



  1. No tiene sentido, ¿cómo traducirías "iniciar sesión"?
  2. No creo que muchos traductores tengan experiencia con HTML (los traductores habituales que no usan HTML serían más baratos)
  3. Me gustaría ir con la opción 3, o usar "Por favor,% slog en% s para continuar" y reemplazar el% s con partes del enlace.

0
2017-11-08 21:17