Jump to content

[GUIDE] Comment fonctionnent les traductions en 1.4.x et 1.5.x


Ninja Of Web

Recommended Posts

Dans PrestaShop il existe différents types de traductions :

  • Traductions du Front Office
  • Traductions du Back-office
  • Traductions des messages d'erreur
  • Traductions du nom des champs
  • Traductions des modules installés
  • Traductions des fichiers PDF
  • Traductions des templates d'e-mails

I. Traductions du Front Office

 

Dossiers qui sont parsés :

  • /themes/nom_du_theme/
  • /themes/nom_du_theme/override/ (Uniquement en 1.5)

Syntaxe à utiliser dans les templates :

 

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

 

Deux options peuvent s'ajouter à cette syntaxe :

  • "js=1" : pour signifier que cette chaîne est contenue dans du JavaScript
  • "sprintf='une chaine ou un chiffre'" : Voir différents exemples dans la section sur les "sprintf" (Uniquement en 1.5)

Fichier contenant toutes les traductions : /themes/nom_du_theme/lang/iso_code.php

Nom de la variable du tableau : $_LANG

 

Construction de la clé anglaise : nom du template où se situe la chaine anglaise, suivie d'un underscore, puis du MD5 de la chaine.

Exemple :

$_LANG['address_19f823c6453c2b1ffd09cb715214813d'] = 'Champ requis';

 

 

Note :

Si vous avez une même chaine dans plusieurs controllers différents, il faudra la traduire en autant de fois qu'il y a de fichiers.

Par contre si vous avez la même chaine dans un controller et son template, celle-ci sera traduite une seul fois.

 

 

II. Traductions du Back-office

 

Dossiers et fichiers qui sont parsés en 1.4:

  • /admin/ (Pour les fichiers suivants : header.inc.php, footer.inc.php, index.php, login.php, password.php, et functions.php)
  • /admin/tabs/
  • /classes/AdminTab.php

En 1.5, s'ajoutent les dossiers suivants:

  • /admin/themes/ : Tous les templates dans les sous dossiers sont parsés.
  • /controllers/admin/
  • /override/controllers/admin/
  • /classes/helper/
  • /classes/AdminController.php

Syntaxe à utiliser :

  • pour les controllers et les classes :

$this->l('Add new root category')

  • pour les fichiers PHP à la racine du dossier admin/ :

translate('Customer name:')

  • pour les templates du Back-office :

{l s='Add tag'}

 

Auquel on peut rajouter trois options :

  • "js=1" : pour signifier que cette chaîne est contenue dans du JavaScript
  • "slashes=1" : permet d'ajouter des antislashes dans la chaine
  • "sprintf='une chaine ou un chiffre'" : Voir différents exemples dans la section sur les "sprintf" (Uniquement en 1.5)

Fichier contenant toutes les traductions : /translations/iso_code/admin.php

Nom de la variable du tableau : $_LANGADM

 

Construction de la clé anglaise : nom du controller où se situe la chaine anglaise, puis du MD5 de la chaine.

Exemple:

$_LANGADM['AdminAccess151648106e4bf98297882ea2ea1c4b0e'] = 'Mise à jour réussie';

Tous les templates contenus dans le dossier "_/themes/default/templates/controllers/", sont préfixés par "Admin" + le nom du fichier

Tous les fichiers contenus dans le dossier "/classes/helper/", sont prefixés par "Helper"

Tous les fichiers à la racine du dossier "/themes/default/templates/", sont préfixés "AdminController"

 

Note :

Si vous avez une même chaine dans plusieurs controllers différents, il faudra la traduire en autant de fois qu'il y a de fichiers.

Par contre si vous avez la même chaine dans un controller et son template, celle-ci sera traduite une seul fois.

 

III. Traductions des messages d'erreur

 

Dossiers qui sont parsés :

  • / : tous les fichiers PHP à la racine du site
  • /classes/
  • /controllers/
  • /override/classes/
  • /override/controllers/
  • /admin/
  • /admin/tabs/
  • /modules/ : tous les fichiers des modules sont parsés

En 1.5, s’ajoutent les dossiers:

  • /controllers/admin/
  • /controllers/front/
  • /override/controllers/admin/
  • /override/controllers/front/
  • /override/classes/

Syntaxe à utiliser dans ces fichiers :

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

Par défaut, un htmlentities est utilisé. On peut spécifier de ne pas utiliser le htmlentities de cette manière :

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

 

Attention :

Cette méthode ne doit pas être utilisée dans les modules. Car la traduction de ces chaînes s'enregistrera dans le fichier "/translations/iso_code/errors.php" au lieu de "modules/nom_du_module/translations/iso_code.php"

 

 

Fichier contenant toutes les traductions : /translations/iso_code/errors.php

Nom de la variable du tableau : $_ERRORS

 

Construction de la clé anglaise : uniquement le MD5 de la chaine.

Exemple :

$_ERRORS['00569f4db559dc94d9a954a090c22b85'] = 'Impossible d\'écrire';

 

Note :

Si vous avez une même chaine d'erreur dans plusieurs fichiers différents, celle-ci sera traduite une seul fois.

 

IV. Traductions du nom des champs

 

Dossiers qui sont parsés :

  • /classes/ et tous les sous-dossiers de celui-ci

Il s'agit de tous les noms des champs retournés par la méthode _getValidationRules() de l'Object Model pour chaque classe.

 

Fichier contenant toutes les traductions : _/translations/iso_code/fields.php

Nom de la variable du tableau : $_FIELDS

 

Construction de la clé anglaise : nom de la classe où se situe le nom du champ en anglais, suivit d'un underscore, puis du MD5 de la chaine.

Exemple:

$_FIELDS['Address_2df2ca5cf808744c2977e4073f6b59c8'] = 'Téléphone mobile';

 

V. Traductions des modules installés

 

Seul les modules qui sont installés, peuvent être traduits en mode PROD.

En mode DEV, la liste des modules traduisibles est complète (module installé ou non)

 

Dossiers qui sont parsés :

  • /modules/ et tous les sous-dossiers des différents modules

Syntaxe à utiliser :

  • pour tous les fichiers PHP :

$this->l('Add new root category') ou encore $module->l('Add new root category')

  • pour les templates :

{l s='Add tag'}

Auquel on peut rajouter trois options :

  • "js=1" : pour signifier que cette chaîne est contenue dans du JavaScript
  • "mod='blockcms'" : ajoute le nom du module
  • "sprintf='une chaine ou un chiffre'" : Voir différents exemples dans la section sur les "sprintf" (Uniquement en 1.5)

Attention :

La méthode Tools::displayError() ne doit pas être utilisée dans les modules. Car la traduction de ces chaînes s'enregistrera dans le fichier "/translations/iso_code/errors.php" au lieu de "modules/nom_du_module/translations/iso_code.php"

 

 

Fichier contenant toutes les traductions : /modules/nom_du_module/iso_code.php pour le thème par défaut (uniquement en 1.4)

En 1.5, il est possible de traduire des modules selon les thèmes. La liste des fichiers de traduction a donc changé :

  • /modules/nom_du_module/translations/iso_code.php : pour le thème par défaut
  • /themes/nom_du_theme/modules/nom_du_module/translations/iso_code.php : pour les autres thèmes

Nom de la variable du tableau : $_MODULE

 

Construction de la clé anglaise : nom du module où se situe la chaine anglaise (ex: blockcms), suivie du nom du thème (ex: prestashop), suivit du nom du fichier (ex : blockmobilecms) suivit d'un underscore, puis du MD5 de la chaine.

Exemple :

$_MODULE['<{blockcms}prestashop>blockmobilecms_d1aa22a3126f04664e0fe3f598994014'] = 'Promotions';

 

Note :

Si vous avez une même chaine dans plusieurs fichiers différents, celle-ci sera traduite une seul fois.

 

 

VI. Traductions des fichiers PDF

 

Fichiers qui sont parsés en 1.4 :

  • /classes/PDF.php
  • /override/classes/PDF.php

Dossiers qui sont parsés en 1.5 :

  • /classes/pdf/
  • /override/classes/pdf/
  • /pdf/
  • /themes/nom_du_theme/pdf/

Syntaxe à utiliser en 1.4 :

self::l('RETURN #')

Syntaxe à utiliser en 1.5 :

  • pour les classes : nom_de la classe::l('ma chaine');

Exemple:
HTMLTemplateInvoice::l('Invoice ') ou encore HTMLTemplateDeliverySlip::l('Delivery')

  • pour les templates :

{l s='Delivery Address'}

Auquel on peut rajouter deux options :

  • "pdf='true'" : ajoute le nom du module
  • "sprintf='une chaine ou un chiffre'" : Voir différents exemples dans la section sur les "sprintf" (Uniquement en 1.5)

Fichier contenant toutes les traductions :

 

/translations/iso_code/pdf.php : pour les traductions en 1.4

 

Attention pour la version 1.5 :

  • Si vous utilisez le thème par défaut, les traductions seront enregistrées dans les traductions par défaut : translations/iso_code/pdf.php
  • Si vous utilisez un thème personalisé, les traductions seront enregistrées dans le dossier du thème : themes/your_theme/pdf/lang/iso_code.php

Nom de la variable du tableau : $_LANGPDF

 

Construction de la clé anglaise : "PDF_invoice" en 1.4 ou "PDF" en 1.5, suivit du MD5 de la chaine anglaise.

Exemple :

$_LANGPDF['PDF_invoicecb5efbba6a6babef9082ca6976928ca7'] = 'Bon de livraison n°';

 

 

 

Note :

Si vous avez une même chaine dans plusieurs controllers différents, il faudra la traduire en autant de fois qu'il y a de fichiers.

Par contre si vous avez la même chaine dans un controller et son template, celle-ci sera traduite une seul fois.

 

VII. Traductions des templates d'e-mails

 

Pour les mails, la traduction des templates d'email et des objets sont complétement différentes.

 

A. Les objets des mails

 

Dossiers qui sont parsés en 1.4 :

  • /classes/
  • /controllers/
  • /admin/
  • /admin/tabs/
  • /modules/nom_du_module/ : tous les fichiers des modules contenant un dossier "mails/" son parsés

Dossiers qui sont parsés en 1.5 :

  • /controllers/admin/
  • /controllers/front/
  • /override/classes/
  • /override/controllers/admin/
  • /override/controllers/front/

Syntaxe à utiliser dans les templates :

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

Le deuxième paramètre est obligatoire. Si il n'est pas spécifié, l'objet sera envoyé avec la langue par défaut de la boutique.

