6 de Septiembre, 2009

Nautilus Flickr Uploader 0.02 y problemas con la documentación

Hace un par de días publiqué la versión 0.02 de Nautilus Flickr Uploader. Habían algunos bugs pequeños (pero molestos), y quería sacar algunas de las cosas más importantes del TODO, como las traducciones.

Ya había trabajado con gettext, así que me decidí por Locale::gettext, que proporciona un interfaz bastante conveniente.

Como ya tenía la versión en inglés, ha sido fácil sacar la versión en castellano (y Alex ha preparado la versión en francés también). Solucionar la parte del make install no ha sido difícil, aunque he ido bastante freestyle creando una herramienta auxiliar para el caso: gen-mo.

Básicamente compila los ficheros PO a MO, generando la estructura de directorios que luego se instala en $destdir/share/locale/.

Luego integrar eso en el RPM ha sido bastante más complicado :(. No porque sea difícil, sino porque el tema es oscurito y la documentación nada clara (o no lo he sabido encontrar, que puede ser).

El tema está en que en la sección %files incamos los ficheros que tiene que contener el paquete, pero listar los ficheros MO de la siguiente forma es poco práctico:

%{_datadir}/locale/es/LC_MESSAGES/nautilus-flickr-uploader.po

Lo único que cambia por idioma es lo que he marcado en rojo, y aunque con 3 idiomas que soporto no es problema, puede serlo cuando la lista crezca. Estaba convencido de que esto se podía simplificar, pero ¿cómo?

Bien, al final he desistido de la documentación y, mirando spec de ejemplo y con mucho ensayo/error, he conseguido deducir que en la sección %install podemos emplear:

%find_lang %{name}

Esto buscará nuestros ficheros .mo y los escribirá en un fichero llamado %{name}.lang, con el formato adecuado. Posteriormente en la sección %files solo tendremos que indicar el siguien flag:

%files -f %{name}.lang

¡Y no hace falta nada más! No sé porqué esto no está documentado, quizás es porque %find_lang es una macro (?).

Otra cosa en la que la documentación es fuente de frustraciones es gtk2-perl.

Como referencia está bien, desde el punto de vista de que todo método y clase están documentados, pero no hay casi ejemplos. Al final algunas cosas he acabado entendiéndolas leyendo código en python o ruby que usa GTK (así que la excusa de que es un binding no sé si me convence).

En la parte de gettext es donde más problemas he tenido, porque los textos traducidos dentro de Glade (la versión 2; por cierto :D) se veían correctamente, pero algo tan sencillo como:

my $titleLabel = $gladexml->get_widget( 'TitleLabel' );
$titleLabel->set_markup( _( '<b>Return to this window after you'
	.' have finished the authorization process on Flickr.com</b>' ) );

No se veía correctamente cuando estaban involucrados caracteres unicode (como acentos en castellano, y cosas mucho peores en francés :P).

Al final, con ensayo y error de nuevo, porque no he encontrado documentación, lo he solucionado cambiando la función que empleo para simplificar las llamadas a gettext por algo así:

sub _
{
	use Encode;

	return decode( 'utf8', gettext( shift ) );
}

Con lo que ya se muestra todo correctamente.

No sé hasta dónde se trata de inexperiencia por mi parte y hasta dónde necesitaríamos más y mejor documentación, pero lo que está claro es que algunas cosas me está costando hacerlas... y al final la solución es tan simple que... ¡casi no la encuentro!

Anotación por Juan J. Martínez, clasificada en: gtk, perl, nautilus-flickr-uploader.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: