Version imprimable Version PDF RSS
jeu, 15/10/2009 - 09:47 | Yoran   Tutoriels Drupal
Drupal - Traduire de l'anglais à l'anglais...
flag.png

Il est un point sous Drupal qui se résume en la problématique de la poule et de l'oeuf : changer des intitulés de l'interface en langue anglaise. En effet, autant changer un terme qui ne convient pas (comme par exemple remplacer "taxonomie" par "étiquettes") est chose simple par l'interface de traduction, autant changer cela en anglais ("taxonomy" par "tags") est impossible car la langue native de Drupal est... l'anglais, et que son affichage ne passe pas par le moteur de traduction.

En réalité pas si impossible que cela avec une petite astuce côtée à 3 sous.

Le système de traduction

Le système de traduction de Drupal consiste à rédiger l'ensemble des textes, en dur et en anglais, encadrés par la fonction t(). Cette fonction va, en fonction de la langue courante, traduire le terme anglais en français, allemand, espagnol, espéranto, etc.

Pour cela, a chaque langue activée dans l'interface de Drupal, correspond une série de traductions Anglais/LangueXXX. Ces traductions sont injectées dans la base de données au moment de l'activation/ajout de la langue, sous réserve que les fichiers sources les contenant aient été préalablement décompressé dans le dossier racine de Drupal.

Ainsi pour ajouter le français, on décompresse l'archive récupérer sur drupal.org, on la décompresse à la racine du site, on ajoute la langue et hop, les traductions sont importés dans la base. Ainsi lorsque Drupal rencontre un t('taxonomy'), il peut renvoyer Taxonomie. Il suffit alors dans l'interface de traduction, de rechercher ce terme, et de saisir sa propre traduction, Étiquettes (personne dans la vraie vie ne comprend cette histoire de taxonomie...).

Maintenant là où ça coince, c'est lorsque l'on doit fournir, outre le français, une interface en anglais. Il n'y a en effet aucun données de traduction en base pour indiquer que le mot anglais 'taxonomy' se traduit, en anglais, par 'tags'...

Pour contourner cette limitation il y a un moyen très simple. Il suffit d'ajouter une nouvelle langue, l'anglais...

Ajout d'une langue anglaise

Bien évidement, il n'y a pas dans l'administration des langues (Configuration du site/Toutes les Langues/Ajouter une Langue) de possibilité d'ajouter une langue Anglais pour les raisons évoquées plus haut. En revanche, si vous jetez un oeil juste en dessous de la liste des langues, vous avez une zone non dépliée "Langue personnalisée", ouvrez-là.

Dans cette zone, nous allons créer notre propre mouture de langue anglaise en spécifiant un code de langue différent de 'en', par exemple en-GB.

Ensuite nous spécifions le Nom de la langue en anglais et le Nom natif de la langue à English (le seule cas que vous rencontrerez où ces deux valeurs sont les mêmes). Vous pouvez, si l'anglais n'est pas la langue par défaut et si vous utilisez cette stratégie de langue spécifier le préfixe en sans problème, sous réserver de préalablement modifier le préfixe de la véritable langue anglaise (mettez y n'importe quoi pour éviter les conflits, de toute façon nous allons désactiver cette langue).

Pour finir cochez De gauche à droite et enregistrez. Vous voilà donc avec une nouvelle langue anglaise. Avant de sortir, décochez la langue anglaise d'origine pour qu'elle ne soit plus active par défaut, et c'est terminé.

Si vous avez déjà des contenus traduits en anglais, il est nécessaire de modifier leur code de langue de 'en' à 'en-GB' (si vous avez utilisé ce code). Pour cela un simple update sur le champ language des tables node et node_revision devrait suffire. Il en est de même pour tous les éléments traduisibles en standard (url alias par exemple) et par le module i18n (les blocs, les menus, etc.).

Conclusion

A partir de maintenant que se passe t-il ? Comme la base de donnée ne contient aucune traduction pour notre nouvelle langue anglaise, la fonction t() de Drupal reverra automatiquement les termes anglais d'origine. Si un terme ne nous convient pas, il nous suffit donc de modifier sa traduction dans notre nouvelle langue anglaise pour ainsi dire "patche" l'anglais d'origine.

timos , le ven, 20/11/2009 - 15:11

Merci Yoran, Nickel cette petite astuce.

Juste une question, est-ce que la fonction de traduction n'est pas plutôt la fonction t(), l() étant la fonction de formatage des liens ?

Je me trompe ?

Yoran, le lun, 21/12/2009 - 12:21

Ah non, ne te te trompes pas, merci :)

Jean , le dim, 20/12/2009 - 22:16

Excéllent truc - mais quel dommage que ce soit nécessaire! Les créateurs auraient du prévoir lors de la conception du logiciel le scénario ou les gens voudraient changer ces chaînes.

---------------

Traduction anglais espagnol

Yoran, le lun, 21/12/2009 - 12:22

Ce n'est pas le plus gros "design flaw", mais cela reste dommage en effet.

Publier un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. Si vous avez un compte gravatar, l'utilisez pour afficher votre avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Every instance of custom tags in the input text will be replaced with a specific tool shortcut.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plus d'informations sur les options de formatage

Êtes-vous humain ?
Cette question est là pour déterminer si vous êtes humain ou pas...