Créer un cycle de vie localisé

But de ce document

Dans la définition des étapes et des transitons d'un cycle de vie, nous avons vu qu'il n'était pas possible de mettre des espaces et des caractères accentués dans les noms.

En effet, ces noms sont utilisés comme attributs de la famille cycle de vie. Ils correspondent également aux noms des champs de la table dans la base de données.

Le but de ce document est donc d'expliquer comment utiliser la localisation pour traduire ces attributs en textes plus complet dans la langue de votre choix (en français ou en anglais)

Voici l'exemple de cycle que nous allons réaliser dans ce document :

Pré-requis

Avoir déjà mis en place un cycle de vie simple comme indiqué dans cette documentation :

Exemple de définition de cycle de vie utilisé pour ce docuement

Pour ce document, nous allons mettre en place un cycle de vie très simple avec seulement deux étapes et deux transitions.

Attention : Les lignes en commentaire avec les _() et N_() sont importantes car ce sont elles qui nous permettrons de localiser les textes dans les différentes langues (français et anglais)

<?php
include_once("FDL/Class.WDoc.php");
 
define ("i18n","i18n"); 
 
Class WDocTest extends WDoc {
  public $attrPrefix="WDT";
  public $firstState="wdt_Draft"; 
 
  public $transitions = array("wdt_Approvement"=>array(),# _("wdt_Approvement") _("wdt_Correction") _("wdt_Chechin") 
			      "wdt_Correction"=>array(),
			      "wdt_Chechin"=>array(),
			      "wdt_Destroy"=>array());
 
  public $cycle = array(array("e1"=>"wdt_Draft", # _("wdt_Destroy") _("wdt_Draft") _("wdt_Approved") _("wdt_Check") _("wdt_Obsolete")
			      "e2"=>"wdt_Approved",
			      "t"=>"wdt_Approvement"),
			array("e1"=>"wdt_Approved",
			      "e2"=>"wdt_Check",
			      "t"=>"wdt_Chechin"),
			array("e1"=>"wdt_Approved",
			      "e2"=>"wdt_Draft",
			      "t"=>"wdt_Correction"),
			array("e1"=>"wdt_Draft",
			      "e2"=>"wdt_Obsolete",
			      "t"=>"wdt_Destroy"),
			array("e1"=>"wdt_Approved",
			      "e2"=>"wdt_Obsolete",
			      "t"=>"wdt_Destroy"));  
  function postConstructor() {
    $this->stateactivity=array("wdt_Draft"=>N_("writting"),
			       "wdt_Approved"=>N_("check in"));
  }
}
?>

Traduction des constantes dans différentes langues

La première étape consiste à récupérer le contenu des constantes du fichier .php précédent pour générer un nouveau fichier .po qui nous permettra de renseigner les traductions :

# xgettext --keyword='N_' --language=c --keyword='_'  -j  -o test_fr.po Class.WDocTest.php

Ensuite, il faut éditer ce fichier texte « .po », indiquer le bon encodage sur la ligne « Content-Type » et ajouter les traductions. Exemple :

msgid ""
msgstr ""
"Project-Id-Version: TEST\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-01-02 23:42+0100\n"
"PO-Revision-Date: 2009-01-02 23:56+0100\n"
"Last-Translator: me\n"
"Language-Team: french <LL2@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"

#: Class.WDocTest.php:10
msgid "wdt_Approvement"
msgstr "Approbation"

#: Class.WDocTest.php:10
msgid "wdt_Correction"
msgstr "Correction"

#: Class.WDocTest.php:10
msgid "wdt_Chechin"
msgstr "Archivage"

#: Class.WDocTest.php:15
msgid "wdt_Destroy"
msgstr "Destruction"

#: Class.WDocTest.php:15
msgid "wdt_Draft"
msgstr "Initialisé"

#: Class.WDocTest.php:15
msgid "wdt_Approved"
msgstr "Validé"

#: Class.WDocTest.php:15
msgid "wdt_Check"
msgstr "Archivé"

#: Class.WDocTest.php:15
msgid "wdt_Obsolete"
msgstr "Obsolète"

#: Class.WDocTest.php:31
msgid "writting"
msgstr "En rédaction"

#: Class.WDocTest.php:32
msgid "check in"
msgstr "En cours d'archivage"

Remarques : * Pour mettre en place une traduction en anglais, il faut créer un deuxième fichier .po et indiquer les traductions en anglais.

  • Pour éditer ce fichier, il est possible d'utiliser des interfaces graphiques spécialisées comme gtranslator (gnome), kbabel (kde) ou poedit (gtk)

Mise en place de la traduction

Il faut commencer par convertir le fichier texte « .po » en fichier binaire « .mo » :

# msgfmt test_fr.po -o /usr/share/what/locale/fr/LC_MESSAGES/test.mo

Remarque : La commande « msgunfmt » permet de faire l'inverse :

# msgunfmt fichier.mo -o fichier.po

Remarque : Pour mettre en place une traduction en anglais, il faut utiliser le dossier “locale/en/LC_MESSAGES/”

Assembler les différents fichiers « .mo » dans « what.mo » utilisé par Freedom :

# /usr/share/what/whattext

Recharger Apache :

# /etc/init.d/apache2 reload

Remarque : Le cycle de vie doit apparaître traduit immédiatement.

Pour avoir le graphe en anglais, on procède de la même façon en copiant le fichier de traduction dans le répertoire “locale/en/LC_MESSAGES/”.

Paramétrer Freedom pour avoir une interface en anglais

Pour avoir l'interface de Freedom en anglais pour tout les utilisateurs, il faut modifier ce paramètre :

  • Administration / Gestion des applications / paramètres applicatif / Noyau / langue

Pour avoir l'interface de Freedom en anglais pour un utilisateur particulier, il faut modifier ce paramètre :

  • Administration / Gestion des applications / mes paramètres / Noyau / langue

Remarques :

  • Après avoir modifié la langue, il est nécessaire de se déconnecter et de se reconnecter à Freedom.
freedom_2.14/admin/cycle_de_vie/localise.txt · Dernière modification: 05/03/2010 14:21 (édition externe)