Fichiers contenant toutes les traductions des objets des mails:

  • /mails/_{color:#99cc00}{_}iso_code{_}{color}_/lang.php_ : pour les traductions par défaut
  • /themes/nom_du_theme/mails/iso_code/lang.php_ : pour les traductions dans chaque thème

Nom de la variable du tableau : $_LANGMAIL

 

La clé de ce tableau est uniquement constitué de la chaine anglaise.

Exemple :

$_LANGMAIL['Welcome!'] = 'Bienvenue !';

 

B. Les templates d'emails

 

Liste des différents dossiers par ISO CODE de chaque langue :

  • /mails/iso_code/ : pour les templates d'email par défaut
  • /themes/nom_du_theme/mails/iso_code/ : pour les templates d'email dans chaque thèmes

Les templates d'email qui sont traduits, sont ceux présent en anglais.

Exemple :

  • si "/mails/en/account.html" existe, alors on pourra le traduire pour chaque langue présente dans le Back-office
  • si "/themes/nom_du_theme/mails/en/account.txt", n'existe pas, on ne pourra donc pas le traduire.

VIII. Sprintf

 

 

Dans les fichiers PHP :

  • Exemples correct :

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)

  • Exemples non correct :

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

 

Dans les templates (uniquement en 1.5) :

  • Exemples correct :

{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]}

  • Exemples non correct :

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

Edited by Patric Codron (see edit history)
  • Like 10
Link to comment
Share on other sites

V. Traductions des modules installés

 

Construction de la clé anglaise : nom du module où se situe la chaine anglaise (ex: blockcms), suivit du nom du thème (ex: prestashop), suivit du nom du fichier (ex : blockmobilecms) suivit d'un underscore, puis du MD5 de la chaine.

Exemple :

$_MODULE['<{blockcms}prestashop>blockmobilecms_d1aa22a3126f04664e0fe3f598994014'] = 'Promotions';

 

@Loic,

En 1.5, les modules vont disposer de beaucoup plus de sous-répertoires que pour les versions précédentes (répertoire controllers, views....)

 

Que se passe-t-il au niveau des traductions si 2 fichiers portent le même nom entre 2 répertoires différents ?

 

En effet, on n'est pas à l'abri d'un même ficher 'action.php' sité dans /controllers/front et /controllers/back/

 

Or si je comprends bien la note ci-dessus, la construction de la clé ne prend pas en compte les sous-rpéertoires mais uniquement le nom du fichier.

 

Idem, quid du conflit en monfichier.php et monfichier.tpl ?

Link to comment
Share on other sites

Bonjour Olea :)

 

Que se passe-t-il au niveau des traductions si 2 fichiers portent le même nom entre 2 répertoires différents ?

 

La traduction des deux chaines sera identiques.

Tous comme 2 chaines identique dans un même fichier...

 

Idem, quid du conflit en monfichier.php et monfichier.tpl ?

 

Idem que la réponse ci-dessous.

 

Cordialement,

Loïc.

Link to comment
Share on other sites

 

La traduction des deux chaines sera identiques.

Tous comme 2 chaines identique dans un même fichier...

 

 

Merci ;)

 

Dans le back office, si les 2 chaines identiques sont dans le même fichier, on n'a qu'une seule zone de saisie.

Si la même chaine est dans 2 fichier, on a 2 zones de saisie mais seule la dernière sera mémorisée dans le fichier ISO.php ?

 

c'est bien ca ?

Link to comment
Share on other sites

Merci ;)

 

Dans le back office, si les 2 chaines identiques sont dans le même fichier, on n'a qu'une seule zone de saisie.

Si la même chaine est dans 2 fichier, on a 2 zones de saisie mais seule la dernière sera mémorisée dans le fichier ISO.php ?

 

c'est bien ca ?

 

Non ceci est uniquement valable pour les modules (Tous ce qui est contenu dans le dossier du module) :

Si vous avez deux chaines identique à traduire dans deux fichiers différents, vous aurez 1 chaine à traduire.

Pour le Front et le Back Office, si vous avez des chaines identiques dans plusieurs fichiers différents, vous aurez autant de chaines à traduire (Sauf si il s'agit d'une paire controller + templates, ou la se sera bien une seul chaine)

 

J'espère que vous avez bien compris :)

Link to comment
Share on other sites

J'espère que vous avez bien compris :)

 

Vi, Vi ;)

Mais je me suis beaucoup cassé les dents sur les traductions de modules entre 1.2/1.3 puis 1.3/1.4 que je veux être sûr pour 1.5.

 

Donc dans les modules, une même chaine est toujours traduite de la même manière, quelque soit le fichier où elle se trouve, contrairement aux traductions front/back/erreur : il faudrait le rajouter à cette doc.

 

Dans le BO de traduction des modules, c'est classé par fichier. La zone de saisie ne sera donc présente que pour 1 seul des fichiers.

 

Je suis venu direct avec ma question, sans préciser qu'on aimerait beaucoup avoir plus de docs aussi détaillées et claires. Merci ;)

  • Like 1
Link to comment
Share on other sites

Merci pour l'ajout

 

Pendant qu'on y est, jusqu'en 1.4, dans un fichier situé dans un module, définissant un objet, l'appel $this->l('machaine') est impossible.

Il faut faire un appel à $moduleContenantLeFichier->getL('machaine'), qui lui fait le $this->l()

 

C'est toujours pareil en 1.5 ? l'object modèle ne connait pas le module depuis lequel il est inclus ? Pardon, ne connait pas les traductions du module depuis lequel il est inclus

Edited by olea (see edit history)
Link to comment
Share on other sites

maintenant sur la 1.5 il faut utiliser

$this->module->l('chaine');

 

