Tutoriel eZ Publish : Traduction de textes statiques

Alain Sahli

Pour comprendre cet atelier, il est nécessaire d'être à l'aise avec l'administration d'eZ Publish et avoir quelques notions d'internationalisation.

- Titre : Tutoriel eZ Publish : Traduction de textes statiques

- Auteur : Alain Sahli

- Parution : 24 novembre 2007

- Mise à jour : 18 novembre 2019

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2007 Alain Sahli. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Description

- II-A. Ajout direct dans le fichier de traduction

- II-B. Création d'une extension de traduction

- III. Liens

I - Introduction

eZ Publish travaille avec deux types de traduction, statique et dynamique. Les traductions statiques c'est les textes que vous pouvez voir sur des boutons ou des messages d'erreurs qui ne sont pas régulièrement changés d'où le nom « statique ». Tandis que les traductions dynamiques, c'est les textes de contenu, donc les pages proprement dites qui sont modifiées par l'éditeur du site. Les textes dynamiques sont à la charge de l'éditeur et il peut les modifier comme bon lui semble ! Cependant il en va autrement avec les textes statiques, ils sont stockés dans des fichiers de traduction portant l'extension .ts, ces fichiers peuvent être édités avec l'outil Qt Linguist. Les textes statiques ne peuvent donc pas être modifiés depuis l'interface d'administration.

II - Description

Le but de cet atelier est d'expliquer deux manières permettant d'ajouter des traductions statiques à vos projets sous eZ Publish. La première méthode est très simple, il s'agit d'éditer le fichier de traduction existant et d'ajouter les traductions manquantes. La deuxième méthode consiste à développer une extension de traduction qui va s'occuper de traduire nos textes statiques, cette méthode permet d'éviter de créer un mélange avec les textes statiques existants.

II-A - Ajout direct dans le fichier de traduction

Les fichiers de traduction de base se trouvent dans le dossier share/translations/ma-locale/translations.ts. Une méthode simple et rapide consiste donc à éditer le fichier dans la langue souhaitée et ajouter quelques traductions dont nous avons besoin. Imaginons que nous voulons ajouter le texte « Send form » en deux langues, français et allemand. Pour réaliser ceci, éditez le fichier de traduction française se trouvant ici : share/translations/fre-CH/translations.ts. Un fichier de traduction .ts est un bête fichier XML, vous pouvez donc l'ouvrir avec votre éditeur de texte et ajouter les lignes suivantes (tout en respectant la structure XML existante) :

Contexte de traduction

<context>
<name>exemple/formulaire</name>
<message>
<source>Send form</source>
<translation type="unfinished">Envoyer le formulaire</translation>
</message>
</context>

Analysons ce petit bout d'XML, la balise context permet de définir un groupe de traduction, on pourra charger un certain context grâce au mot clé contenu dans la balise name. Ensuite c'est très facile, on peut ajouter autant de balises message que l'on veut, il faut juste spécifier la clé de traduction dans les balises source puis écrire la traduction dans les balises translation. Vous aurez peut-être remarqué l'attribut type="unfinished" dans la balise translation il s'agit uniquement d'une balise utilisée par Qt Linguist. Il est d'ailleurs utile de préciser qu'il est conseillé de créer un fichier de traduction vide, c'est-à-dire en laissant les balises translation vide. Ensuite vous pourrez traduire tous vos fichiers à l'aide de Qt Linguist dans différentes langues, mais ceci ne fait l'objet de cet atelier je ne vais donc pas entrer plus en détail.
Maintenant il faut encore ajouter la même traduction dans le fichier de traduction allemande, pour cela il suffit de l'éditer et ajouter le même code XML que dans le fichier de traduction française puis remplacer le texte situé dans les balises translation par le même texte, mais en allemand.

Une fois la nouvelle traduction ajoutée dans les deux fichiers il suffit d'ajouter le code ci-dessous dans le template voulu pour afficher le texte statique dans la bonne langue.

Affiche Send form dans la langue souhaitée

{"Send form"|i18n("exemple/formulaire")}

Pour les personnes qui ne sont pas familiarisées avec le langage de template d'eZ Publish, la clé « Send form » est pipée dans la fonction i18n (internationalisation) qui va automatiquement voir dans le bon fichier de langue (grâce à la locale du site) à quel texte correspond cette clé dans le « context » exemple/formulaire.

L'avantage de cette méthode c'est que l'on peut rapidement et facilement ajouter un nouveau texte statique. Mais le principal désavantage c'est que si vous faites un « upgrade » vos traductions vont disparaître ce qui n'est pas très pratique, ou alors vous devez à chaque fois recopier toutes vos traductions personnelles dans les nouveaux fichiers. De plus vos traductions personnelles sont mélangées avec celles du système.

II-B - Création d'une extension de traduction

Cette méthode permet d'avoir des fichiers de traduction séparés qui ne contiennent que nos traductions personnelles. C'est très facile de développer cette extension. Tout d'abord créer l'arborescence suivante :

arborescence de l'extension de traduction

mon-extension-de-traduction
|--- settings
|   |--- site.ini.append.php
|--- translation
|   |--- fre-FR
|--- translation.ts
|--- ger-DE
|--- translation.ts
|--- eng-GB
|--- translation.ts
|--- untranslated
|--- translation.ts

Placez ensuite cette extension dans le dossier extension situé à la racine de eZ Publish. Authentifiez-vous dans l'administration de votre site puis cliquez sur l'onglet « setup » ou « configuration » puis cliquez sur extension ensuite cochez votre nouvelle extension de traduction et cliquez sur OK. Voilà votre extension a été ajoutée, cependant il faut encore éditer le fichier site.ini.append.php, ajouter ceci :

site.ini.append.php

<?php /*

[RegionalSettings]
TranslationExtensions[]=mon-extension-de-traduction

*/ ?>

Maintenant il s'agit d'éditer le fichier translation.ts qui se trouve dans le dossier untranslated de votre extension, ajoutez uniquement les clés de traduction, mais pas les traductions mêmes, ce fichier sera utilisé comme base pour les traductions dans d'autres langues. Ci-dessous un exemple de fichier vide :

Fichier de traduction vide

<!DOCTYPE TS><TS>
<context>
<name>extension/mon-texte</name>
<message>
<source>Exemple 1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Exemple 2</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Ensuite vous pouvez copier ce fichier dans tous les dossiers de langue (fr-FR, eng-GB, etc.) et les traduire. Pour afficher un texte statique dans un template, vous pouvez utiliser le même code qu'au-dessus en spécifiant le bon context (balises name) et le bon texte source (balises source).

Cette méthode a l'avantage de bien séparer VOS traductions et celles du système, de plus lors d'upgrade vos fichiers de traduction ne seront pas écrasés.

III - Liens

eZ Systems
Topic sur le forum d'eZ Systems
Mon blog