Re: [gnome-hispano] Aprendiendo a traducir con gettext....no lo consigo : (



Vale usando la táctica de prueba y error, he llegado a ver un poco el
comportamiento del gettext (que supongo que vendrá de manera critica
en la documentación en gnu.org), el mamoncete de el le gusta la var de
entorno (ahora si lo recorde xD) $LANG bien maquetadita y cumpliendo
estándares (que algo leído en la wikipedia de estos mirando sobre
UTF-8) 2letrasIdioma_2letrasPais.codificacion .

Es decir que no es "en_UK.UTF-8" si no "en_GB.UTF-8" al igual que no
puede ser "es_KK.UTF-8" porque son combinaciones no reconocidas ni UK
ni KK sino la oficial GB,  es decir hay que mirar el
/usr/share/locale/ para ver cual es el correcto ( a no ser que se sepa
de memoria) , lo de utf-8 no se que mas puede tragar salvo UTF8 todo
junto (casualidad me salio por error) pero "es_ES.pepito" no traga,
pero en principio se supone que en un futuro UTF-8 reinara así que
para que preocuparnos.

Todo  esto lo he hecho renombrado y exportando $LANG en plan:
mv locale/es_ES locale/en_GB
export $LANG=en_GB
...
así con varias combinaciones hasta que descubrí los deseos del gettext.

Otra cosa que me olía y que comprobé insitu es que puedes tener el
directorio es a secas locale/es/ y después le das var a $LANG
es_AR.UTF-8 o es_ES.UTF-8 que si no lo encuentra tirada del .mo de
locale/es/ .

Así que bueno ya me autorespondido ;) de mi duda, y ya de paso he
dejado la solución...empírica por supuesto de esta, por si alguien se
atasca con lo mismo o si el google u otro le da por indexar el hilo en
sus resultado...que por cierto últimamente en las búsquedas del google
salen pocos enlaces a hilos de listas de correo archivadas en web con
lo útiles que eran estos resultados.

Y si alguno quiere aclarar y darle quitarle la cosa empírica a la
solución dándonos los porques técnicos y tal pues encantado.

Saludos.

El día 18 de octubre de 2008 4:15, MD or MD <tres 14159 gmail com> escribió:
Bueno algo he avanzado aunque no acaba de funcionar correctamente.

Con el siguiente codigo fuente:
#include <stdio.h>
#include <libintl.h>
#include <locale.h>

#define _(string) gettext(string)

int main(void)
{
       setlocale(LC_ALL,"");
       bindtextdomain("hola","./locale/");
       textdomain("hola");

       printf(_("Hello World\n"));

       return 0;
}

Que se diferencia del anterior en que la ruta es relativa.

Y siguiendo el proceso de siempre:
 xgettext -k_ hola.c -o hola.po
poedit hola.po
metiendo como cadena traducida "TRADUCIDA\n" mas claro agua ;) .

Pero ahora llevando el archivo hola.mo a ./locale/es_ES/LC_MESSAGES/ funciona.

¿Parece que el problema ha terminado no? Pues si renombro el
directorio de locale es_ES por en_UK y hago un env LANG=en_UK ./hola
falla y muestra el helloword de siempre.

¿Porque no lo se, voy a ver si estudio mas el tema? Pa' mi que ahora
esta en el tema de las variables de globales/ambiente (environment var
en ingles...¿pero en español?) voy a ver si hago pruebas.

Saludos.

El día 17 de octubre de 2008 0:49, MD or MD <tres 14159 gmail com> escribió:
Buenas noches.

Llevo varios días en mis tiempos libres trasteando con el código
fuente de http://nesqi.homeip.net/hexxagon/ y aunque el juego es
imposible de ganar al  ordenador, es bastante divertido. Y
casualidades de la vida salto la noticia en barrapunto de "Las
comunidades de software libre en la actualidad ".

Así que paso la duda a la comunidad, ya que la ultima versión del
juego es del 2005 y no esta en ingles, quería meterle las traducciones
mediante el clásico gettext, pero como uno siempre lo había conocido
de oídas, me puse manos a la obra a aprenderlo...cosa que es un poco
complicada por los pocos tutoriales que hay, pero bueno me eche la
toalla a la cabeza y dije vamos a probar (despues de haber leido un
poco pero sin profundizar (asi que posiblemente me pasado algo basico
que no lo consiga) porque hay poco en español...o encontrado poco) con
un ejemplito simple y no me lo traduce...por supuesto algo estare
haciendo mal, explico el proceso:

-he hecho el tipico hola.c

#include <stdio.h>
#include <libintl.h>
#include <locale.h>

#define _(string) gettext(string)

int main(void)
{
       setlocale(LC_ALL,"");
       bindtextdomain("hola","/home/md/proyectos/pruebas/dprueba00/");
//probe a meter "./" para tener el .mo cerquita
       textdomain("hola");

       printf(_("Hello World\n"));

       return 0;
}

-despues le pasado el xgettext -k_ hola.c -o hola.po (si se que lo
suyo es sacar el .pot de plantilla pero es mejor pasito a pasito)
-edite el hola.po con el poedi que es muy comodo, no se si algo afecta
en que le puse a todas las codificaciones utf-8 en opcines del
"proyecto", guarde y genera ya el .mo, quedando algo tal que asi

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: paquete\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-10-17 00:01+0200\n"
"PO-Revision-Date: 2008-10-17 00:05+0100\n"
"Last-Translator: Miguel <md email com>\n"
"Language-Team: idioma <LL li org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Spanish\n"
"X-Poedit-Country: SPAIN\n"
"X-Poedit-SourceCharset: utf-8\n"

#: hola.c:13
#, c-format
msgid "Hello World\n"
msgstr "TRADUCIDO\n"

Me huelo que los X-Poedit son parametros extendidos que no son básicos
que mete el poedit.

-y ya con el .mo he probado mil sitios para meterlo
./ del prueba
./es/ de la prueba
./locale/es/LC_MESSAGE que he visto en algun tutorial

Y nada despues he hecho un env LANG=es ./hola y no rula...¿En que he fallado?

Saludos, y nada rompiendo la vergüenza porque como dice el refran "el
tonto duda y el sabio pregunta"...o algo asi :P.





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]