C'est vrai pour les controller placés dans les modules.

Par contre, ca n'est pas utilisable dans un Object dont le fichier est dans un module.

 

Par exemple, dans /modules/loyalty/

Le fichier LoyaltyStateModule.php est un ObjectModel.

Pour avoir des traductions, il fait :

$module = new loyalty();

$chaine = $module->getL('chaine');

 

En testant, le $this->module n'existe pas pour ce genre d'ObjectModel inclus depuis un module

Link to comment
Share on other sites

Merci pour l'ajout Pendant qu'on y est, jusqu'en 1.4, dans un fichier situé dans un module, définissant un objet, l'appel $this->l('machaine') est impossible. Il faut faire un appel à $moduleContenantLeFichier->getL('machaine'), qui lui fait le $this->l() C'est toujours pareil en 1.5 ? l'object modèle ne connait pas le module depuis lequel il est inclus ? Pardon, ne connait pas les traductions du module depuis lequel il est inclus

 

Bonjour,

 

Oui effectivement, c'est toujours la même solution car les ObjetModels ne sont pas censés contenir des traductions.

 

Cordialement,

Loïc.

Link to comment
Share on other sites

Bonjour,

 

Je suis en train de créer un module pour PS 1.5.

J'ai créé un fichier "monmodule.php" à la racine avec une fonction getContent(). La traduction se fait bien sur ce fichier.

 

Par contre, j'ai également créé un fichier "AdminMonmoduleController.php" dans le dossier "controllers/admin" et le texte n'est pas traduit.

La page de traduction des modules repère pourtant ce fichier et les traductions sont bien enregistrées dans mon fichier "translations/fr.php"

 

Je ne vois pas d'où peut venir le problème. Quelqu'un aurait-il une idée ?

 

D'avance merci.

Link to comment
Share on other sites

Bonjour ébewé,

 

Il faut créer une instance de votre module dans votre controller.

 

Voir Le controller default.php du module "productcomments".

 

$module_instance = new ProductComments();
$module_instance->l('ID product is incorrect');

 

Cordialement,

Loïc.

 

Bonjour Loic,

 

Ce n'est pas mieux d'utiliser le context dans les controllers?

 

$this->module->l('Phrase à traduire');

 

Pour ma part c'est ce que j'utilise sans problème.

  • Like 1
Link to comment
Share on other sites

Bonjour Loic,

 

Ce n'est pas mieux d'utiliser le context dans les controllers?

 

$this->module->l('Phrase à traduire');

 

Pour ma part c'est ce que j'utilise sans problème.

Ca me parait effectivement mieux, pour éviter une réinstanciation d'un objet module.

Link to comment
Share on other sites

Bonsoir,

 

merci à tous pour vos réponses.

J'ai testé les trois méthodes et seulement la troisième fonctionne pour moi.

 

Les trois reconnaissent les traductions, et les enregistrent de manière correcte dans le bon fichier "translations/iso_code.php", mais seulement la troisième méthode les récupère et les applique.

 

Donc voila, la méthode de Prestaspirit marche :

$this->module->l('Chaîne à traduire', 'default');

 

Merci !

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

Pour ceux qui ont des erreurs de type : page blanche, erreur 500 ou encore toute mes traductions ne sont pas sauvegarder, j'ai créer un deuxième guide que j'alimente au fur et à mesure qui peut répondre à vos questions : http://www.prestashop.com/forums/topic/193871-guide-problemes-recurrents-lors-de-la-traduction-dans-le-back-office/

 

Loïc.

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

 

je viens de suivre la procédure pour la traduction dans les tpl. J'ai ajouter dans mon thème la surcharge du fichier "blocktopmenu.tpl" avec pour traduction {l s='Search'}

 

{if $MENU != ''}
</div>
<!-- Menu -->
<div class="sf-contener clearfix">
 <ul class="sf-menu clearfix">
  {$MENU}
  {if $MENU_SEARCH}
   <li class="sf-search noBack" style="float:right">
 <form id="searchbox" action="{$link->getPageLink('search')}" method="get">
  <p>
   <input type="hidden" name="controller" value="search" />
   <input type="hidden" value="position" name="orderby"/>
   <input type="hidden" value="desc" name="orderway"/>
   <input type="text" name="search_query" value="{l s='Search'}" onfocus="if(this.value=='{l s='Search'}') this.value='';" onblur="if(this.value=='') this.value='{l s='Search'}';" id="btn-recherche-top" />
  </p>
	    <p>
		  <input type="image" src="{$img_dir}loupe.gif" alt="{l s='Search'}" />
	    </p>
 </form>
   </li>
  {/if}
 </ul>
 <div class="sf-right"> </div>
<!--/ Menu -->
{/if}

 

J'ai ensuite été dans le back dans la l'onglet traduction pour remplir le champ. jusqu'ici tout est OK!

 

Lorsque je retourne sur le front, il ne me traduit pas le texte.

 

Quelqu'un aurait-il une idée ?

Link to comment
Share on other sites

 

J'ai ensuite été dans le back dans la l'onglet traduction pour remplir le champ. jusqu'ici tout est OK!

 

Lorsque je retourne sur le front, il ne me traduit pas le texte.

 

Quelqu'un aurait-il une idée ?

 

Bonjour,

 

Lors de la traductions, avez vous bien sélectionnez votre thème personalisé ? ou celui par défaut ?

 

Cordialement,

Loic.

Link to comment
Share on other sites

Bonjour,

 

