domingo, octubre 17, 2010

Cómo obtener los archivos .POT para traducir un proyecto en múltiples idiomas?

Según las herramientas de la GNU, podemos usar "xgettext", y usando unos simples comandos, no me voy a referir a todos, pero ya sacando los textos del programa, ya podremos traducir en diferentes idiomas, para hacer esto, debemos marcar nuestro código, por ejemplo:


catch (...) {
cerr << _("Exception thrown during parseCommandLine") << endl;
return EXIT_FAILURE;
}


Como podrán notar, existe un _( después del "cerr", esto es la marca, ahora para extraer el texto de ese documento simplemente hacemos un

xgettext --keyword=_ archivo


Eso creará un archivo nuevo, que se llamará messages.po, a menos que le indiques otro nombre, lucirá como:

# ESpanol message translation template for GNU Gnash
# Copyright (C) 2007 Free Software Foundation, Inc.
# John Gilmore , 2007
#
msgid ""
msgstr ""
"Project-Id-Version: gnash cvs20070405\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-02-12 11:37+0100\n"
"PO-Revision-Date: 2010-10-01 00:25-0300\n"
"Last-Translator: Maximiliano Castañón Araneda \n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: libbase/sharedlib.cpp:76
#, c-format
msgid "Couldn't initialize ltdl: %s"
msgstr "No se puede inicializar ltdl: %s"


donde aparecerá:

#: libbase/sharedlib.cpp:76
msgid "Couldn't initialize ltdl: %s"
msgstr "No se puede inicializar ltdl: %s"


la primera línea indica el archivo y la línea.
la segunda línea el msgid por cada línea que se puede traducir, esa indica el idioma del que proviene
la tercera, la traducción a nuestro lenguaje.

Además de obtener esos datos, quizás queramos introducir más archivos a nuestro archivo, en ese caso usaremos:

xgettext --keyword=_ -j archivo

donde -j, --join-existing une los mensajes con un fichero existente


Existen más alternativas, por ejemplo actualizamos nuestro archivo.POT, y luego queremos unir este archivo actualizado con nuestra traducción actual, ahí tenemos a msgmerge:

msgmerge [OPCIÓN] def.po ref.pot
msgmerge -U def.po ref.pot

Además de esto, supongo que querrán compilar el archivo para usarlo, en este caso usaremos pocompile:

pocompile -


Cuando compilo el archivo de traducción de GNASH, uso:

pocompile /home/maximi89/Escritorio/es.po /home/maximi89/Escritorio/es.mo


Y para hacer la traducción y luego mover el archivo uso:

pocompile /home/maximi89/Escritorio/es.po /home/maximi89/Escritorio/es.mo && sudo cp /home/maximi89/Escritorio/es.mo /usr/local/share/locale/es/LC_MESSAGES/gnash.mo

Si se dieron cuenta, el compilador de PO o POT, convierte el archivo de PO a MO (machine object), lenguaje entendido por la PC.

Espero que esta guía rápida algo sirva para orientar hacia que deben usar, yo encontré demasiada información que llega a confundir...

lunes, septiembre 20, 2010

El botón de activar/desactivar el touchpad no está configurado para hacer nada, pero aún así, al parecer el controlador o kernel detecta cuando presiono el botón... y algo hace que lo mata...

mirando por ahí encontré muchos reportes de errores:

https://bugs.launchpad.net/fedora/+source/linux/+bug/374459
http://bugs.freedesktop.org/show_bug.cgi?id=21766
https://bugzilla.kernel.org/show_bug.cgi?id=13363
https://bugzilla.redhat.com/show_bug.cgi?id=635219 (el mio)

y varias opciones para la línea de comandos del grub...

i8042.nomux
i8042.debug
i8042.quiet
i8042.reset

Encontré una forma de hacer funcionar mi dispositivo, ya que el controlador i8042 es el encargado de hacer funcionar y desbloquear el touchpad, para "arreglar" este problema de que sólo bloquea el touchpad, ponemos en LA LINEA DE COMANDOS DE GRUB:

i8042.nomux=1




aparte encontré unos parches del kernel... vamos a ver si se aplican pronto al kernel para probarlos :D

https://patchwork.kernel.org/patch/110046/
http://kerneltrap.org/mailarchive/linux-kernel/2010/7/1/4588887/thread

Y mi dmidecode
[root@gateway maximi89]# sudo dmidecode --string system-manufacturer
Gateway
[root@gateway maximi89]# sudo dmidecode --string system-product-name
NV52 Series
[root@gateway maximi89]# sudo dmidecode --string system-version
0100

Claro, hay otro comando de lshal, que provee mucha más información... :D

[root@gateway maximi89]# uname -a
Linux gateway 2.6.32.21-166.fc12.i686.PAE #1 SMP Fri Aug 27 06:33:34 UTC 2010
i686 athlon i386 GNU/Linux

[root@gateway maximi89]# dmidecode |grep -C12 -i mouse
Handle 0x000A, DMI type 8, 9 bytes
Port Connector Information
Internal Reference Designator: J33
Internal Connector Type: None
External Reference Designator: Keyboard
External Connector Type: Circular DIN-8 male
Port Type: Keyboard Port

Handle 0x000B, DMI type 8, 9 bytes
Port Connector Information
Internal Reference Designator: J33
Internal Connector Type: None
External Reference Designator: PS/2 Mouse
External Connector Type: Circular DIN-8 male
Port Type: Keyboard Port

sábado, septiembre 18, 2010

Cómo configurar las teclas para darle funciones específicas a cada una de ellas?

Esto es tan fácil como complicado... si te pones a investigar no acabarás nunca... se supone que cada botón tiene un código... e072, e071, ese código lo puedes obtener con "showkey -s" (teoría porque no le entiendo nada a la salida aún... a menos que debamos transformar el código de HEX a español), pero bueno, se supone que "showkey -k" nos muestra la actual tarea que hace nuestro botón, se supone que con "setkeycodes e071 150" estaríamos enlazando el botón de código e071 con la función 150 del kernel, esa función la podemos ver en "/usr/include/linux/input.h", si le haces un cat a ese archivo y pones un grep para extraer sólo que lo que buscas, por ejemplo:

"cat /usr/include/linux/input.h|grep 150"


con eso podrás ver que función cumple... de todas maneras si tienes botones que no hacen nada, revisa el archivo "/var/log/messages" para ver que código produce el botón y darle una función, yo les puse "abrir navegador" y "expulsar CD"... lo malo es que si lo configuras, sólo durará hasta que reinicies...

Así que para dar permanente, podemos hacer uso de /etc/rc.local
para que quede de manera permanente...
en mi caso, /var/log/messages dice:

Sep 18 03:26:49 gateway kernel: atkbd.c: Unknown key pressed (translated set 2, code 0xf1 on isa0060/serio0).
Sep 18 03:26:49 gateway kernel: atkbd.c: Use 'setkeycodes e071 ' to make it known.
Sep 18 03:26:49 gateway kernel: atkbd.c: Unknown key released (translated set 2, code 0xf1 on isa0060/serio0).
Sep 18 03:26:49 gateway kernel: atkbd.c: Use 'setkeycodes e071 ' to make it known.

Yo hago:
cat /usr/include/linux/input.h

Busco la función
#define KEY_WWW 150 /* AL Internet Browser */

Y:
setkeycodes e071 150

Voilà!
Al presionar el botón tendremos funcionando la función que hemos dado...
Claro, también está xmodmap el cual en teoría debería dar las funciones del Xorg, pero a mi no me funcionaron ni por si acaso... sólo las del kernel... aunque debo decir que tengo unas teclas con problemas... la del Touchpad no tiene asignada una tarea, y HAL no informa que tenga una función asignada... pero aún así bloquea el touchpad y lo mata... hasta suspender y resumir y vuelve a funcionar como debe... este bug lo estoy tratando en el Bugtrack de Fedora...
https://bugzilla.redhat.com/show_bug.cgi?id=635219