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:
- 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
valores1
,2
y3
, respectivamente, y no lo hace parece que Qt Linguist tiene reglas para manejar esto. - 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:
- Qué técnica de programación extensible y efectiva se debe utilizar para traducir cadenas con posibles reglas irregulares?
- ¿Qué hacen los programadores y traductores de Qt si se encuentran con este problema de irregularidad?
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