Je suis confronté à un problème pour la traduction des modules sous Prestashop 1.5

Voici l'architecture de mes tpl dans mon module que je n'arrive pas à visualiser dans le back-office et donc à traduire :

Module/nom-du-module/views/templates/front/nom.tpl

 

A l'intérieur de ces tpl j'effectue la traduction comme ceci : {l s='hello' mod='nom-du-module'}

 

Rien à faire pour faire fonctionner la traduction. Une idée ?

 

Merci

Link to comment
Share on other sites

Le chemin exact (puisque j'imagine que tu veux voir le nom pour voir si je l'écris bien) vers un de mes tpl est :

modules/abonnement/views/templates/front/form.tpl

Dans ce template j'ai par exemple ceci : {l s='Sa date de naissance' mod='abonnement'}

 

Le nom du module est : $this->name = 'abonnement';

 

Par contre je viens de voir quelque chose. J'avais pas de dossier translations. Je l'ai créé et j'ai bien fr.php et en.php dedans.

Ils contiennent ceci :

global $_MODULE;

$_MODULE = array();

 

J'imagine que j'y suis quasi mais toujours rien dans le back-office afin d'effectuer les traductions.

Link to comment
Share on other sites

  • 2 weeks later...

Salut Olea,

 

est-ce que tu a essayé ça?

 

Donc après moult tests je viens de découvrir qu'il faut passer le nom du fichier en 2ème argument de la méthode l() pour les controllers admin/front comme ceci pour le controller default en front par exemple :

 

$this->module->l('Chaîne à traduire', 'default');

 

Franck

Link to comment
Share on other sites

@Prestaspirit

 

Le problème dans un AdminController, est que certains des $this->l() sont fait par la classe AdminPersoController (genre les noms des champs) mais que d'autres sont fait par la classe mère AdminController (genre les noms des boutons 'ajouter', 'nouveau','editer'...)

 

Il ne me parait pas logique de devoir passer le nom du template en paramètre, quand on développe un AdminController :

- dans le code php lui-même, on est indépendant du template

- dans le tpl, ça se discute : si le l() ,'a pas le template, ca pourrait être la classe mère qui retrouve le template par défaut pour appeler le translate

Link to comment
Share on other sites

Pour revenir brièvement sur mon cas, dans le back-office, lorsque j'allais dans localisation->traductions et que je selectionnais traduction des modules installés, je ne voyais pas mes textes à traduire.

 

Je me suis rendu compte qu'ils se trouvaient dans le thème default et non dans mon thème. Comment cela est-il possible ? Comment faire pour les mettre dans mon thème ?

Link to comment
Share on other sites

Pour revenir brièvement sur mon cas, dans le back-office, lorsque j'allais dans localisation->traductions et que je selectionnais traduction des modules installés, je ne voyais pas mes textes à traduire.

 

Je me suis rendu compte qu'ils se trouvaient dans le thème default et non dans mon thème. Comment cela est-il possible ? Comment faire pour les mettre dans mon thème ?

 

Désolé pour le retard ;)

 

En faite lorsque tu sélectionne "modules installés" avec ton thème perso, tu traduira uniquement les fichier qui sont ici : themes/ton-theme/modules/

Alors qu'avec le thème par défaut c'est ici : modules/

 

Voilà j'espère avoir éclairci ce sujet :)

 

Loic.

Link to comment
Share on other sites

Bonjour,

 

