2012-03-20 14 views
6

Con el fin de hacer un PHP content management systemextensible, las traducciones de idiomas son cruciales. Investigaba enfoques de programación para un sistema de traducción, y pensé que Qt Linguist era un buen ejemplo.Traducir a Idiomas con Reglas Irregulares

Este es un ejemplo de uso de la documentación de Qt:

int n = messages.count(); 
showMessage(tr("%n message(s) saved", "", n)); 

Qt utiliza reglas lingüísticas conocidas, para determinar si "message" tiene un "s" anexado en Inglés.

Cuando traje ese ejemplo con mi equipo de desarrollo, se descubrió un problema que pone en peligro la eficacia extensibilidad de la modelización fuera de la función de Qt tr().

Este es un ejemplo similar, excepto que ahora algo está muy mal.

int n = deadBacteria.count(); 
showMessage(tr("%n bacterium(s) killed", "", n)); 

el plural de "bacterium" es "bacteria". No es correcto agregar un "s".

No tengo mucha experiencia con Qt Linguist, pero no he visto cómo maneja conjugaciones y formas irregulares.

Una frase más complicada podría ser "%n cactus(s) have grown.". El plural debe ser "cactii", y "have" debe estar conjugado con "has" si hay un cactus.

Puede pensar que la corrección lógica es evitar estas palabras irregulares porque no se utilizan en la programación. Bueno, esto no es útil de dos maneras:

  1. Tal vez hay un lenguaje que modifica los nombres de forma irregular, a pesar de que la cadena de origen funciona en Inglés, como "%n message(s) saved". En MyImaginaryLanguage, la manera apropiada para formar la cadena traducida podría ser "1Message salvó", "M2essage salvó", "Me3ssage salvado" para %n valores 1, 2 y 3, respectivamente, y no lo hace parece que Qt Linguist tiene reglas para manejar esto.
  2. Para hacer que un CMS sea extensible como necesito que sea el mío, se deben tener en cuenta todos los tipos de aplicaciones web. Alguien puede construir un role-playing game que requiera oraciones como "5 cactus han crecido" O tal vez un software de seguridad quiere decir: "ClamAV encontró 2 virus." en lugar de "ClamAV encontró 2 del virus (es)."

Después de buscar en línea para ver si otros desarrolladores de Qt tienen una solución a este problema y al no encontrar ninguno, llegué a Stack Overflow.

Quiero saber:

  1. Qué técnica de programación extensible y efectiva se debe utilizar para traducir cadenas con posibles reglas irregulares?
  2. ¿Qué hacen los programadores y traductores de Qt si se encuentran con este problema de irregularidad?
+0

no sé nada acerca de Qt, pero tal vez podría codificar una extensión que analiza las terminaciones singular/dual/plural? 'bacteri (a/um)', '(1Message/M2essage/Me3ssage)' sería un ejemplo que requeriría un poco más de trabajo y sería menos dinámico. – Cyclone

Respuesta

6

No has entendido cómo funciona la pluralización en Qt: no es una traducción automática.

Básicamente tiene una cadena por defecto, p. "% n cactus (s) han crecido". que es un literal, en tu código. Puedes poner lo que más te guste, p. Ej. "dingbat wibble foo% n bar".

Puede definir los idiomas de traducción (incluido uno para el mismo idioma en el que ha escrito la cadena fuente).

Linguist está programado con las diversas reglas de cómo las lenguas tratan cantidades de algo. En inglés es solo singular o plural; pero si un idioma tiene una forma específica para cero o lo que sea, presenta esos en Lingüista. Luego le permite colocar la oración correcta en el idioma de traducción de destino, y maneja el %n en el lugar que usted decida que debe estar en el formulario traducido.

Así que quienquiera que haga la traducción en Lingüist se le proporcionará la fuente, y tiene que completar el singular y el plural, por ejemplo. texto

Fuente: %n cactus(s) have grown.

traducción Inglés (singular): %n cactus has grown.

traducción Inglés (Plural): %n cacti have grown.

Si la aplicación no puede encontrar una traducción instalado entonces vuelve al literal fuente. También el literal fuente es lo que ve la persona que lo interpreta, por lo que debe inferir lo que usted quiso decir de él. Por lo tanto, "dingbat wibble foo% n bar" podría no ser una buena idea para describir cuántos cactus han crecido.

Más información:

+0

Ah, eso explica la aparente magia. Tendré que darle una oportunidad a Qt Linguist. – Deltik

3

Su mejor opción es utilizar el marcoi18n. Está muy bien integrated into PHP, y le da herramientas para precisamente define todas las reglas de la gramática peculiar sobre formas plurales.

1

Usando Qt Linguist puede manejar los diversos números gramaticales según el idioma de destino. Por lo tanto, cada vez que se detecta %n en una cadena tr, se solicitará al traductor que proporcione todas las traducciones necesarias para el idioma de destino.Comprobar este artículo para más detalles:

http://doc.qt.nokia.com/qq/qq19-plurals.html

Cuestiones relacionadas