[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":22,"$fmDkvWE10tKxQ7w0KwBj1jtbgIe0A9_KOXnLG1ncVWxw":103,"megamenu":142,"footer-db":198,"$f07l11qSVRDyfa31V311ew93QHuemwobepD4GnS7F01o":216,"header-db":230},{"theme":4},{"colors":5,"typography":13,"ui":17,"defaultColorMode":21},{"primary":6,"secondary":7,"background":8,"foreground":9,"muted":10,"headerBg":11,"footerBg":12,"topBarBg":9,"topBarText":11},"#4F46E5","#0D9488","#F9FAFB","#111827","#6B7280","#ffffff","#020617",{"fontFamily":14,"fontUrl":15,"baseFontSize":16},"Inter, system-ui, sans-serif","https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;0,800;0,900;1,400;1,700&display=swap","16px",{"borderRadius":18,"contentWidth":19,"shadow":20},"lg","7xl",true,"light",{"columns":23},[24,40,70,91],{"title":25,"links":26},"Plateforme",[27,31,34,37],{"label":28,"href":29,"external":30},"Offre Starter (2 500 €)","\u002Foffre-starter",false,{"label":32,"href":33,"external":30},"Devenir Ambassadeur","\u002Fambassadeur",{"label":35,"href":36,"external":30},"Modules PrestaShop","\u002Fmodules",{"label":38,"href":39,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":41,"links":42},"Le Synedre",[43,46,49,52,55,58,61,64,67],{"label":44,"href":45,"external":30},"L'histoire","\u002Fsynedre",{"label":47,"href":48,"external":30},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":50,"href":51,"external":30},"L'équipe","\u002Fequipe",{"label":53,"href":54,"external":30},"Le réacteur en direct","\u002Freacteur",{"label":56,"href":57,"external":30},"Le Drill (entraînement)","\u002Fdrill",{"label":59,"href":60,"external":30},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":62,"href":63,"external":30},"Les agents IA","\u002Fagents-ia",{"label":65,"href":66,"external":30},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":68,"href":69,"external":30},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":71,"links":72},"Ressources",[73,76,79,82,85,88],{"label":74,"href":75,"external":30},"Blog","\u002Fblog",{"label":77,"href":78,"external":30},"Academy","\u002Facademy",{"label":80,"href":81,"external":30},"Dictionnaire","\u002Fdictionnaire",{"label":83,"href":84,"external":30},"Expertise PrestaShop","\u002Fexpertise",{"label":86,"href":87,"external":30},"Flywheel","\u002Fflywheel",{"label":89,"href":90,"external":30},"Manifeste","\u002Fmanifeste",{"title":92,"links":93},"À propos",[94,97,100],{"label":95,"href":96,"external":30},"Alexandre Carette","\u002Fa-propos",{"label":98,"href":99,"external":30},"Dossier de presse","\u002Fpresse",{"label":101,"href":102,"external":30},"Contact","\u002Fcontact",{"title":104,"slug":105,"metaDescription":106,"category":107,"tags":108,"difficulty":115,"psVersions":116,"content":120,"faq":121,"tldr":137,"readingTime":138,"generatedAt":139,"publishDate":139,"relatedArticles":140,"sourceCategory":141},"Traduire un module PrestaShop attaché à un hook personnalisé","traduire-module-prestashop-hook-personnalise","Guide complet pour gérer les traductions d'un module PrestaShop greffé sur un hook personnalisé : syntaxe Smarty, back-office et erreurs courantes.","developpement",[109,110,111,112,113,114],"traduction","hook","module","smarty","localisation","multilangue","intermediaire",[117,118,119],"1.6","1.7","8.x","\u003Ch2>Introduction\u003C\u002Fh2>\n\u003Cp>Lorsqu'on développe un module PrestaShop greffé sur un hook personnalisé, la gestion des traductions peut rapidement devenir un casse-tête. Entre la syntaxe Smarty spécifique, les fichiers de traduction générés automatiquement et les subtilités du back-office, plusieurs pièges guettent le développeur. Ce guide détaille la méthode complète pour rendre un module multilingue, quelle que soit la version de PrestaShop utilisée.\u003C\u002Fp>\n\u003Ch2>Syntaxe Smarty pour les chaînes traductibles\u003C\u002Fh2>\n\u003Ch3>La balise `{l}` : règle fondamentale\u003C\u002Fh3>\n\u003Cp>Dans les fichiers \u003Ccode>.tpl\u003C\u002Fcode> de votre module, chaque chaîne de texte destinée à être traduite doit utiliser la balise Smarty \u003Ccode>{l}\u003C\u002Fcode> avec deux paramètres obligatoires :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{l s='Ma chaîne à traduire' mod='nom_du_module'}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>**`s`** : la chaîne source (généralement en français ou en anglais)\u003C\u002Fli>\n\u003Cli>**`mod`** : le nom technique du module, identique au nom du dossier dans `\u002Fmodules\u002F`\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Le paramètre \u003Ccode>mod\u003C\u002Fcode> est essentiel : il indique à PrestaShop dans quel fichier de traduction chercher la correspondance. Sans lui, la traduction ne sera jamais trouvée.\u003C\u002Fp>\n\u003Ch3>Exemple concret dans un template\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n&lt;div class=\"module-custom-block\"&gt;\n  &lt;h3&gt;{l s='Nos engagements' mod='mymodule'}&lt;\u002Fh3&gt;\n  &lt;p&gt;{l s='Livraison offerte dès 50 euros d achat' mod='mymodule'}&lt;\u002Fp&gt;\n  &lt;a href=\"{$link-&gt;getPageLink('contact')}\"&gt;\n    {l s='Contactez-nous' mod='mymodule'}\n  &lt;\u002Fa&gt;\n&lt;\u002Fdiv&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Erreur classique : la double accolade\u003C\u002Fh3>\n\u003Cp>Une erreur fréquente consiste à imbriquer les accolades Smarty de manière incorrecte :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{* ❌ INCORRECT — provoque une erreur de parsing Smarty *}\n&lt;p&gt;{{l s='ma_chaine' mod='mymodule'}}&lt;\u002Fp&gt;\n\n{* ✅ CORRECT — une seule paire d'accolades *}\n&lt;p&gt;{l s='ma_chaine' mod='mymodule'}&lt;\u002Fp&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>La double accolade \u003Ccode>{{\u003C\u002Fcode> n'est pas une syntaxe Smarty valide et provoquera soit une erreur d'affichage, soit un rendu brut de la balise sans traduction.\u003C\u002Fp>\n\u003Ch2>Gérer les apostrophes dans les chaînes\u003C\u002Fh2>\n\u003Cp>Un piège redoutable qui provoque souvent une \u003Cstrong>page blanche\u003C\u002Fstrong> (WSOD — White Screen of Death) : l'utilisation d'apostrophes non échappées dans les chaînes de traduction.\u003C\u002Fp>\n\u003Ch3>Le problème\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{* ❌ PROVOQUE UNE PAGE BLANCHE *}\n{l s='L'offre du moment' mod='mymodule'}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>L'apostrophe dans \u003Ccode>L'offre\u003C\u002Fcode> ferme prématurément la chaîne Smarty, ce qui génère une erreur fatale PHP.\u003C\u002Fp>\n\u003Ch3>Les solutions\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Solution 1 — Échappement avec antislash :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{l s='L\\'offre du moment' mod='mymodule'}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Solution 2 — Reformuler la chaîne (recommandé) :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{l s='Offre du moment' mod='mymodule'}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cette seconde approche est préférable car elle évite les problèmes d'échappement en cascade, notamment lorsque la chaîne contient plusieurs apostrophes.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Solution 3 — Utiliser les guillemets doubles pour délimiter (PrestaShop 1.7+) :\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{l s=\"L'offre du moment\" mod='mymodule'}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Diagnostic d'une page blanche liée aux traductions\u003C\u002Fh3>\n\u003Cp>Si vous obtenez une page blanche après avoir ajouté des chaînes traductibles :\u003C\u002Fp>\n\u003Col>\n\u003Cli>Activez le mode debug dans `\u002Fconfig\u002Fdefines.inc.php` :\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-php\">\ndefine('_PS_MODE_DEV_', true);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Col>\n\u003Cli>Consultez les logs PHP (`\u002Fvar\u002Flog\u002F` ou via le panneau d'hébergement)\u003C\u002Fli>\n\u003Cli>Recherchez une erreur de type `Smarty Compiler` pointant vers votre fichier `.tpl`\u003C\u002Fli>\n\u003Cli>Vérifiez chaque apostrophe dans vos chaînes `{l s='...'}`\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Traduire depuis le back-office\u003C\u002Fh2>\n\u003Ch3>Méthode PrestaShop 1.6 \u002F 1.7\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Rendez-vous dans **Localisation → Traductions**\u003C\u002Fli>\n\u003Cli>Dans la section **Modifier les traductions**, sélectionnez :\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>   - Type : \u003Cstrong>Traductions des modules installés\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>   - Module : votre module\u003C\u002Fp>\n\u003Cp>   - Langue : la langue cible\u003C\u002Fp>\n\u003Col>\n\u003Cli>Cliquez sur **Modifier**\u003C\u002Fli>\n\u003Cli>PrestaShop affiche toutes les chaînes détectées dans les fichiers `.tpl` du module\u003C\u002Fli>\n\u003Cli>Saisissez les traductions et enregistrez\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Méthode PrestaShop 8.x\u003C\u002Fh3>\n\u003Cp>Le processus reste identique dans PrestaShop 8, accessible via :\u003C\u002Fp>\n\u003Cp>\u003Cstrong>International → Traductions → Modifier les traductions\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>La différence majeure en version 8.x est le support natif du nouveau système de traduction basé sur le composant Symfony Translation. Pour les modules utilisant Smarty (hooks front-office classiques), la méthode traditionnelle avec \u003Ccode>{l}\u003C\u002Fcode> reste fonctionnelle.\u003C\u002Fp>\n\u003Cp>Pour les modules modernes utilisant Twig (back-office PS 1.7+\u002F8.x), la syntaxe diffère :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-twig\">\n{# Syntaxe Twig pour les modules back-office #}\n{{ 'Ma chaîne à traduire'|trans({}, 'Modules.Mymodule.Admin') }}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Fichiers de traduction : où sont-ils stockés ?\u003C\u002Fh2>\n\u003Ch3>Structure classique (Smarty)\u003C\u002Fh3>\n\u003Cp>Les traductions sont stockées dans le dossier du module :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\n\u002Fmodules\u002Fmymodule\u002F\n├── translations\u002F\n│   ├── fr.php\n│   ├── en.php\n│   ├── de.php\n│   └── es.php\n├── views\u002F\n│   └── templates\u002F\n│       └── hook\u002F\n│           └── perso.tpl\n└── mymodule.php\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Le fichier \u003Ccode>fr.php\u003C\u002Fcode> contient des entrées de ce type :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n&lt;?php\n\nglobal $_MODULE;\n$_MODULE = array();\n$_MODULE['&lt;{mymodule}prestashop&gt;perso_abc123'] = 'Ma chaîne traduite en français';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>La clé est générée automatiquement par PrestaShop à partir du nom du module, du fichier template et d'un hash MD5 de la chaîne source.\u003C\u002Fp>\n\u003Ch3>Structure moderne (Symfony Translation, PS 8.x)\u003C\u002Fh3>\n\u003Cp>Pour les modules exploitant le nouveau système :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\n\u002Fmodules\u002Fmymodule\u002F\n├── translations\u002F\n│   ├── fr-FR\u002F\n│   │   └── ModulesMymoduleShop.fr-FR.xlf\n│   └── en-GB\u002F\n│       └── ModulesMymoduleShop.en-GB.xlf\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Hooks personnalisés et traductions\u003C\u002Fh2>\n\u003Cp>Lorsque votre module est attaché à un \u003Cstrong>hook personnalisé\u003C\u002Fstrong> (créé via \u003Ccode>registerHook\u003C\u002Fcode> avec un nom custom), le mécanisme de traduction reste identique. Le point clé est que PrestaShop scanne les fichiers \u003Ccode>.tpl\u003C\u002Fcode> du module indépendamment du hook sur lequel il est greffé.\u003C\u002Fp>\n\u003Ch3>Enregistrer un hook personnalisé\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-php\">\npublic function install()\n{\n    return parent::install()\n        && $this-&gt;registerHook('displayCustomBlock')\n        && $this-&gt;registerHook('header');\n}\n\npublic function hookDisplayCustomBlock($params)\n{\n    return $this-&gt;display(__FILE__, 'views\u002Ftemplates\u002Fhook\u002Fcustom_block.tpl');\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Template avec traductions\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{* views\u002Ftemplates\u002Fhook\u002Fcustom_block.tpl *}\n&lt;section class=\"custom-block\"&gt;\n  &lt;h2&gt;{l s='Titre de mon bloc personnalise' mod='mymodule'}&lt;\u002Fh2&gt;\n  &lt;p&gt;{l s='Description du bloc avec du contenu multilingue' mod='mymodule'}&lt;\u002Fp&gt;\n&lt;\u002Fsection&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Les chaînes apparaîtront dans la section de traduction du back-office au même titre que celles des hooks standard.\u003C\u002Fp>\n\u003Ch2>Bonnes pratiques\u003C\u002Fh2>\n\u003Ch3>1. Nommer les clés de manière descriptive\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{* ❌ Peu clair *}\n{l s='txt1' mod='mymodule'}\n\n{* ✅ Descriptif *}\n{l s='Free shipping on orders over 50 euros' mod='mymodule'}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Utilisez des phrases complètes en anglais ou en français comme clés : elles servent de documentation et de fallback si la traduction est absente.\u003C\u002Fp>\n\u003Ch3>2. Utiliser les variables Smarty dans les traductions\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{l s='Livraison gratuite des %s euros' sprintf=[$threshold] mod='mymodule'}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Évitez la concaténation de chaînes traduites — elle casse l'ordre des mots dans certaines langues.\u003C\u002Fp>\n\u003Ch3>3. Vider le cache après modification\u003C\u002Fh3>\n\u003Cp>Après avoir modifié les traductions dans le back-office, videz le cache PrestaShop :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**Back-office** : Paramètres avancés → Performances → Vider le cache\u003C\u002Fli>\n\u003Cli>**Manuellement** : supprimer le contenu de `\u002Fvar\u002Fcache\u002Fprod\u002F` et `\u002Fvar\u002Fcache\u002Fdev\u002F`\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>4. Exporter les traductions\u003C\u002Fh3>\n\u003Cp>Pensez à exporter vos traductions pour les sauvegarder. En PrestaShop 8.x :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">\nphp bin\u002Fconsole translation:export mymodule fr-FR\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Résolution des problèmes courants\u003C\u002Fh2>\n\u003Ctr>\u003Cth>Symptôme\u003C\u002Fth>\u003Cth>Cause probable\u003C\u002Fth>\u003Cth>Solution\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Page blanche\u003C\u002Fth>\u003Cth>Apostrophe non échappée dans `{l s='...'}`\u003C\u002Fth>\u003Cth>Échapper avec `\\'` ou reformuler\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Chaîne non traduite\u003C\u002Fth>\u003Cth>Paramètre `mod` manquant ou incorrect\u003C\u002Fth>\u003Cth>Vérifier que `mod='nom_exact_du_module'`\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Traduction absente du back-office\u003C\u002Fth>\u003Cth>Fichier `.tpl` non scanné\u003C\u002Fth>\u003Cth>Vider le cache, sauvegarder le module\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Double accolades affichées\u003C\u002Fth>\u003Cth>Syntaxe `{{l ...}}`\u003C\u002Fth>\u003Cth>Utiliser une seule paire `{l ...}`\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Traduction non prise en compte\u003C\u002Fth>\u003Cth>Cache Smarty\u003C\u002Fth>\u003Cth>Supprimer `\u002Fvar\u002Fcache\u002F` ou désactiver le cache en dev\u003C\u002Fth>\u003C\u002Ftr>",[122,125,128,131,134],{"q":123,"a":124},"Pourquoi ma traduction de module PrestaShop ne fonctionne pas sur un hook personnalisé ?","Le hook utilisé n'a aucun impact sur le mécanisme de traduction. Si votre traduction ne fonctionne pas, vérifiez trois points : le paramètre `mod` dans la balise `{l}` doit correspondre exactement au nom technique du module (nom du dossier dans \u002Fmodules\u002F), les apostrophes dans les chaînes doivent être échappées avec un antislash, et le cache PrestaShop doit être vidé après chaque modification des fichiers de traduction.",{"q":126,"a":127},"Comment éviter la page blanche causée par les traductions Smarty dans PrestaShop ?","La page blanche (WSOD) est presque toujours causée par une apostrophe non échappée dans une chaîne traductible. Par exemple, `{l s='L'offre' mod='mon_module'}` provoque une erreur fatale. Échappez l'apostrophe (`L\\'offre`), reformulez la chaîne sans apostrophe, ou utilisez des guillemets doubles pour délimiter la chaîne. Activez le mode debug (`_PS_MODE_DEV_` à `true`) pour identifier précisément la ligne fautive.",{"q":129,"a":130},"Où se trouvent les fichiers de traduction d'un module PrestaShop ?","En PrestaShop 1.6 et 1.7, les traductions sont stockées dans `\u002Fmodules\u002Fvotre_module\u002Ftranslations\u002F` sous forme de fichiers PHP (fr.php, en.php, etc.) contenant un tableau `$_MODULE`. En PrestaShop 8.x, le nouveau système utilise des fichiers XLIFF dans `\u002Fmodules\u002Fvotre_module\u002Ftranslations\u002Ffr-FR\u002F`. Les deux systèmes coexistent : Smarty utilise l'ancien format, Twig utilise le nouveau.",{"q":132,"a":133},"Quelle est la différence entre la traduction Smarty et Twig dans un module PrestaShop 8 ?","Smarty utilise la syntaxe `{l s='Texte' mod='module'}` et stocke les traductions dans des fichiers PHP. Twig utilise le filtre `{{ 'Texte'|trans({}, 'Modules.Module.Domain') }}` et repose sur les fichiers XLIFF de Symfony. En PrestaShop 8.x, les templates front-office utilisent encore majoritairement Smarty, tandis que le back-office privilégie Twig. Les deux systèmes fonctionnent en parallèle.",{"q":135,"a":136},"Comment traduire les chaînes PHP d'un module PrestaShop (hors templates) ?","Dans les fichiers PHP du module, utilisez la méthode `$this->l('Ma chaîne')` héritée de la classe Module. En PrestaShop 8.x, pour les modules Symfony, préférez le service `TranslatorInterface` avec `$this->trans('Ma chaîne', [], 'Modules.Monmodule.Admin')`. Les chaînes PHP apparaissent dans la même section de traduction du back-office que celles des templates.","Pour traduire un module PrestaShop sur un hook personnalisé, utilisez la syntaxe `{l s='texte' mod='nom_module'}` dans vos templates Smarty, en veillant à échapper les apostrophes pour éviter les pages blanches, puis gérez les traductions via le back-office dans Localisation → Traductions des modules installés.",6,"2026-03-21T15:26:01.000Z",[],"PrestaShop pour les développeurs",{"items":143},[144,153,159,165,173,181,187,192],{"id":145,"type":146,"label":147,"href":84,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":30,"position":150,"children":151,"psChildren":152},41,"link",{"fr":148},"Expertise",null,0,[],[],{"id":154,"type":146,"label":155,"href":75,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":30,"position":156,"children":157,"psChildren":158},42,{"fr":74},1,[],[],{"id":160,"type":146,"label":161,"href":36,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":30,"position":162,"children":163,"psChildren":164},43,{"fr":35},2,[],[],{"id":166,"type":146,"label":167,"href":169,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":30,"position":170,"children":171,"psChildren":172},44,{"fr":168},"Outils IA","\u002Foutils-ia",3,[],[],{"id":174,"type":146,"label":175,"href":29,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":177,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":30,"position":178,"children":179,"psChildren":180},45,{"fr":176},"Offre Starter ✨",{"highlight":20},4,[],[],{"id":182,"type":146,"label":183,"href":78,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":30,"position":184,"children":185,"psChildren":186},46,{"fr":77},5,[],[],{"id":188,"type":146,"label":189,"href":96,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":30,"position":138,"children":190,"psChildren":191},47,{"fr":92},[],[],{"id":193,"type":146,"label":194,"href":102,"icon":149,"description":149,"badge":149,"groupTitle":149,"style":149,"gridColumns":149,"cssClass":149,"psCategoryId":149,"showPsChildren":30,"position":195,"children":196,"psChildren":197},48,{"fr":101},7,[],[],{"footer":199},{"theme":200,"description":149,"hours":149,"logo":201,"contact":204,"social":205,"bottomBar":215},"dark",{"src":202,"href":203,"alt":95},"\u002Flogo-ac.svg","\u002F",{"email":149,"phone":149,"address":149,"cta":149},[206,209,212],{"platform":207,"href":208,"label":207},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":210,"href":211,"label":210},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":213,"href":214,"label":213},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":149},{"academy":217,"blog":218,"expertise":229},[],[219,223,226],{"title":220,"url":221,"score":156,"type":222},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back","blog",{"title":224,"url":225,"score":156,"type":222},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",{"title":227,"url":228,"score":156,"type":222},"Sylius rachète PrestaShop : ce que ça change pour vous","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fsylius-rachat-prestashop-headless-souverainete",[],{"header":231},{"logo":232,"topBar":235,"contactEmail":238,"features":239,"navBar":149},{"src":202,"alt":233,"text":95,"href":203,"class":234},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":149,"showLanguages":30,"align":236,"languages":237},"left",[],"contact@alexandrecarette.fr",{"showSearch":30,"showWishlist":30,"showLogin":20,"showContact":30,"showCart":30,"stickyHeader":20,"headerLayout":240},"inline"]