{"id":80586,"date":"2025-08-25T07:28:39","date_gmt":"2025-08-25T06:28:39","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=80586&#038;preview=true&#038;preview_id=80586"},"modified":"2025-10-08T12:51:35","modified_gmt":"2025-10-08T11:51:35","slug":"themes-bloc-internationalisation","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/","title":{"rendered":"Guide du d\u00e9veloppeur : Rendre les th\u00e8mes WordPress multilingues"},"content":{"rendered":"<p>Les th\u00e8mes de blocs traduisent WordPress diff\u00e9remment d&rsquo;une approche typique. Les fichiers de mod\u00e8les PHP traditionnels avec des fonctions de traduction ne fonctionnent pas avec les mod\u00e8les <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-le-html\/\">HTML<\/a>, les blocs aliment\u00e9s par JavaScript et l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/wordpress-full-site-editing\/\">\u00e9diteur de site<\/a>. Ce changement t&rsquo;oblige \u00e0 comprendre diff\u00e9remment les syst\u00e8mes d&rsquo;internationalisation des blocs WordPress.<\/p>\n<p>Ce guide propose des strat\u00e9gies pour rendre tes th\u00e8mes de blocs multilingues. Vous apprendrez \u00e0 naviguer dans les d\u00e9fis de la traduction des th\u00e8mes de blocs \u00e0 mettre en \u0153uvre des solutions et \u00e0 int\u00e9grer des extensions de traduction.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Pourquoi les th\u00e8mes de blocs cassent les m\u00e9thodes de traduction traditionnelles (et comment y rem\u00e9dier).<\/h2>\n<p>Les <a href=\"https:\/\/kinsta.com\/fr\/blog\/developpement-theme-bloc-wordpress\/\">th\u00e8mes de blocs<\/a> remplacent de nombreux fichiers PHP de WordPress par des mod\u00e8les HTML qui contiennent des balises Block. Cependant, ce changement pose des probl\u00e8mes car les mod\u00e8les HTML ne peuvent pas ex\u00e9cuter les fonctions de traduction PHP telles que <code>_()<\/code> ou <code>_e()<\/code>. Par cons\u00e9quent, les cha\u00eenes de traduction que vous avez d\u00e9j\u00e0 sont inutilement stock\u00e9es dans des fichiers statiques.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/fr\/blog\/wordpress-6-8\/\">WordPress 6.8<\/a> apporte quelques am\u00e9liorations qui simplifient l&rsquo;internationalisation des th\u00e8mes en bloc. Principalement, les th\u00e8mes avec des <a href=\"https:\/\/docs.sevalla.com\/applications\/reference\/http-headers\">en-t\u00eates<\/a> <strong>Text Domain<\/strong> et <strong>Domain Path<\/strong> appropri\u00e9s n&rsquo;ont plus besoin d&rsquo;appels \u00e0 <code>manual load_theme_textdomain()<\/code>.<\/p>\n<p>Au lieu de cela, WordPress charge automatiquement les fichiers de traduction et donne la priorit\u00e9 \u00e0 <code>wp-content\/languages\/themes\/<\/code> sur les r\u00e9pertoires de th\u00e8mes pour des raisons de performance.<\/p>\n<p>Pour commencer, configurez votre th\u00e8me selon une approche classique en ajoutant des m\u00e9tadonn\u00e9es au fichier <code>style.css<\/code>.<\/p>\n<pre><code class=\"language-css\">\/*\nTheme Name: My Block Theme\nText Domain: my-block-theme\nDomain Path: \/languages\n*\/\n<\/code><\/pre>\n<p>Notez que l&rsquo;en-t\u00eate du <strong>Text Domain<\/strong> doit correspondre au nom du dossier de votre th\u00e8me (g\u00e9n\u00e9ralement en <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Glossary\/Kebab_case\" target=\"_blank\" rel=\"noopener noreferrer\">majuscule kebab<\/a>) pour que les fichiers de traduction se chargent automatiquement et correctement dans les versions r\u00e9centes de WordPress.<\/p>\n<p>Comme pour <code>style.css<\/code>, le fichier <code>functions.php<\/code> ne n\u00e9cessite qu&rsquo;une configuration minimale :<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\/\/ Optional in WordPress 6.8+ but included for backward compatibility\nfunction my_block_theme_setup() {\n    load_theme_textdomain( 'my-block-theme', get_template_directory() . '\/languages' );\n}\n\nadd_action( 'after_setup_theme', 'my_block_theme_setup' );\n\n\/\/ Register block scripts with translation support\nfunction my_block_theme_scripts() {\n    wp_enqueue_script(\n        'my-block-theme-scripts',\n        get_template_directory_uri() . '\/assets\/js\/theme.js',\n        array( 'wp-i18n' ),\n        '1.0.0',\n        true\n    );\n\n    wp_set_script_translations( \n        'my-block-theme-scripts', \n        'my-block-theme', \n        get_template_directory() . '\/languages' \n    );\n}\n\nadd_action( 'wp_enqueue_scripts', 'my_block_theme_scripts' );\n<\/code><\/pre>\n<p>La principale diff\u00e9rence entre les th\u00e8mes classiques et les th\u00e8mes de blocs est que ces derniers r\u00e9partissent la responsabilit\u00e9 de la traduction entre le PHP c\u00f4t\u00e9 serveur et le JavaScript c\u00f4t\u00e9 client. En revanche, les th\u00e8mes classiques doivent s&rsquo;appuyer sur PHP pour g\u00e9rer la plupart des traductions.<\/p>\n<h2>Comment construire les traductions block.json<\/h2>\n<p>Le fichier <a href=\"https:\/\/kinsta.com\/courses\/gutenberg-block-development\/plugin-file-block-json-file\/\">block.json<\/a> est votre \u00ab centre de configuration \u00bb pour le bloc que vous souhaitez traduire. La mise en place d&rsquo;une internationalisation appropri\u00e9e garantit que vos blocs se traduisent correctement \u00e0 la fois dans l&rsquo;\u00e9diteur et sur l&rsquo;interface publique.<\/p>\n<p>La <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-metadata\/\" target=\"_blank\" rel=\"noopener noreferrer\">fa\u00e7on canonique d&rsquo;enregistrer un bloc<\/a> est de le faire par le biais de <code>block.json<\/code>. En commen\u00e7ant par la configuration <code>textdomain<\/code>, WordPress peut traduire les champs <strong>titre<\/strong>, <strong>description<\/strong> et <strong>mots-cl\u00e9s<\/strong> lorsque la configuration <code>textdomain<\/code> est d\u00e9finie :<\/p>\n<pre><code class=\"language-json\">{\n\t\"$schema\": \"https:\/\/schemas.wp.org\/trunk\/block.json\",\n\t\"apiVersion\": 3,\n\t\"name\": \"my-theme\/testimonial\",\n\t\"title\": \"Testimonial\",\n\t\"category\": \"text\",\n\t\"description\": \"Display customer testimonials\",\n\t\"keywords\": [\"quote\", \"review\", \"testimonial\"],\n\t\"textdomain\": \"my-block-theme\",\n\t\"attributes\": {\n\t\t\"content\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"source\": \"html\",\n\t\t\t\"selector\": \"blockquote\"\n\t\t}\n\t}\n}\n<\/code><\/pre>\n<p>Cependant, les sc\u00e9narios n\u00e9cessitant un \u00ab contexte \u00bb ont besoin d&rsquo;un enregistrement c\u00f4t\u00e9 serveur. Le contexte, dans ce cas, est important parce que le m\u00eame mot peut se traduire diff\u00e9remment en fonction de son utilisation. Par exemple, \u00ab post \u00bb en tant que nom ou en tant que verbe n\u00e9cessite des traductions diff\u00e9rentes dans de nombreuses langues :<\/p>\n<pre><code class=\"language-php\">function my_theme_register_testimonial_block() {\n\tregister_block_type_from_metadata(\n\t\tget_template_directory() . '\/blocks\/testimonial',\n\t\tarray(\n\t\t\t'title' =&gt; _x( 'Testimonial', 'block title', 'my-block-theme' ),\n\t\t\t'description' =&gt; _x(\n\t\t\t\t'Display customer testimonials', \n\t\t\t\t'block description', \n\t\t\t\t'my-block-theme'\n\t\t\t),\n\n\t\t\t'keywords' =&gt; array(\n\t\t\t\t_x( 'quote', 'block keyword', 'my-block-theme' ),\n\t\t\t\t_x( 'review', 'block keyword', 'my-block-theme' )\n\t\t\t)\n\t\t)\n\t);\n}\n\nadd_action( 'init', 'my_theme_register_testimonial_block' );\n<\/code><\/pre>\n<p>Toutes les <a href=\"https:\/\/kinsta.com\/fr\/blog\/etendre-blocs-coeur-wp\/#registering-block-variations\">variations de blocs<\/a> que vous incluez ont \u00e9galement besoin d&rsquo;un nom structur\u00e9, parce que WordPress recherche des mod\u00e8les sp\u00e9cifiques lorsqu&rsquo;il charge vos traductions. Chaque nom de variation fait partie de la cl\u00e9 de traduction :<\/p>\n<pre><code class=\"language-json\">{\n\t\"name\": \"my-theme\/button\",\n\t\"title\": \"Button\",\n\t\"textdomain\": \"my-block-theme\",\n\t\"variations\": [{\n\t\t\t\"name\": \"primary\",\n\t\t\t\"title\": \"Primary Button\",\n\t\t\t\"attributes\": {\n\t\t\t\t\"className\": \"is-style-primary\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"secondary\",\n\t\t\t\"title\": \"Secondary Button\",\n\t\t\t\"attributes\": {\n\t\t\t\t\"className\": \"is-style-secondary\"\n\t\t\t}\n\t\t}\n\t]\n}\n<\/code><\/pre>\n<p>L&rsquo;internationalisation du JavaScript exige que vous importiez les <a href=\"https:\/\/developer.wordpress.org\/apis\/internationalization\/internationalization-functions\/\" target=\"_blank\" rel=\"noopener noreferrer\">fonctions i18n de WordPress<\/a> et que vous configuriez les traductions des scripts. Cela est d\u00fb au fait que l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/wordpress-full-site-editing\/\">\u00c9diteur de site<\/a> s&rsquo;ex\u00e9cute dans le navigateur plut\u00f4t que sur le serveur. Comme les fonctions de traduction PHP n&rsquo;existent pas en JavaScript, WordPress fournit des fonctions \u00e9quivalentes par le biais du paquetage <code>@wordpress\/i18n<\/code> :<\/p>\n<pre><code class=\"language-js\">import {\n\tregisterBlockType\n} from '@wordpress\/blocks';\nimport {\n\t__\n} from '@wordpress\/i18n';\nimport {\n\tuseBlockProps,\n\tRichText\n} from '@wordpress\/block-editor';\n\nregisterBlockType('my-theme\/testimonial', {\n\tedit: ({\n\t\tattributes,\n\t\tsetAttributes\n\t}) =&gt; {\n\t\tconst blockProps = useBlockProps();\n\n\t\treturn ( &lt; div { ...blockProps } &gt;\n\t\t\t&lt; RichText tagName = \"blockquote\" value = { attributes.content } onChange = { (content) =&gt; setAttributes({\n\t\t\t\t\tcontent\n\t\t\t\t})\n\t\t\t}\n\t\t\tplaceholder = {\n\t\t\t\t__('Add testimonial text...', 'my-block-theme')\n\t\t\t}\n\t\t\t\/&gt; &lt; cite &gt;\n\t\t\t&lt; RichText tagName = \"span\" value = { attributes.author } onChange = { (author) =&gt; setAttributes({\n\t\t\t\t\tauthor\n\t\t\t\t})\n\t\t\t}\n\t\t\tplaceholder = {\n\t\t\t\t__('Author name', 'my-block-theme')\n\t\t\t}\n\t\t\t\/&gt; &lt; \/cite&gt; &lt; \/div&gt;\n\t\t);\n\t}\n});\n<\/code><\/pre>\n<p>De plus, c&rsquo;est une bonne id\u00e9e de g\u00e9n\u00e9rer des <a href=\"https:\/\/kinsta.com\/fr\/blog\/comment-traduire-un-site-web\/\">fichiers de traduction<\/a> JSON pour JavaScript car WordPress utilise un format diff\u00e9rent pour les traductions c\u00f4t\u00e9 client. PHP utilise des fichiers <code>.mo<\/code>, mais JavaScript a besoin de fichiers <code>.json<\/code> avec des conventions de nommage sp\u00e9cifiques. Vous pouvez automatiser cela en utilisant les commandes <a href=\"https:\/\/kinsta.com\/fr\/blog\/wp-cli\/\">WP-CLI<\/a> :<\/p>\n<pre><code class=\"language-bash\"># Extract strings from JavaScript files into POT\nwp i18n make-pot . languages\/my-block-theme.pot\n\n# Convert PO files to JSON for JavaScript\nwp i18n make-json languages\/ --no-purge --pretty-print\n<\/code><\/pre>\n<p>Les fichiers JSON qui en r\u00e9sultent suivent un mod\u00e8le coh\u00e9rent : <code>{textdomain}-{locale}-{handle}.json<\/code>. WordPress peut alors les charger lorsque vous appellez<code>wp_set_script_translations()<\/code>.<\/p>\n<h2>Convertir tes mod\u00e8les HTML statiques en composants PHP pr\u00eats \u00e0 \u00eatre traduits<\/h2>\n<p>\u00c9tant donn\u00e9 que les mod\u00e8les HTML sont statiques, travailler avec eux pour l&rsquo;internationalisation du th\u00e8me Block est un d\u00e9fi, car vos fonctions et techniques de traduction existantes ne fonctionneront pas.<\/p>\n<p>Les parties de mod\u00e8les aliment\u00e9es par PHP peuvent r\u00e9soudre ce probl\u00e8me car WordPress les traite comme des fichiers PHP bien qu&rsquo;ils soient r\u00e9f\u00e9renc\u00e9s dans des mod\u00e8les HTML. Cette approche hybride maintient la structure du th\u00e8me de blocs tout en permettant un contenu dynamique :<\/p>\n<pre><code class=\"language-js\">&lt;!-- templates\/page.html --&gt;\n&lt;!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \/--&gt;\n&lt;!-- wp:group {\"tagName\":\"main\",\"layout\":{\"type\":\"constrained\"}} --&gt;\n\n&lt;main class=\"wp-block-group\"&gt;\n&lt;!-- wp:post-title {\"level\":1} \/--&gt;\n     &lt;!-- wp:post-content \/--&gt;\n     &lt;!-- wp:template-part {\"slug\":\"post-meta\"} \/--&gt;\n&lt;\/main&gt;\n&lt;!-- \/wp:group \u2192\n&lt;!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \/--&gt;\n<\/code><\/pre>\n<p>Notez que la partie du mod\u00e8le peut contenir du PHP :<\/p>\n<pre><code class=\"language-js\">&lt;!-- parts\/post-meta.html --&gt;\n&lt;!-- wp:group {\"className\":\"post-meta\"} --&gt;\n&lt;div class=\"wp-block-group post-meta\"&gt;\n&lt;?php\n    echo sprintf(\n      \/* translators: 1: Post date, 2: Post author *\/\n      __( 'Published on %1$s by %2$s', 'my-block-theme' ),\n      get_the_date(),\n     get_the_author()\n     );\n     ?&gt;\n&lt;\/div&gt;\n&lt;!-- \/wp:group --&gt;\n<\/code><\/pre>\n<p>Les blocs complexes ont besoin du fichier <code>render.php<\/code> parce que certains contenus n\u00e9cessitent un traitement c\u00f4t\u00e9 serveur que les attributs de bloc seuls ne peuvent pas g\u00e9rer. Les <a href=\"https:\/\/kinsta.com\/fr\/blog\/indexation-dans-mysql-mariadb\/\">requ\u00eates de base de donn\u00e9es<\/a>, la <a href=\"https:\/\/kinsta.com\/fr\/blog\/visibilite-bloc\/\">logique conditionnelle<\/a> et la g\u00e9n\u00e9ration de contenu dynamique n\u00e9cessitent toutes une ex\u00e9cution PHP :<\/p>\n<pre><code class=\"language-php\">\/\/ blocks\/recent-posts\/render.php\n&lt;?php\n$recent_posts = get_posts( array( \n'numberposts' =&gt; $attributes['count'] ?? 5 \n) );\n?&gt;\n&lt;div &lt;?php echo get_block_wrapper_attributes(); ?&gt;&gt;\n&lt;h3&gt;&lt;?php echo esc_html__( 'Recent Posts', 'my-block-theme' ); ?&gt;&lt;\/h3&gt;\n     &lt;?php if ( $recent_posts ) : ?&gt;\n      &lt;ul&gt;\n      &lt;?php foreach ( $recent_posts as $post ) : ?&gt;\n           &lt;li&gt;\n           &lt;a href=\"&lt;?php echo get_permalink( $post ); ?&gt;\"&gt;\n            &lt;?php echo get_the_title( $post ); ?&gt;\n           &lt;\/a&gt;\n\n           &lt;span class=\"post-date\"&gt;\n            &lt;?php echo get_the_date( '', $post ); ?&gt;\n           &lt;\/span&gt;\n           &lt;\/li&gt;\n         &lt;?php endforeach; ?&gt;\n         &lt;\/ul&gt;\n     &lt;?php else : ?&gt;\n         &lt;p&gt;&lt;?php esc_html_e( 'No posts found.', 'my-block-theme' ); ?&gt;&lt;\/p&gt;\n     &lt;?php endif; ?&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Cela signifie que vous devez configurer votre bloc de fa\u00e7on \u00e0 ce qu&rsquo;il utilise le fichier de rendu qui se trouve \u00e0 l&rsquo;adresse <code>block.json<\/code> :<\/p>\n<pre><code class=\"language-js\">{\n\t\"name\": \"my-theme\/recent-posts\",\n\t\"render\": \"file:.\/render.php\",\n\t\"attributes\": {\n\t\t\"count\": {\n\t\t\t\"type\": \"number\",\n\t\t\t\"default\": 5\n\t\t}\n\t}\n}\n<\/code><\/pre>\n<h2>Comment mettre en \u0153uvre la traduction du contenu dynamique pour les champs personnalis\u00e9s et les entr\u00e9es utilisateur ?<\/h2>\n<p>Malgr\u00e9 sa pr\u00e9valence sur les sites WordPress, le contenu dynamique peut causer des probl\u00e8mes de traduction parce qu&rsquo;il existe dans la base de donn\u00e9es plut\u00f4t que dans les fichiers de votre th\u00e8me. En tant que telle, toute <a href=\"https:\/\/kinsta.com\/fr\/partenaires\/weglot\/\">extension de traduction tierce<\/a> que vous utilisez doit identifier et g\u00e9rer ce contenu s\u00e9par\u00e9ment des cha\u00eenes statiques du th\u00e8me.<\/p>\n<p>C&rsquo;est l\u00e0 que l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/advanced-custom-fields\/\">enregistrement des champs personnalis\u00e9s<\/a> avec une configuration m\u00e9ta appropri\u00e9e est pr\u00e9cieux, car les extensions de traduction s&rsquo;accrochent au syst\u00e8me m\u00e9ta de WordPress pour d\u00e9tecter tout contenu traduisible. Le param\u00e8tre <code>show_in_rest<\/code> permet d&rsquo;assurer la compatibilit\u00e9 avec l&rsquo;\u00e9diteur de site :<\/p>\n<pre><code class=\"language-php\">function my_theme_register_meta_fields() {\n    register_post_meta( 'page', 'custom_subtitle', array(\n        'type' =&gt; 'string',\n        'description' =&gt; __( 'Page subtitle', 'my-block-theme' ),\n        'single' =&gt; true,\n        'show_in_rest' =&gt; true,\n        'auth_callback' =&gt; function() {\n            return current_user_can( 'edit_posts' );\n        }\n    ));\n}\n\nadd_action( 'init', 'my_theme_register_meta_fields' );\n\n\/\/ Display with plugin compatibility\nfunction my_theme_display_subtitle( $post_id ) {\n    $subtitle = get_post_meta( $post_id, 'custom_subtitle', true );\n\n    if ( ! $subtitle ) {\n        return;\n    }\n\n    \/\/ WPML compatibility\n    \/\/ (documented at wpml.org\/documentation\/support\/wpml-coding-api\/wpml-hooks-reference\/)\n    if ( function_exists( 'icl_t' ) ) {\n        $subtitle = icl_t( \n            'my-block-theme', \n            'subtitle_' . $post_id, \n            $subtitle \n        );\n    }\n\n    \/\/ Polylang compatibility\n    \/\/ (documented at polylang.pro\/doc\/function-reference\/)\n    if ( function_exists( 'pll_translate_string' ) ) {\n        $subtitle = pll_translate_string( $subtitle, 'my-block-theme' );\n    }\n\n    echo '&lt;h2 class=\"page-subtitle\"&gt;' . esc_html( $subtitle ) . '&lt;\/h2&gt;';\n}\n<\/code><\/pre>\n<p>Les requ\u00eates de base de donn\u00e9es doivent \u00e9galement \u00eatre filtr\u00e9es en fonction de la langue car WordPress ne filtre pas automatiquement le contenu en fonction de la langue. Les extensions de traduction ajoutent des modifications aux requ\u00eates que vous devez prendre en compte :<\/p>\n<pre><code class=\"language-php\">function my_theme_get_localized_posts( $args = array() ) {\n    $defaults = array(\n        'post_type' =&gt; 'post',\n        'posts_per_page' =&gt; 10\n    );\n\n    $args = wp_parse_args( $args, $defaults );\n\n    \/\/ Polylang adds language taxonomy\n    \/\/ (documented at polylang.pro\/doc\/developpers-how-to\/)\n    if ( function_exists( 'pll_current_language' ) ) {\n        $args['lang'] = pll_current_language();\n    }\n\n    \/\/ WPML filters queries automatically when suppress_filters is false\n    \/\/ (wpml.org\/documentation\/getting-started-guide\/translating-custom-posts\/)\n\n    if ( defined( 'ICL_LANGUAGE_CODE' ) ) {\n        $args['suppress_filters'] = false;\n    }\n\n    return get_posts( $args );\n}\n<\/code><\/pre>\n<p>Le <a href=\"https:\/\/kinsta.com\/fr\/blog\/formulaire-inscription-wordpress\/\">traitement de votre\u00a0formulaire<\/a> m\u00e9lange du contenu dynamique et statique, mais les libell\u00e9s du formulaire, les messages d&rsquo;erreur et les notifications de l&rsquo;administrateur ont tous besoin d&rsquo;une traduction adapt\u00e9e \u00e0 la langue. Les destinataires des e-mails peuvent \u00e9galement varier en fonction de la langue :<\/p>\n<pre><code class=\"language-php\">function my_theme_process_contact_form() {\n\tif ( ! isset( $_POST['contact_nonce'] ) || \n\t! wp_verify_nonce( $_POST['contact_nonce'], 'contact_form' ) ) {\n\treturn;\n\t}\n\n\t$name = sanitize_text_field( $_POST['name'] );\n\t$email = sanitize_email( $_POST['email'] );\n\t$message = sanitize_textarea_field( $_POST['message'] );\n\n\t\/\/ Get admin email in current language\n\t$admin_email = get_option( 'admin_email' );\n\n\t\/\/ For language-specific admin emails, use WPML's string translation\n\t\/\/ (documented at wpml.org\/documentation\/support\/wpml-coding-api\/wpml-hooks-reference\/)\n\n\tif ( function_exists( 'icl_t' ) ) {\n\t\t\/\/ First register the string if not already registered\n\t\tif ( function_exists( 'icl_register_string' ) ) {\n\t\t\ticl_register_string( 'my-block-theme', 'contact_email', $admin_email );\n\t\t}\n\n\t\t$admin_email = icl_t(\n\t\t\t'my-block-theme',\n\t\t\t'contact_email',\n\t\t\t$admin_email\n\t\t);\n\t}\n\n\t$subject = sprintf(\n\t\/* translators: %s: Sender name *\/\n\t__( 'Contact form submission from %s', 'my-block-theme' ),\n\t$name\n\t);\n\n\twp_mail( $admin_email, $subject, $message );\n}\n\nadd_action( 'init', 'my_theme_process_contact_form' );\n<\/code><\/pre>\n<p>Il est \u00e9galement important d&rsquo;\u00e9valuer la prise en compte de la langue dans votre navigation, car les \u00e9l\u00e9ments de menu, les URL et la structure peuvent diff\u00e9rer d&rsquo;une langue \u00e0 l&rsquo;autre. Votre extension de traduction dispose probablement d&rsquo;une API permettant de cr\u00e9er des commutateurs de langue :<\/p>\n<pre><code class=\"language-php\">function my_theme_language_switcher_block() {\n    if ( ! function_exists( 'pll_the_languages' ) && \n         ! function_exists( 'icl_get_languages' ) ) {\n        return;\n    }\n\n    $output = '&lt;div class=\"language-switcher\"&gt;';\n\n    \/\/ Polylang language switcher \n    \/\/ (documented at polylang.pro\/doc\/function-reference\/)\n\n    if ( function_exists( 'pll_the_languages' ) ) {\n        $languages = pll_the_languages( array( 'raw' =&gt; 1 ) );\n        foreach ( $languages as $lang ) {\n            $output .= sprintf(\n                '&lt;a href=\"%s\" class=\"%s\"&gt;%s&lt;\/a&gt;',\n                esc_url( $lang['url'] ),\n                $lang['current_lang'] ? 'current-lang' : '',\n                esc_html( $lang['name'] )\n            );\n        }\n    }\n\n    \/\/ WPML language switcher\n    \/\/ (documented at wpml.org\/documentation\/support\/wpml-coding-api\/multi-language-api\/)\n    elseif ( function_exists( 'icl_get_languages' ) ) {\n        $languages = icl_get_languages();\n        foreach ( $languages as $lang ) {\n            $output .= sprintf(\n                '&lt;a href=\"%s\" class=\"%s\"&gt;%s&lt;\/a&gt;',\n                esc_url( $lang['url'] ),\n                $lang['active'] ? 'current-lang' : '',\n                esc_html( $lang['native_name'] )\n            );\n        }\n    }\n\n    $output .= '&lt;\/div&gt;';\n    return $output;\n}\n<\/code><\/pre>\n<p>Travailler avec des extensions de traduction repr\u00e9sentera probablement une grande partie de votre travail, nous allons donc nous pencher sur cet aspect ensuite.<\/p>\n<h2>Travailler avec des plugins de traduction : compatibilit\u00e9 et optimisation<\/h2>\n<p>Chaque extension WoirdPress de traduction g\u00e8re les th\u00e8mes de blocs d&rsquo;une mani\u00e8re unique. Comprendre les approches des diff\u00e9rentes solutions vous aide \u00e0 construire la compatibilit\u00e9 et la flexibilit\u00e9 d\u00e8s le d\u00e9part.<\/p>\n<p>La documentation <a href=\"https:\/\/kinsta.com\/fr\/blog\/wordpress-full-site-editing\/\">Full Site Editing<\/a> de WPML explique comment vous avez besoin d&rsquo;une configuration sp\u00e9cifique pour les th\u00e8mes de blocs :<\/p>\n<pre><code class=\"language-php\">\/\/ WPML FSE compatibility based on official documentation\nadd_action( 'init', function() {\n    if ( ! defined( 'WPML_VERSION' ) ) {\n    return;\n    }\n\n    \/\/ FSE themes are automatically detected in WPML 4.5.3+ \/\/ Enable FSE support\n    add_filter( 'wpml_is_fse_theme', '__return_true' );\n\n    \/\/ Register custom strings per WPML String Translation documentation\n    \/\/ (documented at wpml.org\/documentation\/support\/wpml-coding-api\/wpml-hooks-reference\/)\n\n    if ( function_exists( 'icl_register_string' ) ) {\n        icl_register_string(\n        'my-block-theme',\n        'footer-copyright',\n        '\u00a9 My Company.'\n        );\n    }\n});\n<\/code><\/pre>\n<p>Polylang Pro prend en charge l&rsquo;\u00c9diteur de site depuis la version 3.2. L&rsquo;extension g\u00e8re les <a href=\"https:\/\/kinsta.com\/fr\/blog\/developpement-theme-bloc-wordpress\/\">th\u00e8mes de blocs<\/a> par le biais de son interface standard de traduction de cha\u00eenes de caract\u00e8res :<\/p>\n<pre><code class=\"language-php\">\/\/ Polylang string registration per official documentation\nif ( function_exists( 'pll_register_string' ) ) {\n\tpll_register_string( \n\t\t'Footer Copyright',\n\t\t'\u00a9 My Company.',\n\t\t'my-block-theme',\n\t\ttrue \/\/ Multiline support\n\t);\n}\n<\/code><\/pre>\n<p>La <a href=\"https:\/\/translatepress.com\/docs\/developers\/exclude-certain-text-or-element-from-being-translated\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentation de TranslatePress<\/a> montre que certains \u00e9l\u00e9ments dynamiques doivent \u00eatre exclus pour une performance optimale :<\/p>\n<pre><code class=\"language-php\">\/\/ TranslatePress optimization based on official recommendations\n\/\/ (documented at translatepress.com\/docs\/developers\/)\nadd_filter( 'trp_stop_translating_page', function( $stop, $url ) {\n\t\/\/ Skip admin and API requests per TranslatePress documentation\n\tif ( is_admin() || wp_is_json_request() ) {\n\treturn true;\n\t}\n\n\t\/\/ Skip pattern preview URLs that can cause rendering issues\n    if ( strpos( $url, 'pattern-preview' ) !== false ) {\n    \treturn true;\n\t}\n\n\treturn $stop;\n}, 10, 2 );\n<\/code><\/pre>\n<p>Vous pouvez \u00e9galement envisager <a href=\"https:\/\/multilingualpress.org\/\">MultilingualPress<\/a>, qui fonctionne diff\u00e9remment gr\u00e2ce \u00e0 WordPress Multisite. Chaque langue est g\u00e9r\u00e9e comme un site distinct avec son propre th\u00e8me de bloc, ce qui \u00e9vite toute couche de traduction suppl\u00e9mentaire ni configuration particuli\u00e8re. Cette approche permet d&rsquo;acc\u00e9l\u00e9rer le processus et d&rsquo;\u00e9viter la d\u00e9pendance aux plugins, car tout repose sur l&rsquo;internationalisation du c\u0153ur de WordPress.<\/p>\n<p>Enfin, il y a quelques conseils d&rsquo;ordre g\u00e9n\u00e9ral \u00e0 transmettre lorsque vous travaillez avec des bases de code tierces (comme les extensions). Tout d&rsquo;abord, assurez-vous d&rsquo;utiliser une <a href=\"https:\/\/kinsta.com\/fr\/blog\/debogage-wordpress\/\">approche syst\u00e9matique pour d\u00e9boguer<\/a> les probl\u00e8mes de traduction.<\/p>\n<pre><code class=\"language-php\">\/\/ Debug helper for translation issues\nfunction my_theme_debug_translations() {\n    if ( ! WP_DEBUG || ! current_user_can( 'manage_options' ) ) {\n    return;\n\t}\n\n\terror_log( 'Text domain loaded: ' . is_textdomain_loaded(\n    \t'my-block-theme' ) );\n         error_log( 'Current locale: ' . get_locale() );\n         error_log( 'Translation test: ' . __(\n\t\t\t'Hello World',\n            'my-block-theme'\n         )\n\t);\n\n\t\/\/ Check JSON translations for blocks\n    $json_file = WP_LANG_DIR . '\/themes\/my-block-theme-' . get_locale() . '-script-handle.json';\n\terror_log( 'JSON translation exists: ' . file_exists( $json_file ) );\n}\n\nadd_action( 'init', 'my_theme_debug_translations' );\n<\/code><\/pre>\n<p>La <a href=\"https:\/\/kinsta.com\/fr\/blog\/cache-edge\/\">mise en cache du site<\/a> peut interf\u00e9rer avec les mises \u00e0 jour des traductions, c&rsquo;est pourquoi il est pr\u00e9f\u00e9rable de vider les caches lorsque les fichiers de traduction sont modifi\u00e9s :<\/p>\n<pre><code class=\"language-bash\"># Clear WordPress transients\nwp transient delete --all\n\n# Generate fresh translation files\nwp i18n make-pot . languages\/my-block-theme.pot\nwp i18n make-json languages\/ --no-purge\n<\/code><\/pre>\n<p>L&rsquo;optimisation des performances devient critique avec les extensions de traduction. Chaque extension ajoute des requ\u00eates de base de donn\u00e9es et des frais g\u00e9n\u00e9raux de traitement, ce qui profite \u00e0 nouveau \u00e0 la mise en cache des traductions fr\u00e9quemment utilis\u00e9es :<\/p>\n<pre><code class=\"language-php\">function my_theme_cached_translation( $text, $domain = 'my-block-theme' ) {\n    $cache_key = 'translation_' . md5( $text . get_locale() );\n    $cached = wp_cache_get( $cache_key, 'my_theme_translations' );\n\n    if ( false === $cached ) {\n        $cached = __( $text, $domain );\n        wp_cache_set( $cache_key, $cached, 'my_theme_translations', HOUR_IN_SECONDS );\n    }\n\n    return $cached;\n}\n<\/code><\/pre>\n<p>Par ailleurs, il peut \u00eatre judicieux d&rsquo;ignorer la mise en cache jusqu&rsquo;\u00e0 ce que vous soyez pr\u00eat \u00e0 la d\u00e9ployer. L&rsquo;utilisation d&rsquo;un <a href=\"https:\/\/kinsta.com\/fr\/docs\/hebergement-wordpress\/environnement-staging\/\">environnement de staging<\/a> est id\u00e9ale pour cela, et vous n&rsquo;aurez g\u00e9n\u00e9ralement pas besoin de l&rsquo;augmentation des performances qu&rsquo;apporte la mise en cache.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>L&rsquo;internationalisation du th\u00e8me de blocs exige que vous travailliez avec les deux m\u00e9thodes de traduction de WordPress et que vous utilisiez de nouvelles approches dans l&rsquo;\u00c9diteur de site.<\/p>\n<p>En configurant les m\u00e9tadonn\u00e9es de votre th\u00e8me, en mettant en \u0153uvre des strat\u00e9gies de mod\u00e8les et en comprenant les exigences des extensions de traduction, vous pouvez cr\u00e9er des th\u00e8mes de blocs multilingues qui fonctionnent bien et offrent une exp\u00e9rience utilisateur de haute qualit\u00e9.<\/p>\n<p>Lorsque vous \u00eates pr\u00eat \u00e0 vous lancer, l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/hebergement-wordpress\/\">h\u00e9bergement infog\u00e9r\u00e9 de Kinsta pour WordPress<\/a> offre les performances et la port\u00e9e mondiale dont votre site a besoin, avec une mise en cache int\u00e9gr\u00e9e, un <a href=\"https:\/\/kinsta.com\/fr\/docs\/information-service\/emplacements-centre-de-donnees\/\">CDN \u00e0 37 emplacements<\/a> et des outils tels que l&rsquo;int\u00e9gration Git et le <a href=\"https:\/\/kinsta.com\/fr\/docs\/hebergement-wordpress\/environnement-staging\/\">staging<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les th\u00e8mes de blocs traduisent WordPress diff\u00e9remment d&rsquo;une approche typique. Les fichiers de mod\u00e8les PHP traditionnels avec des fonctions de traduction ne fonctionnent pas avec les &#8230;<\/p>\n","protected":false},"author":199,"featured_media":80587,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1028],"class_list":["post-80586","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-developpement-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Rendre les th\u00e8mes de blocs WordPress multilingues (Guide du d\u00e9veloppeur)<\/title>\n<meta name=\"description\" content=\"Les th\u00e8mes de blocs WordPress n\u00e9cessitent une approche diff\u00e9rente en mati\u00e8re d&#039;internationalisation. Cet article pr\u00e9sente des strat\u00e9gies pour r\u00e9ussir dans le domaine du multilinguisme.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guide du d\u00e9veloppeur : Rendre les th\u00e8mes WordPress multilingues\" \/>\n<meta property=\"og:description\" content=\"Les th\u00e8mes de blocs WordPress n\u00e9cessitent une approche diff\u00e9rente en mati\u00e8re d&#039;internationalisation. Cet article pr\u00e9sente des strat\u00e9gies pour r\u00e9ussir dans le domaine du multilinguisme.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-25T06:28:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-08T11:51:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Les th\u00e8mes de blocs WordPress n\u00e9cessitent une approche diff\u00e9rente en mati\u00e8re d&#039;internationalisation. Cet article pr\u00e9sente des strat\u00e9gies pour r\u00e9ussir dans le domaine du multilinguisme.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Guide du d\u00e9veloppeur : Rendre les th\u00e8mes WordPress multilingues\",\"datePublished\":\"2025-08-25T06:28:39+00:00\",\"dateModified\":\"2025-10-08T11:51:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/\"},\"wordCount\":1726,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\",\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/\",\"name\":\"Rendre les th\u00e8mes de blocs WordPress multilingues (Guide du d\u00e9veloppeur)\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\",\"datePublished\":\"2025-08-25T06:28:39+00:00\",\"dateModified\":\"2025-10-08T11:51:35+00:00\",\"description\":\"Les th\u00e8mes de blocs WordPress n\u00e9cessitent une approche diff\u00e9rente en mati\u00e8re d'internationalisation. Cet article pr\u00e9sente des strat\u00e9gies pour r\u00e9ussir dans le domaine du multilinguisme.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"D\u00e9veloppement WordPress\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/developpement-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Guide du d\u00e9veloppeur : Rendre les th\u00e8mes WordPress multilingues\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rendre les th\u00e8mes de blocs WordPress multilingues (Guide du d\u00e9veloppeur)","description":"Les th\u00e8mes de blocs WordPress n\u00e9cessitent une approche diff\u00e9rente en mati\u00e8re d'internationalisation. Cet article pr\u00e9sente des strat\u00e9gies pour r\u00e9ussir dans le domaine du multilinguisme.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/","og_locale":"fr_FR","og_type":"article","og_title":"Guide du d\u00e9veloppeur : Rendre les th\u00e8mes WordPress multilingues","og_description":"Les th\u00e8mes de blocs WordPress n\u00e9cessitent une approche diff\u00e9rente en mati\u00e8re d'internationalisation. Cet article pr\u00e9sente des strat\u00e9gies pour r\u00e9ussir dans le domaine du multilinguisme.","og_url":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2025-08-25T06:28:39+00:00","article_modified_time":"2025-10-08T11:51:35+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","type":"image\/png"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Les th\u00e8mes de blocs WordPress n\u00e9cessitent une approche diff\u00e9rente en mati\u00e8re d'internationalisation. Cet article pr\u00e9sente des strat\u00e9gies pour r\u00e9ussir dans le domaine du multilinguisme.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","twitter_creator":"@kinsta_fr","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Jeremy Holcombe","Dur\u00e9e de lecture estim\u00e9e":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Guide du d\u00e9veloppeur : Rendre les th\u00e8mes WordPress multilingues","datePublished":"2025-08-25T06:28:39+00:00","dateModified":"2025-10-08T11:51:35+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/"},"wordCount":1726,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/","url":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/","name":"Rendre les th\u00e8mes de blocs WordPress multilingues (Guide du d\u00e9veloppeur)","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","datePublished":"2025-08-25T06:28:39+00:00","dateModified":"2025-10-08T11:51:35+00:00","description":"Les th\u00e8mes de blocs WordPress n\u00e9cessitent une approche diff\u00e9rente en mati\u00e8re d'internationalisation. Cet article pr\u00e9sente des strat\u00e9gies pour r\u00e9ussir dans le domaine du multilinguisme.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/themes-bloc-internationalisation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"D\u00e9veloppement WordPress","item":"https:\/\/kinsta.com\/fr\/sujets\/developpement-wordpress\/"},{"@type":"ListItem","position":3,"name":"Guide du d\u00e9veloppeur : Rendre les th\u00e8mes WordPress multilingues"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/80586","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=80586"}],"version-history":[{"count":10,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/80586\/revisions"}],"predecessor-version":[{"id":81234,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/80586\/revisions\/81234"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/translations\/es"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/translations\/jp"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/80586\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/80587"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=80586"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=80586"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=80586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}