Convertir les fichiers .mo et .po

Souvent, lors de l’utilisation d’un programme ou d’un outil externalisant ces messages, tels que les plugins ou thèmes des CMS, on trouve que l’outil ne prend pas en charge notre langue ou qui la traduction n’est pas complète. La plus part des outils utilisent des fichiers de traductions d’une extension mo (machine object) et po (portable object). Dans cet article j’essayerai d’expliquer comment peut-on appliquer notre traduction aux fichiers po et mo.

Les po représentent des fichiers éditables contenant des messages utilisés par l’outil, il comporte un en-tête pour décrit le fichier et une alternance de message origine d’écrit dans la source du programme (msgid) et la traduction sur la ligne suivante (msgstr). Ci-dessous un exemple extrait de la traduction française du CMS WordPress (/[Blog-name]/wp-includes/languages):

# Translation of WordPress 3.0-alpha.
# Copyright (C) 2010 WordPress
# This file is distributed under the same license as the WordPress package.
#
# French translation by the WordPress-Francophone team:
# Xavier Borderie
# Amaury Balmer
#
msgid ""
msgstr ""
"Project-Id-Version: WordPress 3.0.1\n"
"Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com\n"
"POT-Creation-Date: 2010-07-29 21:05+0000\n"
"PO-Revision-Date: 2011-01-18 18:48+0100\n"
"Last-Translator: WordPress Francophone\n"
"Language-Team: WordPress Francophone\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"
"X-Poedit-Language: French\n"
"X-Poedit-Country: France\n"
"X-Poedit-SourceCharset: utf-8\n"
#: wp-admin/admin-ajax.php:36
#, php-format
msgid "<strong>ALERT: You are logged out!</strong> Could not save draft. <a href="\" target="\&quot;_blank\&quot;">Please log in again.</a>"
msgstr "<strong>ALERTE : vous êtes déconnecté(e) !</strong> Impossible d’enregistrer le brouillon. <a href="\" target="\&quot;blank\&quot;">Veuillez vous reconnecter.</a>"

Au contraire des po, les mo représentent des fichiers binaires compilés des po, donc on ne peut pas les éditer via un éditeur de texte tel que gedit.

Conversion po to mo
Traduire les messages consiste à éditer les fichiers po en affectant pour chaque msgid un msgstr. Quand le po est complet, pour qu’il soit utilisable par l’outil, il faut le compilé et le convertir en mo.

Sous un système GNU linux, pour convertir un fichier po vers un mo, il faut utiliser la commande « msgfmt » du paquet « gettext » (disponible par défaut dans Ubuntu) comme suit :

$> msgfmt -o mon_fichier.mo -v mon_fichier.po

Sous windows, je recommande l’utilisation de la solution libre Poedit. Télécharger et installer Poedit, et lancer la commande :

C:\Program Files\Poedit\bin> msgfmt -o mon_fichier.mo -v mon_fichier.po

Conversion mo to po
Dans quelques cas, le programme ne fournie pas son fichier po, mais juste son fichier compilé mo. Pour qu’on puisse ajouter notre apport à sa traduction, il est nécessaire de convertir le mo en po.
Sous GNU Linux, on peut utiliser la commande « msgunfmt » du paquet « gettext » comme suit :

$> msgunfmt mon_fichier.mo > mon_fichier.po

Sous windows, après installerPoedit, essayer la commande suivante :

C:\Program Files\Poedit\bin> msgunfmt mon_fichier.mo > mon_fichier.po

Dans le cas ou vous avez traduit l’outil vers une nouvelle langue ou vous avez complété sa traduction, adopter un esprit de partage et partager votre modification sur le site officiel du programme.

A propos de l'auteur

Faut il vraiment porter des lunettes, pour travailler la nuit, sur un terminal vert sur noire, pour être Geek pour devenir root ?