{"id":2571,"date":"2019-01-24T11:23:59","date_gmt":"2019-01-24T11:23:59","guid":{"rendered":"https:\/\/reskator.fr\/?p=2571"},"modified":"2021-01-14T11:00:26","modified_gmt":"2021-01-14T11:00:26","slug":"developpement-wordpress-le-textdomain-ne-pourrait-il-pas-devenir-optionnel","status":"publish","type":"post","link":"https:\/\/dev9.reskator.fr\/cms\/2019\/developpement-wordpress-le-textdomain-ne-pourrait-il-pas-devenir-optionnel\/","title":{"rendered":"D\u00e9veloppement WordPress : le textdomain ne pourrait-il pas devenir optionnel\u00a0?"},"content":{"rendered":"\n<p class=\"has-drop-cap has-background\" style=\"background-color:#f5f6f7\" data-block-type=\"core\">WordPress met \u00e0 la disposition des d\u00e9veloppeurs toutes les fonctionnalit\u00e9s n\u00e9cessaires \u00e0 l\u2019internationalisation (la traduction) des th\u00e8mes et des extensions.<br>Au fil du temps, les r\u00e8gles d'\u00e9criture (les \u201cbonnes pratiques\u201d) se solidifient [rigidifient ?]. <br> Si le th\u00e8me ou le plugin ne suit pas ces \u201crecommandations\u201d, il y a de fortes chances qu\u2019il ne franchisse pas les contr\u00f4les lui permettant d\u2019int\u00e9grer le D\u00e9p\u00f4t Officiel de WordPress : le d\u00e9veloppeur devra revoir son code en cons\u00e9quence.<br> En soi, ces recommandations sont parfaitement justifi\u00e9es. C\u2019est un gage de compatibilit\u00e9, de \u201cmaintenabilit\u00e9\u201d, de lisibilit\u00e9, etc. L\u00e0 n'est pas le probl\u00e8me. <br> C\u2019est juste que si l\u2019on se conforme \u00e0 ces recommandations, il me semble que le textdomain devient inutile et qu'on pourrait s'en passer\u2026<\/p>\n\n\n\n<p data-block-type=\"core\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mce_7\" data-block-type=\"core\">Les recommandations WordPress<\/h2>\n\n\n\n<p data-block-type=\"core\">Les recommandations de d\u00e9veloppement WordPress concernant l\u2019internationalisation des extensions, sp\u00e9cifient que toutes les fonctions concern\u00e9es doivent indiquer, en clair, le <em>textdomain<\/em> :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$texte = __( 'The text to translate', 'mon-super-plugin' );\necho $texte;\n_e( 'Another text to translate', 'mon-super-plugin' );<\/pre>\n\n\n\n<p data-block-type=\"core\">Mais auparavant, on doit d\u00e9clarer ce&nbsp;<em>textdomain<\/em>&nbsp;via la fonction d\u00e9di\u00e9e :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">load_plugin_textdomain( 'mon-super-plugin', false, plugin_basename( __DIR__ ) .'\/languages' );\n<\/pre>\n\n\n\n<p data-block-type=\"core\">Puisqu\u2019on d\u00e9clare ce&nbsp;<em>textdomain<\/em>, pourquoi ensuite est-il n\u00e9cessaire de le sp\u00e9cifier pour chaque chaine \u00e0 traduire&nbsp;?<\/p>\n\n\n\n<p data-block-type=\"core\">D\u2019ailleurs, si on va plus loin, ce&nbsp;<em>textdomain<\/em>&nbsp;doit correspondre au nom slug de l\u2019extension.<br>Si le fichier principal de l\u2019extension est \u201cmon-super-plugin.php&nbsp;\u00bb, le&nbsp;<em>textdomain<\/em>&nbsp;doit \u00eatre \u201cmon-super-plugin\u201d.<br><\/p>\n\n\n\n<p data-block-type=\"core\">On en arrive alors \u00e0 se demander la n\u00e9cessit\u00e9 de la fonction load_plugin_textdomain().<\/p>\n\n\n\n<p data-block-type=\"core\">Tout cela pourrait \u00eatre pris en charge par le core de WordPress&nbsp;:<br>Si on ne l\u2019indique pas, WP devrait le d\u00e9duire \u00e0 partir du nom de l\u2019extension.<\/p>\n\n\n\n<p data-block-type=\"core\">On conserve bien s\u00fbr l\u2019aspect optionnel afin de pouvoir sp\u00e9cifier un&nbsp;<em>textdomain<\/em>&nbsp;diff\u00e9rent. Par exemple, dans le cas o\u00f9 l\u2019extension reprend une chaine du c\u0153ur de WordPress ou, par exemple, de WooCommerce :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">_e( 'This controls the title which you see during checkout.', 'woocommerce' )<\/pre>\n\n\n\n<hr class=\"wp-block-separator is-style-dots\"\/ data-block-type=\"core\">\n","protected":false},"excerpt":{"rendered":"<p>WordPress met \u00e0 la disposition des d\u00e9veloppeurs toutes les fonctionnalit\u00e9s n\u00e9cessaires \u00e0 \u201cl\u2019internationalisation\u201d (la traduction) des th\u00e8mes et des plugins.<br \/>\nAu fil du temps, les r\u00e8gles d'\u00e9criture (les \u201cbonnes pratiques\u201d) se solidifient [rigidifient ?].<br \/>\nSi le th\u00e8me ou le plugin ne suit pas ces \u201crecommandations\u201d, il y a de fortes chances qu\u2019il ne franchisse pas les contr\u00f4les lui permettant d\u2019int\u00e9grer le D\u00e9p\u00f4t Officiel de WordPress : le d\u00e9veloppeur devra revoir son code en cons\u00e9quence.<br \/>\nEn soi, ces recommandations sont parfaitement justifi\u00e9es. C\u2019est un gage de compatibilit\u00e9, de \u201cmaintenabilit\u00e9\u201d, de lisibilit\u00e9, etc. L\u00e0 n'est pas le probl\u00e8me.<br \/>\nC\u2019est juste que si l\u2019on se conforme \u00e0 ces recommandations, il me semble que le textdomain devient inutile et qu'on pourrait s'en passer\u2026<\/p>\n","protected":false},"author":3,"featured_media":45448,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[13,14,15],"class_list":["post-2571","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","tag-textdomain","tag-traduction","tag-translate"],"featured_image_urls_v2":{"full":["https:\/\/dev9.reskator.fr\/cms\/wp-content\/uploads\/2019\/01\/wp_texdomain.jpg",900,675,false],"thumbnail":["https:\/\/dev9.reskator.fr\/cms\/wp-content\/uploads\/2019\/01\/wp_texdomain-150x150.jpg",150,150,true],"medium":["https:\/\/dev9.reskator.fr\/cms\/wp-content\/uploads\/2019\/01\/wp_texdomain-300x225.jpg",300,225,true],"medium_large":["https:\/\/dev9.reskator.fr\/cms\/wp-content\/uploads\/2019\/01\/wp_texdomain-768x576.jpg",768,576,true],"large":["https:\/\/dev9.reskator.fr\/cms\/wp-content\/uploads\/2019\/01\/wp_texdomain.jpg",900,675,false],"1536x1536":["https:\/\/dev9.reskator.fr\/cms\/wp-content\/uploads\/2019\/01\/wp_texdomain.jpg",900,675,false],"2048x2048":["https:\/\/dev9.reskator.fr\/cms\/wp-content\/uploads\/2019\/01\/wp_texdomain.jpg",900,675,false],"acf-gallery":["https:\/\/dev9.reskator.fr\/cms\/wp-content\/uploads\/2019\/01\/wp_texdomain-300x300.jpg",300,300,true]},"post_excerpt_stackable_v2":"<p>WordPress met \u00e0 la disposition des d\u00e9veloppeurs toutes les fonctionnalit\u00e9s n\u00e9cessaires \u00e0 \u201cl\u2019internationalisation\u201d (la traduction) des th\u00e8mes et des plugins.<br \/>\nAu fil du temps, les r\u00e8gles d'\u00e9criture (les \u201cbonnes pratiques\u201d) se solidifient [rigidifient ?].<br \/>\nSi le th\u00e8me ou le plugin ne suit pas ces \u201crecommandations\u201d, il y a de fortes chances qu\u2019il ne franchisse pas les contr\u00f4les lui permettant d\u2019int\u00e9grer le D\u00e9p\u00f4t Officiel de WordPress : le d\u00e9veloppeur devra revoir son code en cons\u00e9quence.<br \/>\nEn soi, ces recommandations sont parfaitement justifi\u00e9es. C\u2019est un gage de compatibilit\u00e9, de \u201cmaintenabilit\u00e9\u201d, de lisibilit\u00e9, etc. L\u00e0 n'est pas le probl\u00e8me.<br \/>\nC\u2019est juste que si l\u2019on se conforme \u00e0 ces recommandations, il me semble que le textdomain devient inutile et qu'on pourrait s'en passer\u2026<\/p>\n","category_list_v2":"<a href=\"https:\/\/dev9.reskator.fr\/cms\/category\/developpeur\/\" rel=\"category tag\">D\u00e9veloppeur<\/a>","author_info_v2":{"name":"Philippe Reskator","url":"https:\/\/dev9.reskator.fr\/cms\/author\/philippe\/"},"comments_num_v2":"0 commentaire","_links":{"self":[{"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/posts\/2571","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/comments?post=2571"}],"version-history":[{"count":0,"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/posts\/2571\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/media\/45448"}],"wp:attachment":[{"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/media?parent=2571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/categories?post=2571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dev9.reskator.fr\/cms\/wp-json\/wp\/v2\/tags?post=2571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}