Moteur de traductions

De Wiki.

Sommaire

Principe

Le moteur de traductions est une classe (include/cms-inc/TslManager.php) utilisant le pattern Singleton : il est disponible en une instance unique pour toute l'application. Il fonctionne sur la base d'une table de chaines de référence (dans la langue par défaut) et un table de chaines traduites pour chaque langue définie. Son but est de fournir une version de chaque chaine enregistrée en fonction de la langue courante ($_SESSION['id_langue']).

Il peut fonctionner n'importe où (dans une interface, dans les données stockées en BDD, etc.) et pourrait même permettre de traduire le back-office... Une application qui nécessitera le moteur de traduction doit déclarer son utilisation ainsi que la langue par défaut dans le fichier de configuration (cf Paramétrage).

Utilisation

Pour utiliser ensuite le moteur il suffit (après avoir au préalable récupéré l'instance unique) de l'appeler avec la chaîne de référence :

 $translator =& TslManager::getInstance();
 
 ...
 
 $translator->getText("Ma_chaîne_pouvant_être_traduite");


3 cas se présentent alors :

  • La chaine n'existe pas dans les chaines de référence et elle y est alors ajoutée.
  • La chaine existe dans les références mais n'a pas été traduite, la référence est retournée.
  • La chaine existe en référence et en traduction et la traduction est retournée.


Utilisation par référence :

Une traduction peut être directement appelée par son id.

$translator->getByID($eId);

Le moteur permet aussi de récupérer au besoin la liste des langues disponibles :

 $langpile = $translator->getLanguages();		// list all available languages
 $langpile = $translator->getLanguages(true);		// list only active languages

Données à traduire

Pour utiliser les traductions au sein des tables de la BDD de l'application, il faut définir un paramètre "translate" dans le noeud XML du champ concerné (cf: Traductions dans AutoClass XML).

Paramétrage

Les constantes suivantes régissent le fonctionnement du moteur de traductions :

 define("DEF_APP_USE_TRANSLATIONS", true);		// use translation engine throughout Application
 define("DEF_APP_LANGUE", 1);				// default language
 define("DEF_EDIT_INACTIVE_LANG", false);		// inactive languages remain editable
 define("DEF_APP_LANG_TRANSLATIONS", true);		// use translated country strings (or cms_langue entries - EN/FR)

L'activation ou non d'une langue dans le CMS conditionne la restitution du site publique dans la langue concernée.

Cependant, DEF_EDIT_INACTIVE_LANG permet de conserver sa disponibilité en back-office, par exemple, pour préparer la version traduite des contenus avant publication.

DEF_APP_LANG_TRANSLATIONS permet de maintenir l'ancien fonctionnement des données pays, limité aux intitulé français et anglais présents dans la table cms_pays. Pour disposer de traductions des noms de pays dans d'autres langues, il faut basculer ces noms de pays vers le système de traduction en passant le paramètre DEF_APP_LANG_TRANSLATIONS à true.

Modifications

Pour modifier une chaîne de référence il faut utiliser l'outil dédié du back-office permettant de travailler directement sur les chaines de référence.

2 cas se présentent :

  • La chaîne modifiée existe déjà dans les références, rien ne se passe et l'ancienne chaîne est conservée.
  • La chaine modifiée n'est pas référencée, l'ancienne chaîne est modifier pour prendre en compte la modification.

Une chaine de référence modifiée aura un impact sur tous les appels pour cette chaîne et toutes les donnée traduites pointant vers cette chaîne (cas de la traduction par référence).

IL EST IMPERATIF d'utiliser l'outil dédié du back-office pour modifier une chaîne de référence associée à des données de la BDD. En rééditant des chaînes de référence directement dans les fiches formulaires du back-office, on les multiplie !!