Ninja Of Web Posted October 11, 2012 Share Posted October 11, 2012 (edited) 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 October 12, 2012 by Patric Codron (see edit history) 10 Link to comment Share on other sites More sharing options...
Prestaspirit Posted October 11, 2012 Share Posted October 11, 2012 (edited) Merci Loic pour toutes ces infos. À épingler peut être? Edited October 11, 2012 by Prestaspirit (see edit history) 1 Link to comment Share on other sites More sharing options...
Ninja Of Web Posted October 12, 2012 Author Share Posted October 12, 2012 C'est une documentation qui était actuellement en interne. Je vous la met à disposition en attendant que Xavier la mettent sur la documentation Officiel. Cordialement, Loïc. 1 Link to comment Share on other sites More sharing options...
olea Posted October 12, 2012 Share Posted October 12, 2012 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 More sharing options...
Ninja Of Web Posted October 12, 2012 Author Share Posted October 12, 2012 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 More sharing options...
Atch Posted October 12, 2012 Share Posted October 12, 2012 Merci Loic, Ce genre de Partage est super constructif !!! V++ Atch 1 Link to comment Share on other sites More sharing options...
olea Posted October 12, 2012 Share Posted October 12, 2012 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 More sharing options...
Broceliande Posted October 12, 2012 Share Posted October 12, 2012 Voilà une sacré doc comme on les aime, merci !!! 1 Link to comment Share on other sites More sharing options...
Ninja Of Web Posted October 12, 2012 Author Share Posted October 12, 2012 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 More sharing options...
olea Posted October 12, 2012 Share Posted October 12, 2012 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 1 Link to comment Share on other sites More sharing options...
Ninja Of Web Posted October 12, 2012 Author Share Posted October 12, 2012 Je le rajoute de suite sur la doc Interne et sur cette doc Merci pour ton retour Link to comment Share on other sites More sharing options...
olea Posted October 12, 2012 Share Posted October 12, 2012 (edited) 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 October 12, 2012 by olea (see edit history) Link to comment Share on other sites More sharing options...
Prestaspirit Posted October 12, 2012 Share Posted October 12, 2012 Salut Olea, Sur la 1.4 il fallait instancier la class du module pour pouvoir utiliser la methode l(), maintenant sur la 1.5 il faut utiliser $this->module->l('chaine'); Link to comment Share on other sites More sharing options...
olea Posted October 12, 2012 Share Posted October 12, 2012 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 More sharing options...
Prestaspirit Posted October 12, 2012 Share Posted October 12, 2012 En testant, le $this->module n'existe pas pour ce genre d'ObjectModel inclus depuis un module Oui tout à fait, c'est surement parce que les models ne sont pas fait pour afficher des chaines de caractères. Link to comment Share on other sites More sharing options...
Ninja Of Web Posted October 15, 2012 Author Share Posted October 15, 2012 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 More sharing options...
ébewè Posted October 22, 2012 Share Posted October 22, 2012 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 More sharing options...
Ninja Of Web Posted October 25, 2012 Author Share Posted October 25, 2012 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. Link to comment Share on other sites More sharing options...
Prestaspirit Posted October 25, 2012 Share Posted October 25, 2012 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. 1 Link to comment Share on other sites More sharing options...
Ninja Of Web Posted October 25, 2012 Author Share Posted October 25, 2012 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. Je n'ai pas fait le test, mais si cela fonctionne, c'est bien mieux Cordialement, Loïc. Link to comment Share on other sites More sharing options...
olea Posted October 25, 2012 Share Posted October 25, 2012 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 More sharing options...
Prestaspirit Posted October 25, 2012 Share Posted October 25, 2012 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 More sharing options...
ébewè Posted October 25, 2012 Share Posted October 25, 2012 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 ! 1 Link to comment Share on other sites More sharing options...
Ninja Of Web Posted October 26, 2012 Author Share Posted October 26, 2012 Merci pour vos contributions ! Link to comment Share on other sites More sharing options...
Ninja Of Web Posted November 10, 2012 Author Share Posted November 10, 2012 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 More sharing options...
andy durbecq Posted November 20, 2012 Share Posted November 20, 2012 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 More sharing options...
Ninja Of Web Posted November 20, 2012 Author Share Posted November 20, 2012 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 More sharing options...
kittypaw Posted November 23, 2012 Share Posted November 23, 2012 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 More sharing options...
Ninja Of Web Posted November 23, 2012 Author Share Posted November 23, 2012 Bonjour, Comme tu me le site, le code est bon ici. Peut tu noix faire un copier coller du code exacte et du chemin exacte ? Merci Link to comment Share on other sites More sharing options...
kittypaw Posted November 23, 2012 Share Posted November 23, 2012 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 More sharing options...
Ninja Of Web Posted November 23, 2012 Author Share Posted November 23, 2012 La seul piste que j'avais c'était le fait que tu utilise les doubles quote dans ton tpl mais aparament non. Le seul moyen de débuger AdminTranslationsControllers.php Loic. Link to comment Share on other sites More sharing options...
kittypaw Posted November 23, 2012 Share Posted November 23, 2012 Merci pour la piste, je pars la dessus et si j'ai une info intéressante je partage Link to comment Share on other sites More sharing options...
olea Posted December 5, 2012 Share Posted December 5, 2012 @Ninja Of Web Pour info, j'ai ouvert le report suivant : http://forge.prestashop.com/browse/PSCFV-6006 Lorsque je gère un AdminController depuis un module, il n'est pas traduit bien que dans l'onglet traduction tout soit bien à jour concernant ce fichier Link to comment Share on other sites More sharing options...
Ninja Of Web Posted December 5, 2012 Author Share Posted December 5, 2012 @Ninja Of Web Pour info, j'ai ouvert le report suivant : http://forge.prestashop.com/browse/PSCFV-6006 Lorsque je gère un AdminController depuis un module, il n'est pas traduit bien que dans l'onglet traduction tout soit bien à jour concernant ce fichier Salut Olea ! Je regarde dès que possible. Loic. Link to comment Share on other sites More sharing options...
Prestaspirit Posted December 5, 2012 Share Posted December 5, 2012 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 More sharing options...
olea Posted December 5, 2012 Share Posted December 5, 2012 @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 More sharing options...
kittypaw Posted December 5, 2012 Share Posted December 5, 2012 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 More sharing options...
Ninja Of Web Posted December 10, 2012 Author Share Posted December 10, 2012 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 More sharing options...
kittypaw Posted December 11, 2012 Share Posted December 11, 2012 Ah parfait ! Merci pour cette précision très importante Link to comment Share on other sites More sharing options...
LittleAngel Posted December 11, 2012 Share Posted December 11, 2012 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 More sharing options...
Ninja Of Web Posted December 12, 2012 Author Share Posted December 12, 2012 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 More sharing options...
olea Posted December 12, 2012 Share Posted December 12, 2012 Pour info, j'ai ouvert le report suivant : http://forge.prestas...owse/PSCFV-6006 Lorsque je gère un AdminController depuis un module, il n'est pas traduit bien que dans l'onglet traduction tout soit bien à jour concernant ce fichier Pour l'anecdote, ce report est passé de 'Bug' à 'Evolution' Link to comment Share on other sites More sharing options...
Vinum Posted December 12, 2012 Share Posted December 12, 2012 (edited) 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 December 12, 2012 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
Aquaticam Posted December 24, 2012 Share Posted December 24, 2012 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 More sharing options...
Vinum Posted January 14, 2013 Share Posted January 14, 2013 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 More sharing options...
dimb Posted January 30, 2013 Share Posted January 30, 2013 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 More sharing options...
Ninja Of Web Posted January 30, 2013 Author Share Posted January 30, 2013 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 More sharing options...
dimb Posted January 31, 2013 Share Posted January 31, 2013 (edited) 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 January 31, 2013 by dimb (see edit history) Link to comment Share on other sites More sharing options...
Ninja Of Web Posted January 31, 2013 Author Share Posted January 31, 2013 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 More sharing options...
dimb Posted January 31, 2013 Share Posted January 31, 2013 (edited) 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 January 31, 2013 by dimb (see edit history) Link to comment Share on other sites More sharing options...
Ninja Of Web Posted January 31, 2013 Author Share Posted January 31, 2013 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 More sharing options...
dimb Posted January 31, 2013 Share Posted January 31, 2013 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 More sharing options...
momo123 Posted February 1, 2013 Share Posted February 1, 2013 mobile accessories www.eozy.com/mobile-accessories Link to comment Share on other sites More sharing options...
indesign47 Posted April 13, 2013 Share Posted April 13, 2013 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 More sharing options...
indesign47 Posted May 29, 2013 Share Posted May 29, 2013 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 More sharing options...
IllicoPresta Posted May 29, 2013 Share Posted May 29, 2013 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 1 Link to comment Share on other sites More sharing options...
indesign47 Posted May 29, 2013 Share Posted May 29, 2013 (edited) 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 May 29, 2013 by indesign (see edit history) Link to comment Share on other sites More sharing options...
indesign47 Posted May 30, 2013 Share Posted May 30, 2013 (edited) @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 May 30, 2013 by indesign (see edit history) Link to comment Share on other sites More sharing options...
Prestaspirit Posted May 23, 2014 Share Posted May 23, 2014 (edited) 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 May 23, 2014 by Prestaspirit (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now