{"id":228616,"date":"2022-10-15T19:39:00","date_gmt":"2022-10-15T16:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228616"},"modified":"2022-11-09T03:16:44","modified_gmt":"2022-11-09T00:16:44","slug":"modification-dynamique-de-la-langue-de-votre-site-wordpress-locale","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/modification-dynamique-de-la-langue-de-votre-site-wordpress-locale\/","title":{"rendered":"Modification dynamique de la langue de votre site WordPress (locale)"},"content":{"rendered":"<p><a href=\"https:\/\/hashnode.com\/@wholesomecode\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/p>\n<p>Il existe de fantastiques plugins multilingues pour WordPress, mais pour un projet client, j&rsquo;avais besoin de quelque chose de beaucoup plus flexible, car ce client particulier devait r\u00e9pondre \u00e0 plusieurs pays qui parlaient chacun plusieurs langues.<\/p>\n<p>En bref, le client devait pouvoir disposer d&rsquo;une instance multisite avec un pays et une langue d\u00e9finis par d\u00e9faut, et la possibilit\u00e9 de remplacer le pays et la langue sur chaque page\/publication.<\/p>\n<h2>Construire un plugin multilingue<\/h2>\n<p>Si suffisamment de personnes <a href=\"https:\/\/wholesomecode.ltd\/contact\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">me d\u00e9rangent pour le faire<\/a>, je pourrais envisager de publier le tout en tant que plugin autonome, mais le c\u0153ur du plugin multilingue que je construis repose sur le <code>locale<\/code>filtre WordPress, et le c\u0153ur du plugin r\u00e9side dans l&rsquo;extrait de code suivant\u00a0:<\/p>\n<pre><code>\nfunction wholesomecode_example_redefine_locale( $locale) {\n\n    $country = get_post_meta( get_the_id(), '_wholesomecode_example_global_country_override', true );\n    $lang    = get_post_meta( get_the_id(), '_wholesomecode_example_global_language_override', true );\n\n    if (( empty( $lang) ||! (is_page() || is_single() || is_singular()) )) {\n        $country = get_theme_mod( 'wholesomecode_example_multilingual_country', 'gb' );\n        $lang    = get_theme_mod( 'wholesomecode_example_multilingual_language', 'en' );\n    }\n\n    if ('default' !== $country) {\n        $locale = $lang. '_'. strtoupper( $country );\n    } else {\n        $locale = $lang. '-'. $country;\n    }\n\n    return $locale;\n\n}\nadd_filter( 'locale', 'wholesomecode_example_redefine_locale', 10 );\n<\/code><\/pre>\n<p>Tada\u00a0! Vos param\u00e8tres r\u00e9gionaux sont maintenant d\u00e9finis et votre site multilingue devrait maintenant changer de langue en fonction de la m\u00e9ta de votre page\/site.<\/p>\n<h2>Attendre! Mes traductions par d\u00e9faut de base de WordPress ne fonctionnent pas\u00a0!<\/h2>\n<p>C&rsquo;est un probl\u00e8me que j&rsquo;ai rencontr\u00e9 et que je n&rsquo;ai pas pu r\u00e9soudre de toute ma vie. Mon th\u00e8me s&rsquo;est parfaitement traduit apr\u00e8s avoir ajout\u00e9 les fichiers .mo et .po pertinents, mais les traductions par d\u00e9faut de base de WordPress (telles que le message &quot;Laisser une r\u00e9ponse&quot; dans le mod\u00e8le de commentaires) ne se traduisaient pas.<\/p>\n<p>Il s&rsquo;av\u00e8re que la solution \u00e9tait assez simple! Bien que j&rsquo;aie pr\u00e9vu des traductions de domaine personnalis\u00e9es, j&rsquo;avais oubli\u00e9 de mettre un simple morceau de code dans mon th\u00e8me\u00a0: <code>load_default_textdomain()<\/code>.<\/p>\n<pre><code>\nload_default_textdomain();\n<\/code><\/pre>\n<p>Si j&rsquo;ai \u00e9pargn\u00e9 quelques heures de votre d\u00e9bogage avec cette &quot;astuce bizarre&quot;, vous \u00eates les bienvenus\u00a0!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il existe de fantastiques plugins multilingues pour WordPress, mais pour un projet client, j&rsquo;avais besoin de quelque chose de beaucoup plus flexible, car ce client particulier devait r\u00e9pondre \u00e0 plusieurs &#8230;<\/p>\n","protected":false},"author":1,"featured_media":224116,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,717,841,862],"tags":[1167],"class_list":["post-228616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228616","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=228616"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228616\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224116"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=228616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=228616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=228616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}