• Accueil
  • Curriculum vitae
  • Contact
David Mercereau Le savoir n'est rien s'il n'est pas partagé

Tag Archives: Gettext

Perl/Glade/Gettext – Multilingue programme

5 juillet 2012 21 h 17 min / David

Suite à un email d’une personne intéressée par la traduction de Xsshfs en Espagnol j’ai découvert Gettext n’ayant pas trouvé beaucoup de documentation précise je vais faire un petit HelloWorld en Perl Glade (pour l’interface GTK) et Locale::gettext

Le petit bout de programme que nous allons faire dépend de libgtk2-gladexml-perl & de liblocale-gettext-perl

Création des fichier de traduction

Après création du fichier Glade (que vous pouvez télécharger ici : helloworld.glade) il faut s’assurer que tous les champs que l’on souhaite traduire on la balise “translate” à “yes”

$ grep translatable helloworld.glade
<property name="title" translatable="yes">HelloWorld</property>
<property name="label" translatable="yes">Hello World</property>
<property name="label" translatable="yes">Just one button</property>

Du coup nous allons extraire les données à traduire du fichier glade avec xgettext

$ mkdir po
$ xgettext --sort-output --keyword=translatable -o po/helloworld.pot helloworld.glade

Ouvrez le fichier po/helloworld.pot et compléter avec votre adresse email / nom ect…

Ensuite faites des copies de ce fichier et commencer la traduction (dans notre exemple Anglais -> Français) :

$ cp po/helloworld.pot po/fr.po
$ vi po/fr.po
...
#: helloworld.glade:20
msgid "Hello World"
msgstr "Bonjour tout le monde"

#: helloworld.glade:8
msgid "HelloWorld"
msgstr "Bonjour"

#: helloworld.glade:36
msgid "Just one button"
msgstr "Juste un bouton"

Théoriquement les traductions dans un système linux se trouve dans le chemin /usr/share/locale/fr/LC_MESSAGES mais nous allons les mettre dans un répertoire enfant (./locale) pour notre exemple. Ces traductions sont à “compiler” en .mo

$ mkdir ./locale/fr/LC_MESSAGES
$ msgfmt ./po/fr.po -o ./locale/fr/LC_MESSAGES/helloworld.mo

Intégration dans le perl

Voici le fichier helloworld.pl

#!/usr/bin/perl -w
use helloworld ;
Gtk2->main ;

Et voici le fichier helloworld.pm

package rappels ;

use strict;
use warnings "all";
use Locale::gettext;

use vars qw($gladexml) ;
# $gladexml est donc la variable qui fera référence à l'arbre xml
# de l'application.
# On initialise la valeur de la variable quand l'arbre est créé
# dans le module principale

sub init {
# Démarage de l'interface graphique
$gladexml = $X::gladexml ;
bindtextdomain("helloworld", "./locale");
textdomain("helloworld");
# Sans traduction
print "HelloWorld\n";
# Avec traduction
print gettext("HelloWorld"), "\n";
}
sub on_window1_delete_event{
Gtk2->main_quit ;
}
sub on_bouton_quitter_clicked{
Gtk2->main_quit ;
}

1 ;

package X ;

use strict ;
use Locale::gettext;

bindtextdomain("helloworld", "./locale");
textdomain("helloworld");

require Exporter ;
use vars qw(@EXPORT_OK) ;
@EXPORT_OK = qw ($gladexml) ;
use vars qw($gladexml) ;

use Gtk2 '-init' ;
use Gtk2::GladeXML ;

# On crée l'arbre xml complet. Attention, toutes les fenêtres déclarées
# visibles dans le menu Propriétés->commun->visible, seront affichées
# quand on lancera "Gtk2->main".
$gladexml = Gtk2::GladeXML->new('helloworld.glade' ) ;
# On initialise les variables du module rappels.
rappels::init () ;
# On connecte les fonctions de rappels de l'arbre xml
# à leurs définitions qui sont contenues dans le module rappels.
$gladexml->signal_autoconnect_from_package('rappels' ) ;

1 ;

Tester

Mon poste est en français, je vais donc tester en français puis en forçant l’anglais :

$ echo $LANG
fr_FR.UTF-8
$ perl helloworld.pl
HelloWorld
Bonjour
$ # L'interface doit aussi s'afficher en français
$ LANG=en_US.utf-8
$ perl helloworld.pl
HelloWorld
HelloWorld
$ # L'interface doit aussi s'afficher en anglais

Téléchargement

Vous pouvez télécharger l’intégralité du HellloWorld.pl :

  • perlgladegettext-helloworld.tar.gz

Les liens m’ayant bien aidé :

  • http://fedoraproject.org/wiki/How_to_do_I18N_through_gettext
  • http://www.perlmonks.org/?node_id=839454
  • ftp://ftp.itb.ac.id/pub/CPAN/authors/Phillip_Vandry/gettext-1.01.README
  • http://www.servin.com/linux/GladeInternationalization.html
Posted in: Informatique / Tagged: gettext, glade, perl, planet-libre

Pas d’Anti-pub ?

Vous ne semblez pas disposer d'un filtre anti-pub sur votre navigateur. Je vous encourage à en installer un, c'est gratuit :

Télécharger un anti-publicité

Comprendre la démarche...

Articles récents

  • LA Licence Beerware
  • [FredgniX] diff et patch en dix minutes
  • pongSmtp.pl – Tester le bon fonctionnement de votre serveur mail
  • Linutop 3 – Adaptateur alimentation disque 2,5 pouces
  • Fabriquer un jeu de “Dames Chinoises”
  • [MiniTrick] Désactiver l’historique bash
  • Créer/publier un plugin wordpress simple : “Adblock invite”
  • Incitateur anti-pub… Pourquoi faire ?

Mots-clefs

anti-pub apt auto-hebergement bash bricolage commande contributions cours debian dep dns dovecot emailPoubelle grub hebergement ispconfig ldap libre linutop linux mail musique mysql ménage navigateur perl php planet-libre port postfix proxy publicité script serveur shell socks spam squid ssh sécurité ubuntu vie-privée windows wordpress xsshfs

Liens

  • Forge Zici Ma bébé forge
  • Xsshfs Interface Graphique pour sshfs
  • Zici.fr Services gratuits

Commentaires récents

  • David dans Script de sauvegarde Mysql par base “mysql_dump.sh”
  • David M. dans Script de sauvegarde Mysql par base “mysql_dump.sh”
  • David M. dans Script de sauvegarde Mysql par base “mysql_dump.sh”
  • David M. dans Script de sauvegarde Mysql par base “mysql_dump.sh”
  • Fred dans LA Licence Beerware
  • alexnogard dans [FredgniX] diff et patch en dix minutes
  • Nicolas dans pongSmtp.pl – Tester le bon fonctionnement de votre serveur mail
  • David dans [MiniTrick] Désactiver l’historique bash

Licence Beerware

Le contenu de ce blog est sous licence Beerware

Si on se rencontre un jour et que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en retour.

Le contenu de ce blog est sous licence Beerware
Infinity Theme by DesignCoral / WordPress