2009-03-28 15 views
5

Estoy a punto de decidir cómo manejar la internacionalización de un formato basado en XML para la descripción de la IU.I18N de documentos XML

El formato normalmente se ve algo como esto:

... 
<devif> 
    <screen id="scr1" title="Settings for this and that"> 
    <header text="Climate readings"/> 
    <rd setp="123" text="Air temperature" unit="°C"/> 
    <rd setp="234" text="Humidity" unit="%RH"/> 
    <rd setp="345" text="CO2" unit="ppm"/> 

    <header text="Settings"/> 
    <wr setp="567" text="Air temperature demand" unit="°C"/> 
    </screen> 
    ... 
</devif> 

Cada archivo contiene un montón de pantallas y puede ser de hasta unos 10.000 líneas, y tenemos una docena de estos archivos en nuestra aplicación.

Todavía puedo cambiar el formato para adaptarlo mejor a nuestras necesidades. Entonces, ¿cómo harías para traducir esto?

He estado pensando acerca de algunas posibles maneras de manejar esto:

  • un archivo separado para cada idioma Inglés que contiene el texto y el texto traducido
  • Utilizando un ID para cada etiqueta y usar un archivo separado con el texto traducido para cada ID
  • la colocación de todas las traducciones en el mismo archivo

la primera solución tiene el problema en el que el texto Inglés podría traducirse en diferentes mensajes dependiendo del contexto.

La segunda solución hace que el archivo fuente sea menos legible (aunque no demasiado), y no maneja la traducción de atributos fácilmente.

La tercera solución haría que el archivo fuera muy grande y engorroso para trabajar una vez que el archivo se ha traducido a unos 5-6 idiomas.

+0

Gracias por sus sugerencias. Las dos primeras sugerencias son bastante similares, excepto que la primera parece más XML: ish. Sin embargo, me gusta la simplicidad de la segunda sugerencia. – Jonatan

Respuesta

1

Crearía un archivo de plantilla, p. llamado "somename.xml.template"

<devif> 
    <screen id="scr1" title="[SettingsForThisCard]"> 
    <header text="[ClimateReadings]"/> 
    <rd setp="123" text="[AirTemperature]" unit="°C"/> 
... 

continuación, puede crear un montón de archivos similar al INI para cada idioma que contiene:

SettingsForThisCard = su mensaje en un lenguaje determinado

A continuación, puede reemplace etiquetas con los mensajes leídos desde los archivos ini. La ventaja es que si hay una etiqueta que no tiene traducción, es fácil de detectar y no desperdicia esfuerzos de traducción. Además, es muy simple, por lo que puede no ser el mejor para sus requisitos específicos.

1

¿Por qué no utilizar entidades XML para definir los términos que deben ser localizados y tener DTD separados para cada idioma? Este es esencialmente el enfoque utilizado por Firefox XUL, por ejemplo: Localization on MDN.

2

Usamos archivos estándar TMX, que son archivos XML estándar para contener literales internacionalizados. Cada entrada se identifica con una etiqueta, que es una referencia en todo el código. Cada entrada tiene todas las traducciones posibles y la parte más importante es que TMX es un estándar utilizado por los programas de traducción y profesionales.

Si ya tiene archivos XML para contener sus literales, puede convertirlos por medio de una hoja de estilo XSLT.

Aquí se muestra un ejemplo del formato:

<?xml version="1.0" encoding="UTF-8"?> 
<tmx> 
    <body> 
     <tu tuid="$ALARM_BARCODE_READER_COMMS"> 
      <tuv lang="ES"> 
       <seg>Lector códigos de barras: No Operativo</seg> 
      </tuv> 
      <tuv lang="EN"> 
       <seg>Barcode reader: Not operative</seg> 
      </tuv> 
      <tuv lang="ZH"> 
       <seg>读卡器:通讯错误</seg> 
      </tuv> 
     </tu> 
     <tu tuid="$ALARM_BARCODE_READER_FAIL"> 
      <tuv lang="ES"> 
       <seg>Lector códigos de barras: Fallo</seg> 
      </tuv> 
      <tuv lang="EN"> 
       <seg>Barcode Reader: Fail</seg> 
      </tuv> 
      <tuv lang="ZH"> 
       <seg>读卡器:故障</seg> 
      </tuv> 
     </tu> 
     <tu tuid="$NO_PAYMENT_MODE_AVAILABLE"> 
      <tuv lang="ES"> 
       <seg>No hay sistemas de pago disponibles</seg> 
      </tuv> 
      <tuv lang="EN"> 
       <seg>No payment systems available</seg> 
      </tuv> 
      <tuv lang="ZH"> 
       <seg>读卡器:故障</seg> 
      </tuv> 
     </tu>  
     <tu tuid="$ALARM_BLACKLIST_CARD"> 
      <tuv lang="ES"> 
       <seg>Tarjeta de pago en lista negra</seg> 
      </tuv> 
      <tuv lang="EN"> 
       <seg>Payment card in blacklist</seg> 
      </tuv> 
      <tuv lang="ZH"> 
       <seg>付费的IC卡是黑名单卡</seg> 
      </tuv> 
     </tu> 
    </body> 
</tmx>