Table of contents

Les traductions dans PrestaShop 1.5

PrestaShop dispose de plusieurs types de traduction :

Pour chaque type de traduction, l'outil de traduction interne à PrestaShop analyse un jeu spécifique de dossiers afin de récupérer toutes les chaînes traduisibles qu'ils contiennent, et de les présenter au traducteur.

Traduction du front-office

Les dossiers suivants sont analysés :

Les chaînes traduisibles utilisent la syntaxe Smarty suivante :

{l s='There are no products in this category.'}

Deux options peuvent être ajoutées à cette syntaxe :

Toutes les traductions front-end sont stockées dans le fichier suivant, où iso_code est le code ISO 3166-1 (http://www.iso.org/iso/country_codes.htm) pour la langue utilisée pour traduire les chaines (de, fr, en, it, es, etc.) :

Les traductions sont stockées dans un tableau PHP nommé $_LANG, et prenant la forme suivante, en utilisant un hash MD5 de la chaîne :

La clé d'identification est construite en combinant le nom du fichier de modèle duquel la chaîne est tirée, un signe souligné, et le hash MD5 de la chaîne elle-même.

Si une même chaîne apparaît à différentes endroits du contrôleur, elle apparaîtra aussi souvent dans l'outil de traduction.

Au contraire, si une même chaîne apparaît tant dans le contrôleur que dans le modèle, elle n'apparaîtra qu'une fois pour ce contrôleur.

Traduction du back-office

Les dossiers suivants sont analysés :

Les chaînes traduisibles utilisent la syntaxe suivante :

Trois options peuvent être ajoutées à cette syntaxe :

Toutes les traductions back-end sont stockées dans le fichier suivant, où iso_code est le code ISO 3166-1 (http://www.iso.org/iso/country_codes.htm) pour la langue utilisée pour traduire les chaines (de, fr, en, it, es, etc.) :

Les traductions sont stockées dans un tableau PHP nommé $_LANGADM, et prenant la forme suivante, en utilisant un hash MD5 de la chaîne :

La clé d'identification est construite en combinant le nom du contrôleur duquel la chaîne est tirée et le hash MD5 de la chaîne elle-même.

Notez que :

Si une même chaîne apparaît à différentes endroits du contrôleur, elle apparaîtra aussi souvent dans l'outil de traduction.

Au contraire, si une même chaîne apparaît tant dans le contrôleur que dans le modèle, elle n'apparaîtra qu'une fois pour ce contrôleur.

Traduction des messages d'erreur

Les dossiers suivants sont analysés :

Les chaînes traduisibles utilisent la syntaxe suivante :

Tools::displayError('An error occurred while creating archive.')

Par défaut, la chaîne est traitée par la fonction htmlentities(), afin de convertir à la volée les caractères spéciaux en entités HTML. Vous pouvez spécifier que htmlentities() ne doit pas être utilisé en ajouté une option :

Tools::displayError('An error occurred while creating archive.', false)

Cette méthode ne doit pas être utilisée au sein de modules, car les chaînes de traduction seraient alors stockées dans le fichier /translations/iso_code/errors.php au lieu du fichier /modules/nom_du_module/translations/iso_code.php.

Toutes les traductions des messages d'erreur sont stockées dans le fichier suivant, où iso_code est le code ISO 3166-1 (http://www.iso.org/iso/country_codes.htm) pour la langue utilisée pour traduire les chaines (de, fr, en, it, es, etc.) :

Les traductions sont stockées dans un tableau PHP nommé $_ERRORS, et prenant la forme suivante :

La clé d'identification est construite en utilisant le hash MD5 de la chaîne elle-même.

Si une chaîne apparaît dans plusieurs fichiers, elle n'apparaîtra qu'une fois dans le fichier de traduction.

Traduction des noms de champs

Les dossiers suivants sont analysés :

Les chaînes utilisées sont celles renvoyées par la méthode getValidationRules() de l'objet ObjectModule, pour chaque classe.

Toutes les traductions des messages d'erreur sont stockées dans le fichier suivant, où iso_code est le code ISO 3166-1 (http://www.iso.org/iso/country_codes.htm) pour la langue utilisée pour traduire les chaines (de, fr, en, it, es, etc.) :

Les traductions sont stockées dans un tableau PHP nommé $_FIELDS, et prenant la forme suivante :

La clé d'identification est construite en combinant le nom de la classe d'où provient la chaîne, un signe souligné, et le hash MD5 de la chaîne elle-même.

Traduction des modules installés

En mode de production, seuls les modules installés peuvent être traduits. Si vous souhaitez traduire tous les modules, qu'ils soient installés ou non, vous devez activer le mode Debug de PrestaShop.

Les dossiers suivants sont analysés :

Les chaînes traduisibles utilisent la syntaxe suivante :

Trois options peuvent être ajoutées à cette syntaxe :

La méthode Tools::displayError() ne doit pas être utilisée au sein de modules, car les traductions de chaînes seraient alors enregistrées dans le fichier /translations/iso_code/errors.php plutôt que dans le fichier  /modules/name_of_the_module/translations/iso_code.php.

Depuis la version 1.5 de PrestaShop, vous pouvez traduire les modules en fonction du thème. De fait, la liste des fichiers de traduction est comme suit :

Les traductions sont stockées dans un tableau PHP nommé $_MODULE, et prenant la forme suivante :

La clé d'identification est construite en combinant le nom du module d'où provient la chaîne originale (ex. : "blockcms), suivi du nom du thème (ex. : "prestashop"), puis du nom du fichier (ex. : "blockmobilecms"), d'un signe souligné, et enfin du hash MD5 de la chaîne elle-même.

Si une même chaîne apparaît dans plusieurs fichiers, elle n'apparaîtra qu'une fois dans l'outil de traduction.

Traduction des fichiers PDF

Les dossiers suivants sont analysés :

Les chaînes traduisibles utilisent la syntaxe suivante :

Deux options peuvent être ajoutées à cette syntaxe :

Toutes les traductions des messages d'erreur sont stockées dans le fichier suivant, où iso_code est le code ISO 3166-1 (http://www.iso.org/iso/country_codes.htm) pour la langue utilisée pour traduire les chaines (de, fr, en, it, es, etc.) :

Si vous utilisez le thème par défaut, les traductions sont stockées au sein des traductions par défaut : translations/iso_code/pdf.php

Si vous utilisez tout autre thème, les traductions sont stockées dans le dossier du thème : themes/votre_theme/pdf/lang/iso_code.php

Les traductions sont stockées dans un tableau PHP nommé $_LANGPDF, et prenant la forme suivante :

La clé d'identification est construite en combinant "PDF_invoice" (v1.4) ou "PDF" (v1.5) avec le hash MD5 de la chaîne elle-même.

Si une même chaîne apparaît à différentes endroits du contrôleur, elle apparaîtra aussi souvent dans l'outil de traduction.

Au contraire, si une même chaîne apparaît tant dans le contrôleur que dans le modèle, elle n'apparaîtra qu'une fois pour ce contrôleur.

Traduction de modèles de courriers

Quand il s'agit de toucher aux modèles de courriers électronique, il existe deux types de traduction : le modèle lui-même, et l'objet (ou le titre) du courrier. Ce sont deux choses totalement différentes.

Objet du message

Les dossiers suivants sont analysés :

Les chaînes traduisibles utilisent la syntaxe suivante :

Mail::l('Your new admin password', (int)$id_lang)

Le second paramètre est obligatoire. S'il est oublié, le message sera envoyé avec un objet qui n'est pas dans la langue par défaut de la boutique.

Toutes les traductions de courriers sont stockées dans les fichiers suivants, où iso_code est le code ISO 3166-1 (http://www.iso.org/iso/country_codes.htm) pour la langue utilisée pour traduire les chaines (de, fr, en, it, es, etc.) :

Les traductions sont stockées dans un tableau PHP nommé $_LANGMAIL, et prenant la forme suivante :

The identification key is built by using the original string directly.

La clé d'identification est construite en la chaîne elle-même.

Modèles de message

Les dossiers suivants sont analysés :

Les modèles de message traduits sont ceux disponibles en anglais. Par exemple :

Sprintf

La fonction sprint(), disponible par défaut dans PHP, doit être utilisée correctement dans tous les fichiers de PrestaShop.

Dans les fichiers PHP

Bonne manière :

sprintf($this->l('Empty string found, please edit: "%s"'), $string);
sprintf(Tools::displayError('Please create a "%1$s.php" file in "%2$s"'), $string1, $string2)

Mauvaise manière :

$this->l('Empty string found, please edit:').'"'.$string.'"';
Tools::displayError('Please create a').' "'.$string1.'.php" '.Tools::displayError('file in').'"'.$string2.'"';

Dans les fichiers modèles (nouveauté 1.5)

Bonne manière :

{l s='renamed the /admin folder (e.g. /admin123%d)' sprintf=$number}
{l s='renamed the /%1$s folder (e.g. /admin123%2$d)' sprintf=[$string, $number]}

Mauvaise manière :

{l s='renamed the /admin folder (e.g. /admin123'}{$number})
{l s='renamed the'} /{$string} {l s='folder (e.g. /admin123'}{$number})