J'utilise la version PS 1.4.8.3 (je suis novice) et suis actuellement en pleine construction d'une boutique (elle n'est pas encore en ligne).

Je souhaiterais pouvoir traduire le pavé de texte que j'ai sur la page d'accueil (j'ai utilisé le module Bloc de texte TM v1.4 ) mais je ne sais pas comment faire. :(

 

Quelqu'un pourrait-il m'aider ?

 

Cordialement,

LittleAngel

Link to comment
Share on other sites

Bonjour,

 

J'utilise la version PS 1.4.8.3 (je suis novice) et suis actuellement en pleine construction d'une boutique (elle n'est pas encore en ligne).

Je souhaiterais pouvoir traduire le pavé de texte que j'ai sur la page d'accueil (j'ai utilisé le module Bloc de texte TM v1.4 ) mais je ne sais pas comment faire. :(

 

Quelqu'un pourrait-il m'aider ?

 

Cordialement,

LittleAngel

 

Bonjour,

 

Ce module ne fait pas parti des modules fournis par Prestashop mais trés certainement lors de l'achat de votre theme...

 

Je ne le connais pas mais il faudrait peut-être demandé à l'intégrateur de ce thème ou encore utilisé un autre module.

 

Cordialement,

Loic.

Link to comment
Share on other sites

Bonjour,

Je suis sous PS 1.5.2.

J'utilise le thème par defaut.

J'ai essayé toutes les solutions données dans cette discussion, rien ne fonctionne.

J'ai un module qui fonctionne uniquement en Back Office et pour lequel je crée un nouvel onglet. Tout fonctionne sauf les traductions. L'arborescence du module semble bonne, les traductions sont bien prises en compte dans les fichiers XX.php.

Je n'utilise cependant pas les viewers et helpers. Dans la classe monModule/controllers/admin/AdminPersoController.php

dans la fonction renderList(), j'utilise :

 

$html = '<p>truc a traduire</p>';
$html .='etc...';

 

et pour finir :

$this->content= $html;
return parent::renderList();

 

Comment faire dans cette configuration pour les traductions ?

Merci

Edited by Vinum (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

 

J'ai rajouté une information dans le template PDF (de mon thème) de bon de livraison en utilisant le formalisme indiqué.

 

{l s='Carrier Name:'};

 

Dans ma page "traductions", j'ai bien ce nouveau champ qui apparaît mais lorsque je sauvegarde la traduction ne s'applique pas.

Elle est pourtant bien enregistrée puisque à la réouverture de la page, le champ en français n'a pas disparu.

 

Par contre dans mon BL j'ai toujours "Carrier Name" qui s'affiche et non "transporteur".

 

Avez-vous idée de l'origine du problème ?

 

Merci d'avance

Link to comment
Share on other sites

  • 3 weeks later...

Je me réponds à moi même pour les traductions d'un module en back office pour PS >= 1.5.

Contrairement à ce qu'il est dit pour les classes en back office, il ne faut pas les nommer :

monModule/controllers/admin/AdminPersoController.php

mais simplement :

monModule/controllers/admin/AdminPerso.php

il faut enlever le Controller sinon les traductions ne fonctionnent pas.En revanche il faut laisser Controller dans la définition de la classe.

class AdminPersoController extends ModuleAdminController

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour à tous!

Petit problème de néophyte:

 

Je cherche un peu à découvrir le systeme de modules. Pour tester et voir comment fonctionne un peu les modules prestashop j'utilise le module "contact" (contactez-nous, 24h/ blabla). Bref j'ai voulu changer la phrase notre équipe est disponible 24h/7j, J'ai donc modifier le fichier blockcontact.tpl dans blockcontact (pas dans mon theme, en fait j'utilise le thème "default" que je modifie, car les images passe pas sous ie avec un autre nom et j'ai preferé garder le nom default que faire des modif plus moche et embrumée bref).

Je change la phrase par "a question or need information, please contact us:"

 

 

Après avoir modifié le tpl, je suis partit dans localisation-> traduction du backoffice, je clique sur le drapeau français, et là je vois bien la ligne en rouge "a question or need information, please contact us:" à la place de l'ancienne. J'ai donc mis la traduction en français et enregistré.

Sauf qu'une fois cette procédure faite, je vois sur le site que l'ancienne phrase en anglais "Our hotline is available 24/7", que je sois sur la partie français ou anglaise je vois cette phrase (je ne sais même pas où elle est enregistré vu que je l'ai modifié, peut etre dans la bdd?).

D'ailleurs, après la modification du tpl, la phrase ne devraient-elle pas déjà être changé dans la partie anglaise?

 

 

Je pense mon problème avec simple, mais j'aurais aimé savoir si j'ai bien procédé, y a t-il quelque chose à changer en plus?

Link to comment
Share on other sites

Bonjour à tous!

Petit problème de néophyte:

 

Je cherche un peu à découvrir le systeme de modules. Pour tester et voir comment fonctionne un peu les modules prestashop j'utilise le module "contact" (contactez-nous, 24h/ blabla). Bref j'ai voulu changer la phrase notre équipe est disponible 24h/7j, J'ai donc modifier le fichier blockcontact.tpl dans blockcontact (pas dans mon theme, en fait j'utilise le thème "default" que je modifie, car les images passe pas sous ie avec un autre nom et j'ai preferé garder le nom default que faire des modif plus moche et embrumée bref).

Je change la phrase par "a question or need information, please contact us:"

 

 

Après avoir modifié le tpl, je suis partit dans localisation-> traduction du backoffice, je clique sur le drapeau français, et là je vois bien la ligne en rouge "a question or need information, please contact us:" à la place de l'ancienne. J'ai donc mis la traduction en français et enregistré.

Sauf qu'une fois cette procédure faite, je vois sur le site que l'ancienne phrase en anglais "Our hotline is available 24/7", que je sois sur la partie français ou anglaise je vois cette phrase (je ne sais même pas où elle est enregistré vu que je l'ai modifié, peut etre dans la bdd?).

D'ailleurs, après la modification du tpl, la phrase ne devraient-elle pas déjà être changé dans la partie anglaise?

 

 

Je pense mon problème avec simple, mais j'aurais aimé savoir si j'ai bien procédé, y a t-il quelque chose à changer en plus?

 

Bonjour,

 

Ce module est-il overrider ? (est-il présent dans themes/votre_theme/modules/le_nom_du_module/ ?)

Car typiquement vous êtes dans le bon module mais pas le bon fichier...

 

Cordialement,

Loic.

Link to comment
Share on other sites

Non j'ai directement modifié dans modules/blockcontact, fallait t-il l'override?

Après votre message, je vois que le fichier tpl a été par default override, (dans le theme de base)... Je vais donc laisser le premier fichier tpl en paix et le remettre dans son état d'origine et changer l'override pour voir, j'editerais après.

 

merci ninja!

 

 

 

edit: après modification des fichiers (remis le fichier de modules/blockcontact par défaut et modification du fichier dans mon theme), j'ai un autre probleme. J'ai bien vu apparaitre sur ma page d'accueil la traduction en français (parfait!). Mais j'ai voulu m'assurer du bon fonctionnement et de ma bonne compréhension en "mettant à jour la langue" française, (ce bouton me parrait d'ailleurs dangereux:p).

Bref après avoir mis à jour, sur ma page d'accueil j'ai le message que j'ai entré en anglais (donc celui de l'override), mais quand je vais dans traduction des modules installé, re-belotte, j'ai le 24/7j, à traduire, et pas celui override.

 

 

 

Résumé: J'ai override le fichier tpl, si je n'ai pas de traduction j'ai bien le message de base sur ma page, mais je n'ai pas la possibilité de traduire ce message.

 

 

ps: je continue de chercher pour éviter la perte de ton temps si je trouve avant. Mais si je change les deux tpl (override, et celui de base dans modules, ça fonctionne, mais je ne comprend plus l'interet d'override alors. Je dois mal m'y prendre.).

Edited by dimb (see edit history)
Link to comment
Share on other sites

Non j'ai directement modifié dans modules/blockcontact, fallait t-il l'override?

Après votre message, je vois que le fichier tpl a été par default override, (dans le theme de base)... Je vais donc laisser le premier fichier tpl en paix et le remettre dans son état d'origine et changer l'override pour voir, j'editerais après.

 

merci ninja!

 

 

 

edit: après modification des fichiers (remis le fichier de modules/blockcontact par défaut et modification du fichier dans mon theme), j'ai un autre probleme. J'ai bien vu apparaitre sur ma page d'accueil la traduction en français (parfait!). Mais j'ai voulu m'assurer du bon fonctionnement et de ma bonne compréhension en "mettant à jour la langue" française, (ce bouton me parrait d'ailleurs dangereux:p).

Bref après avoir mis à jour, sur ma page d'accueil j'ai le message que j'ai entré en anglais (donc celui de l'override), mais quand je vais dans traduction des modules installé, re-belotte, j'ai le 24/7j, à traduire, et pas celui override.

 

 

 

Résumé: J'ai override le fichier tpl, si je n'ai pas de traduction j'ai bien le message de base sur ma page, mais je n'ai pas la possibilité de traduire ce message.

 

 

ps: je continue de chercher pour éviter la perte de ton temps si je trouve avant. Mais si je change les deux tpl (override, et celui de base dans modules, ça fonctionne, mais je ne comprend plus l'interet d'override alors. Je dois mal m'y prendre.).

 

Bonjour ;)

 

"Mettre a jour la langue" == écrasée toutes les traductions y compris le theme par défaut et les modules (normalement c'est préciser si je ne me trompe pas ???)

 

Avant de faire une mise a jour il faut absolument faire une export de vos traductions.

 

Cordialement,

Loic.

Link to comment
Share on other sites

Oui ce n'est pas là le soucis, je n'avais rien traduit encore. Le "probleme" est que quand je veux traduire mes phrase de modules installé, on me présente celle du fichier tpl du modules (pas override). (alors que si je n'en met aucune, c'est bien le texte "pur" du fichier override qui est affiché). On dirait que pour afficher les phrases à traduire il ne prend pas en compte l'override que j'ai fait.

 

 

edit: après relecture du topic, mon theme s'apellant "default", il y a peut-être un problème au niveau de l'override, en effet vous avez écris

"La liste des fichiers de traduction a donc changé :

  • /modules/nom_du_module/translations/iso_code.php : pour le thème par défaut
  • /themes/nom_du_theme/modules/nom_du_module/translations/iso_code.php : pour les autres thèmes

 

Peut-être ne dois-je tout simplement pas override le thème "par défaut"?

Edited by dimb (see edit history)
Link to comment
Share on other sites

Oui ce n'est pas là le soucis, je n'avais rien traduit encore. Le "probleme" est que quand je veux traduire mes phrase de modules installé, on me présente celle du fichier tpl du modules (pas override). (alors que si je n'en met aucune, c'est bien le texte "pur" du fichier override qui est affiché). On dirait que pour afficher les phrases à traduire il ne prend pas en compte l'override que j'ai fait.

 

 

edit: après relecture du topic, mon theme s'apellant "default", il y a peut-être un problème au niveau de l'override, en effet vous avez écris

 

 

Peut-être ne dois-je tout simplement pas override le thème "par défaut"?

 

Non normalement vous pouvez !

C'est juste que les traductions des modules overrides sont dans la traduction du theme je crois, non ?

Link to comment
Share on other sites

J'ai tout refait "proprement" (j'ai déinstaller puis supprimer le module contact, virer le fichier d'override, puis réinstaller le module en l'ajoutant via l'interface d'admin apres l'avoir compressé).

Donc j'ai installé le module, ajouter le dossier d'override et le fichier tpl dedans.

A ce niveau là, j'ai bien sur ma page, le texte par défaut du module (vu que pas de traduction). Sauf que quand je vais dans traduction -> module installé, je n'ai que comme proposition de traduire les phrases du fichier tpl "non override".

Je n'ai pas bien saisi le codage de prestashop mais on dirait que pour choisir les phrases à traduire, il ne va pas chercher le fichier tpl override mais bel et bien le tpl du dossier complet.

 

Pour les traduction, je n'ai jamais rien eu d'autre que le tpl dans mon dossier d'override.

 

 

Ai-je raté une étape dans ma procédure?

Link to comment
Share on other sites

  • 2 months later...

Bonsoir,

 

J'ai écrit un module pour le Back Office. Avec override-> admin-> controllers -> AdminImportController

Tout fonctionne sauf les traductions de AdminImportController (les traduction des fichiers tpl View et Form fonctionnent)

Les traductions sont bien enregistrées dans le fichiers fr.php.

 

Fichier AdminImportController

$this->available_fields = array(
'link' => array('label' => $this->l('Link')),
);

 

Fichier fr.php

global $_MODULE;
$_MODULE = array();
$_MODULE['<{importx}prestashop>adminimportcontroller_97e7c9a7d06eac006a28bf05467fcc8b'] = 'Lien';

 

Mais dans la form et dans la view les champs ne sont pas traduit en français ! :(

 

Quelqu'un a-t-il une idée ou un début de solution ?

 

Merci par avance

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

Quelqu'un a-t-il déjà réussi à traduire des champs contenu dans un Controller Admin PHP via un module ? Voir sujet précédent.

 

Les champs restent en Anglais alors qu'ils sont bien traduits dans :

Localisation -> Traductions -> Traduction des modules installés -> Français et sont bien dans le fichier fr.php du module :(

 

Merci de partager votre expérience dans ce domaine.

Link to comment
Share on other sites

Bonjour,

 

Pareil nous n'avons pas réussi à rendre accessible la traduction pour les modules créés avec des override.

Nous avons cependant trouvé une astuce permettant d'avoir une traduction, même si celle-ci n'est pas disponible à la modification par la suite (mais ça permet déjà de traduire le module dans les principales langues).

 

Je mettrais le lien vers le tuto dès que nous l'aurons mis en ligne pour ceux que ça intéresse. Cependant s'il existe un autre moyen, nous sommes preneur :)

  • Like 1
Link to comment
Share on other sites

Bonjour,

 

Enfin quelqu'un qui a le même problème... ça me rassure un peu.

 

Nous avons cependant trouvé une astuce permettant d'avoir une traduction, même si celle-ci n'est pas disponible à la modification par la suite (mais ça permet déjà de traduire le module dans les principales langues).

Je suis preneur pour cette astuce. Est-ce possible d'en savoir un peu plus. ;)

Il me manque la possibilité de traduire ces champs pour pouvoir vendre enfin mon module.

Edited by indesign (see edit history)
Link to comment
Share on other sites

@IllicoPresta bonsoir,

 

Cependant s'il existe un autre moyen, nous sommes preneur

Voila une solution.

 

Copier le contenu du code en début de la classe

• Il faut changer nondumodule par le nom du module

• Il faut changer AdminController par le nom de la classe

 

public static $l_cache;

protected function l($string, $class = 'AdminTab', $addslashes = FALSE, $htmlentities = TRUE)
{
	// need to be called in order to populate $classInModule
	$str = self::findTranslation('nondumodule', $string, 'AdminController');
	$str = $htmlentities ? htmlentities($str, ENT_QUOTES, 'utf-8') : $str;
	return str_replace('"', '"', ($addslashes ? addslashes($str) : stripslashes($str)));
}

/**
 * findTranslation (initially in Module class), to make translations works
 *
 * @param string $name module name
 * @param string $string string to translate
 * @param string $source current class
 * @return string translated string
 */
public static function findTranslation($name, $string, $source)
{
	static $_MODULES;
	if (!is_array($_MODULES))
	{
		// note: $_COOKIE[iso_code] is set in createCustomToken();
		$file = _PS_MODULE_DIR_.'nondumodule/translations/'.Configuration::get('PS_LOCALE_LANGUAGE').'.php';
		if (file_exists($file) && include($file))
			$_MODULES = !empty($_MODULES)?array_merge($_MODULES, $_MODULE):$_MODULE;
	}
	$cache_key = $name.'|'.$string.'|'.$source;

	if (!isset(self::$l_cache[$cache_key]))
	{
		if (!is_array($_MODULES))
			return $string;
		// set array key to lowercase for 1.3 compatibility
		$_MODULES = array_change_key_case($_MODULES);
		if (defined('_THEME_NAME_'))
			$currentKey = '<{'.strtolower($name).'}'.strtolower(_THEME_NAME_).'>'.strtolower($source).'_'.md5($string);
		else
			$currentKey = '<{'.strtolower($name).'}default>'.strtolower($source).'_'.md5($string);
		// note : we should use a variable to define the default theme (instead of "prestashop")
		$defaultKey = '<{'.strtolower($name).'}prestashop>'.strtolower($source).'_'.md5($string);
		$currentKey = $defaultKey;

		if (isset($_MODULES[$currentKey]))
			$ret = stripslashes($_MODULES[$currentKey]);
		elseif (isset($_MODULES[strtolower($currentKey)]))
			$ret = stripslashes($_MODULES[strtolower($currentKey)]);
		elseif (isset($_MODULES[$defaultKey]))
			$ret = stripslashes($_MODULES[$defaultKey]);
		elseif (isset($_MODULES[strtolower($defaultKey)]))
			$ret = stripslashes($_MODULES[strtolower($defaultKey)]);
		else
			$ret = stripslashes($string);

		self::$l_cache[$cache_key] = $ret;
	}
	return self::$l_cache[$cache_key];
}

 

Concernant

Nous avons cependant trouvé une astuce

Peut-on en savoir un peu plus ? Merci

Edited by indesign (see edit history)
Link to comment
Share on other sites

  • 11 months later...

Salut,

 

Pour traduire les controller admin créé dans un module c'est comme pour la partie front sauf qu'il faut rajouter admin, 

 

exemple pour un controller nommé AdminMonModuleController

 

il faut mettre : $this->module->l('Mon texte à traduir', 'adminmonmodule');

 

et là ça fonctionne sans rajouter de code pour la traduction, par contre dans la méthode __construct() il faut faire appel au parent::__construct(); avant d'appeler $this->module car il est pas encore chargé avant ;)

 

Voilà! 

Edited by Prestaspirit (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...