martes, octubre 25, 2005

De cando en vez, colaboro nun programa de SL/OSS, chamado KMyMoney, neste actuo como tradutor.
Como tal, teño un problema cunha cadea de texto que aparece nun campo de busca, "From" significando data inicial. Todas as cadeas "From" son agrupadas nunha e traducidas á vez como "Desde", aínda que se poderia mellorar este comportamento, para eso usan-se as cadeas de contexto, que permiten que se poda traducir cada "From" como mellor corresponda.
Ben, pois a definizón do diálogo de busca fai-se mediante un arquivo de definizón de interfaces, un *.ui ao estilo Qt. Durante a compilazón, converte-se mediante a ferramenta /usr/bin/uic nun arquivo de cabeceiras de c++, que é incluido desde outro arquivo, sobre o cal é chamado o compilador. O de sempre.

Botando unha ollada á saída do make, parece que o *.ui é convertido nun *.h usando, entre outros parámetros a funzón tr2i18n como funzón de internationalizazón.
A sintaxe de tr2i18n e a mesma que a da funzón tr() usada para a internacionalizazón en Qt, e inversa á de i18n() de gettext, usada en KDE. Isto é tr218n( "string", "context"), cfr. i18n( "context", "string").
Agora, se botamos un ollo á funzón tr2i18n, que nun sistema debian está no arquivo /usr/include/kde/klocale.h, esta é (verbatim
copy of)

/**
* \relates KLocale
* Qt3's uic generates i18n( "msg", "comment" ) calls which conflict
* with our i18n method. We use uic -tr tr2i18n to redirect
* to the right i18n() function
**/
inline QString tr2i18n(const char* message, const char* =0) {
return i18n(message);
}

o que significa que o comentário se tira directamente ao recolector de lixo.

Por outra parte, no momento de construir o arquivo pot, ainda non hai arquivo *.h derivado do *.ui, senon que tes o *.ui pelado.
Para extraer as cadeas do .ui, en KDE usa-se un guión de perl chamado extractrc, o cal simplesmente non extrae o contido dos elementos .

Polo cal , penso que a razón pola cal esta cadea (From (Date)) non aparece no arquivo pot é unha
"feature" de KDE.

Aliás, tr2i18n pode ser extendida para aceitar contextor, algo asi como:
define tr2i18n(message, context = ""):
if context ="":
i18n(message)
else:
i18n(context, message)
e extractrc tamén pode ser extendido, para unha vez atopado un , comprobar que o seguinte elemento é un , e se non está valeiro, por o seu contido como cadea de contexto no canto do predeterminado que é pasado como argumento do comando.

Pensades que isto ten trazas de ser asi, ou é só unha palla mental?.

E sobre todo, quen carallo me convidou a este blog?,

3 Comentarios:

En 10/25/2005 10:50 a. m., Blogger foz dixo...

Neno, ti que soñaches esta noite!!!!

Quen se levanta ás 9 da mañá e se come a cabeza con tanto código??

Como dicia aquel "...o cerebro dos informáticos non está operativo ata as 11..."


Por certo... fun eu quen te invitou.

Benvido.

 
En 10/25/2005 1:01 p. m., Blogger marce dixo...

Erguim-me a iso das 7:45, às nove começo a traballar.

Este é um tema co que me levo comendo a cabeça desde hai algum tempo, o único que me costou um pouco foi confirmar onte à noite a sequência de compilaçom dos arquivos, e pôr todas as peças juntas --vem, nom todas, teria que revisar as expresions regulares em perl, pero négo-me a mirar tal cousa--.

E como resulta que acababa de escreber um correo-e à lista dos desenvolventes de kmymoney con ese mesmo texto, o único que fixem foi pegá-lo aqui e traduci-lo.

BTW, ti quem es, e de que me conheces, e tes identidade en google talk?, se tal di cal é e parrafeamos um pouco.

 
En 10/25/2005 1:59 p. m., Blogger foz dixo...

Si que teño identidade gtalk, de feito eu son o que che proporcionou conta en gmail.

Podo preguntar eu ahora que significa o nick que escolliches?

 

Publicar un comentario

<< Home