{"id":79951,"date":"2025-08-25T08:27:04","date_gmt":"2025-08-25T06:27:04","guid":{"rendered":"https:\/\/kinqsta.com\/es\/?p=79951&#038;preview=true&#038;preview_id=79951"},"modified":"2025-10-08T13:49:52","modified_gmt":"2025-10-08T11:49:52","slug":"internacionalizacion-temas-de-bloques","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/","title":{"rendered":"Gu\u00eda para desarrolladores: C\u00f3mo hacer que los temas de bloques de WordPress sean multiling\u00fces"},"content":{"rendered":"<p>Los temas de bloques hacen que WordPress se traduzca de forma diferente a como se hace normalmente. Los archivos de plantilla PHP tradicionales con funciones de traducci\u00f3n no son compatibles con las plantillas <a href=\"https:\/\/kinqsta.com\/es\/blog\/que-es-el-html\/\">HTML<\/a>, bloques basados en JavaScript y el <a href=\"https:\/\/kinqsta.com\/es\/blog\/wordpress-edicion-sitio-completa\/\">Editor de Sitios<\/a>. Este cambio requiere que comprendas los sistemas de internacionalizaci\u00f3n de bloques de WordPress de forma diferente.<\/p>\n<p>Esta gu\u00eda proporciona estrategias para que tus temas de bloques sean multiling\u00fces. Aprender\u00e1s a superar los retos que plantea la traducci\u00f3n de temas de bloques, a implementar soluciones y a integrarlos con plugins de traducci\u00f3n.<\/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>Por qu\u00e9 los temas de bloques no son compatibles con los m\u00e9todos tradicionales de traducci\u00f3n (y c\u00f3mo resolverlo)<\/h2>\n<p>Los <a href=\"https:\/\/kinqsta.com\/es\/blog\/desarrollo-temas-de-bloques-de-wordpress\/\">temas de bloques<\/a> sustituyen muchos de los archivos PHP de WordPress por plantillas HTML que contienen marcado de bloques. Sin embargo, este cambio crea desaf\u00edos porque las plantillas HTML no pueden ejecutar funciones de traducci\u00f3n de PHP como <code>_()<\/code> o <code>_e()<\/code>. Como resultado, las cadenas de traducci\u00f3n que ya tienes quedan inutilizadas en archivos est\u00e1ticos.<\/p>\n<p><a href=\"https:\/\/kinqsta.com\/es\/blog\/wordpress-6-8\/\">WordPress 6.8<\/a> aporta algunas mejoras que simplifican la internacionalizaci\u00f3n de temas de bloques. En primer lugar, los temas con <a href=\"https:\/\/docs.sevalla.com\/applications\/reference\/http-headers\">encabezados<\/a> <strong>Text Domain<\/strong> y <strong>Domain Path<\/strong> adecuados ya no necesitan llamadas manuales \u00a0<code>manual load_theme_textdomain()<\/code>.<\/p>\n<p>En su lugar, WordPress carga autom\u00e1ticamente los archivos de traducci\u00f3n y da prioridad a <code>wp-content\/languages\/themes\/<\/code> sobre los directorios de temas por motivos de rendimiento.<\/p>\n<p>Para empezar, configura tu tema siguiendo un enfoque cl\u00e1sico, a\u00f1adiendo metadatos al archivo <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>Ten en cuenta que la cabecera <strong>Text Domain<\/strong> debe coincidir con el nombre de la carpeta de tu tema (normalmente en <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Glossary\/Kebab_case\">kebab-case<\/a>) para garantizar que los archivos de traducci\u00f3n se carguen autom\u00e1ticamente de forma correcta en las versiones recientes de WordPress.<\/p>\n<p>Al igual que <code>style.css<\/code>, tu archivo <code>functions.php<\/code> requiere una configuraci\u00f3n m\u00ednima:<\/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 diferencia clave entre los temas cl\u00e1sicos y los temas de bloques es que estos \u00faltimos dividen la responsabilidad de la traducci\u00f3n entre el PHP del servidor y el JavaScript del cliente. Por el contrario, los temas cl\u00e1sicos dependen del PHP para gestionar la mayor\u00eda de las traducciones.<\/p>\n<h2>C\u00f3mo crear traducciones en block.json<\/h2>\n<p>El archivo <a href=\"https:\/\/kinqsta.com\/courses\/gutenberg-block-development\/plugin-file-block-json-file\/\">block.json<\/a> es tu \u00abcentro de configuraci\u00f3n\u00bb para el Bloque que deseas traducir. Configurar correctamente la internacionalizaci\u00f3n garantiza que tus bloques se traduzcan correctamente tanto en el editor como en el front end.<\/p>\n<p>La <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/block-api\/block-metadata\/\" target=\"_blank\" rel=\"noopener noreferrer\">forma can\u00f3nica de registrar un Bloque<\/a> es a trav\u00e9s de <code>block.json<\/code>. Empezar con la configuraci\u00f3n <code>textdomain<\/code> significa que WordPress puede traducir los campos <strong>t\u00edtulo<\/strong>, <strong>descripci\u00f3n<\/strong> y <strong>palabras clave<\/strong> cuando se establece <code>textdomain<\/code>:<\/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>Sin embargo, los escenarios que requieren \u00abcontexto\u00bb necesitan un registro del lado del servidor. El contexto, en este caso, importa porque la misma palabra puede traducirse de forma diferente en funci\u00f3n de su uso. Por ejemplo, \u00abpost\u00bb como sustantivo frente a \u00abpost\u00bb como verbo requiere traducciones diferentes en muchos idiomas:<\/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>Las <a href=\"https:\/\/kinqsta.com\/es\/blog\/extender-bloques-del-core-de-wp\/#registering-block-variations\">variaciones de bloque<\/a> que incluyas tambi\u00e9n necesitan una denominaci\u00f3n estructurada, porque WordPress busca patrones espec\u00edficos cuando carga tus traducciones. Cada nombre de variaci\u00f3n se convierte en parte de la clave de traducci\u00f3n:<\/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>La internacionalizaci\u00f3n de JavaScript requiere que importes las <a href=\"https:\/\/developer.wordpress.org\/apis\/internationalization\/internationalization-functions\/\" target=\"_blank\" rel=\"noopener noreferrer\">funciones i18n de WordPress<\/a> y configures las traducciones de los scripts. Esto se debe a que el <a href=\"https:\/\/kinqsta.com\/es\/blog\/wordpress-edicion-sitio-completa\/\">Editor de Sitios<\/a> se ejecuta en el navegador y no en el servidor. Como las funciones de traducci\u00f3n de PHP no existen en JavaScript, WordPress proporciona funciones equivalentes a trav\u00e9s del paquete <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>Adem\u00e1s, es una buena idea generar <a href=\"https:\/\/kinqsta.com\/es\/blog\/como-traducir-un-sitio-web\/\">archivos de traducci\u00f3n<\/a> JSON para JavaScript porque WordPress utiliza un formato diferente para las traducciones del lado del cliente. PHP utiliza archivos <code>.mo<\/code>, pero JavaScript necesita archivos <code>.json<\/code> con convenciones de nomenclatura espec\u00edficas. Puedes automatizar esto utilizando comandos <a href=\"https:\/\/kinqsta.com\/es\/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>Los archivos JSON resultantes siguen un patr\u00f3n coherente: <code>{textdomain}-{locale}-{handle}.json<\/code>. WordPress puede entonces cargarlos cuando llames a <code>wp_set_script_translations()<\/code>.<\/p>\n<h2>Convertir tus plantillas HTML est\u00e1ticas en componentes PHP listos para la traducci\u00f3n<\/h2>\n<p>Dado que las plantillas HTML son est\u00e1ticas, trabajar con ellas para la internacionalizaci\u00f3n de temas de bloques es todo un reto, ya que las funciones y t\u00e9cnicas de traducci\u00f3n existentes no funcionar\u00e1n.<\/p>\n<p>Las partes de plantillas basadas en PHP podr\u00edan resolver este problema, ya que WordPress las procesa como archivos PHP a pesar de que se hacen referencia a ellas en plantillas HTML. Este enfoque h\u00edbrido mantiene la estructura del tema de Bloques al tiempo que permite contenido din\u00e1mico:<\/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>Ten en cuenta que la parte de plantilla puede contener 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>Los bloques complejos necesitan el archivo <code>render.php<\/code> porque algunos contenidos requieren un procesamiento del lado del servidor que los atributos de bloque por s\u00ed solos no pueden manejar. Las <a href=\"https:\/\/kinqsta.com\/es\/blog\/indexacion-en-mysql-mariadb\/\">consultas a la base de datos<\/a>, la <a href=\"https:\/\/kinqsta.com\/es\/blog\/visibilidad-del-bloque\/\">l\u00f3gica condicional<\/a> y la generaci\u00f3n de contenido din\u00e1mico requieren la ejecuci\u00f3n de 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>Esto significa configurar tu Bloque para que utilice el archivo de renderizado en <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>C\u00f3mo implementar la traducci\u00f3n de contenido din\u00e1mico para campos personalizados y entradas de usuario<\/h2>\n<p>Aunque el contenido din\u00e1mico es muy habitual en las webs con WordPress,\u00a0 puede causar problemas al traducirlo, puesto que se encuentra en la base de datos en lugar de en los archivos del tema. Por ello, cualquier <a href=\"https:\/\/kinqsta.com\/es\/socios\/weglot\/\">plugin de traducci\u00f3n de terceros<\/a> que utilices debe identificar y gestionar este contenido por separado de las cadenas est\u00e1ticas del tema.<\/p>\n<p>Aqu\u00ed es donde resulta \u00fatil <a href=\"https:\/\/kinqsta.com\/es\/blog\/advanced-custom-fields\/\">registrar campos personalizados<\/a> con la configuraci\u00f3n meta adecuada, ya que los plugins de traducci\u00f3n se conectan al sistema meta de WordPress para detectar cualquier contenido traducible. El par\u00e1metro <code>show_in_rest<\/code> permite la compatibilidad con el Editor de Sitios:<\/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>Las consultas a la base de datos tambi\u00e9n necesitan un filtrado por idioma porque WordPress no filtra autom\u00e1ticamente el contenido por idioma. Los plugins de traducci\u00f3n a\u00f1aden modificaciones a las consultas que debes tener en cuenta:<\/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>El <a href=\"https:\/\/kinqsta.com\/es\/blog\/formularios-registro-wordpress\/\">procesamiento de formularios<\/a> mezcla contenido din\u00e1mico y est\u00e1tico, pero las etiquetas de los formularios, los mensajes de error y las notificaciones administrativas deben traducirse teniendo en cuenta el idioma. Los destinatarios del correo electr\u00f3nico tambi\u00e9n pueden variar seg\u00fan el idioma:<\/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>Tambi\u00e9n es importante evaluar el conocimiento de idiomas de tu navegaci\u00f3n, porque los elementos del men\u00fa, las URLs y la estructura pueden diferir entre idiomas. Es probable que tu plugin de traducci\u00f3n tenga una API para crear selectores de idioma:<\/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>Es probable que trabajar con plugins de traducci\u00f3n ocupe una gran parte de tu trabajo, as\u00ed que vamos a ver este aspecto a continuaci\u00f3n.<\/p>\n<h2>Trabajar con plugins de traducci\u00f3n: compatibilidad y optimizaci\u00f3n<\/h2>\n<p>Cada plugin de traducci\u00f3n de WordPress gestiona los temas de bloques de una forma \u00fanica. Comprender los enfoques que adoptan las distintas soluciones te ayuda a crear compatibilidad y flexibilidad desde el principio.<\/p>\n<p>La documentaci\u00f3n de WPML sobre la <a href=\"https:\/\/kinqsta.com\/es\/blog\/wordpress-edicion-sitio-completa\/\">Edici\u00f3n Completa del Sitio<\/a> describe c\u00f3mo se necesita una configuraci\u00f3n espec\u00edfica para los temas de bloques:<\/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 es compatible con el Editor de Sitios desde la versi\u00f3n 3.2. El plugin gestiona los <a href=\"https:\/\/kinqsta.com\/es\/blog\/desarrollo-temas-de-bloques-de-wordpress\/\">temas de bloques<\/a> a trav\u00e9s de su interfaz est\u00e1ndar de traducci\u00f3n de cadenas:<\/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\">documentaci\u00f3n de TranslatePress<\/a> muestra que ciertos elementos din\u00e1micos necesitan ser excluidos para un rendimiento \u00f3ptimo:<\/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>Tambi\u00e9n puedes considerar <a href=\"https:\/\/multilingualpress.org\/\">MultilingualPress<\/a> que funciona de manera diferente utilizando WordPress Multisitio. Cada idioma se ejecuta como su propio sitio con su propio tema de bloques, por lo que no se requiere una capa de traducci\u00f3n adicional ni una configuraci\u00f3n especial. Este enfoque mantiene la rapidez y evita el bloqueo de plugins, ya que todo se basa en la internacionalizaci\u00f3n del n\u00facleo de WordPress.<\/p>\n<p>Por \u00faltimo, hay algunos consejos generales que conviene tener en cuenta al trabajar con c\u00f3digo de terceros (como plugins). En primer lugar, aseg\u00farate de utilizar un <a href=\"https:\/\/kinqsta.com\/es\/blog\/depuracion-wordpress\/\">enfoque sistem\u00e1tico para depurar<\/a> los problemas de traducci\u00f3n.<\/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>El <a href=\"https:\/\/kinqsta.com\/es\/blog\/edge-caching\/\">almacenamiento en cach\u00e9 del sitio<\/a> puede interferir con las actualizaciones de traducci\u00f3n, por lo que te conviene borrar los cach\u00e9s cuando cambien los archivos de traducci\u00f3n:<\/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>La optimizaci\u00f3n del rendimiento se vuelve cr\u00edtica con los plugins de traducci\u00f3n. Cada plugin a\u00f1ade consultas a la base de datos y sobrecarga de procesamiento, lo que de nuevo se beneficia del almacenamiento en cach\u00e9 de las traducciones utilizadas con frecuencia:<\/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>Como alternativa, puede resultar conveniente omitir el cach\u00e9 hasta que est\u00e9 listo para el Despliegue. Para ello, lo ideal es utilizar un <a href=\"https:\/\/kinqsta.com\/es\/docs\/alojamiento-wordpress\/entorno-staging\/\">entorno staging<\/a>, en el que normalmente no ser\u00e1 necesario el aumento de rendimiento que proporciona el cach\u00e9.<\/p>\n<h2>Resumen<\/h2>\n<p>La internacionalizaci\u00f3n de temas de bloques requiere que trabajes con los m\u00e9todos de traducci\u00f3n de WordPress y utilices nuevos enfoques dentro del Editor del Sitio.<\/p>\n<p>Al configurar los metadatos de tu tema, implementar estrategias de plantillas y comprender los requisitos de los plugin de traducci\u00f3n, podr\u00e1s crear temas de bloques multiling\u00fces que funcionen bien y ofrezcan una experiencia de usuario de alta calidad.<\/p>\n<p>Cuando est\u00e9s listo para lanzar tu sitio web, el <a href=\"https:\/\/kinqsta.com\/es\/wordpress-hosting\/\">alojamiento administrado para WordPress<\/a> de Kinsta te ofrece el rendimiento y el alcance global que tu sitio necesita, con cach\u00e9 integrado, una <a href=\"https:\/\/kinqsta.com\/es\/docs\/servicio-de-informacion\/ubicaciones-de-los-centros-de-datos\/\">red de distribuci\u00f3n de contenido (CDN) con 37 ubicaciones<\/a> y herramientas como la integraci\u00f3n con Git y <a href=\"https:\/\/kinqsta.com\/es\/docs\/alojamiento-wordpress\/entorno-staging\/\">staging<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los temas de bloques hacen que WordPress se traduzca de forma diferente a como se hace normalmente. Los archivos de plantilla PHP tradicionales con funciones de &#8230;<\/p>\n","protected":false},"author":199,"featured_media":79952,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1345],"class_list":["post-79951","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-desarrollo-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>C\u00f3mo Hacer que los Temas de Bloques de WordPress sean Multiling\u00fces (Gu\u00eda para Desarrolladores)<\/title>\n<meta name=\"description\" content=\"Los temas de bloques de WordPress requieren un enfoque diferente para la internacionalizaci\u00f3n. \u00a1En esta publicaci\u00f3n se comparten estrategias para lograr el \u00e9xito multiling\u00fce!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gu\u00eda para desarrolladores: C\u00f3mo hacer que los temas de bloques de WordPress sean multiling\u00fces\" \/>\n<meta property=\"og:description\" content=\"Los temas de bloques de WordPress requieren un enfoque diferente para la internacionalizaci\u00f3n. \u00a1En esta publicaci\u00f3n se comparten estrategias para lograr el \u00e9xito multiling\u00fce!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-25T06:27:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-08T11:49:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Los temas de bloques de WordPress requieren un enfoque diferente para la internacionalizaci\u00f3n. \u00a1En esta publicaci\u00f3n se comparten estrategias para lograr el \u00e9xito multiling\u00fce!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Gu\u00eda para desarrolladores: C\u00f3mo hacer que los temas de bloques de WordPress sean multiling\u00fces\",\"datePublished\":\"2025-08-25T06:27:04+00:00\",\"dateModified\":\"2025-10-08T11:49:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/\"},\"wordCount\":1586,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\",\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/\",\"url\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/\",\"name\":\"C\u00f3mo Hacer que los Temas de Bloques de WordPress sean Multiling\u00fces (Gu\u00eda para Desarrolladores)\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\",\"datePublished\":\"2025-08-25T06:27:04+00:00\",\"dateModified\":\"2025-10-08T11:49:52+00:00\",\"description\":\"Los temas de bloques de WordPress requieren un enfoque diferente para la internacionalizaci\u00f3n. \u00a1En esta publicaci\u00f3n se comparten estrategias para lograr el \u00e9xito multiling\u00fce!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desarrollo WordPress\",\"item\":\"https:\/\/kinqsta.com\/es\/secciones\/desarrollo-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Gu\u00eda para desarrolladores: C\u00f3mo hacer que los temas de bloques de WordPress sean multiling\u00fces\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/es\/#website\",\"url\":\"https:\/\/kinqsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"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:\/\/kinqsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/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:\/\/kinqsta.com\/es\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo Hacer que los Temas de Bloques de WordPress sean Multiling\u00fces (Gu\u00eda para Desarrolladores)","description":"Los temas de bloques de WordPress requieren un enfoque diferente para la internacionalizaci\u00f3n. \u00a1En esta publicaci\u00f3n se comparten estrategias para lograr el \u00e9xito multiling\u00fce!","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:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/","og_locale":"es_ES","og_type":"article","og_title":"Gu\u00eda para desarrolladores: C\u00f3mo hacer que los temas de bloques de WordPress sean multiling\u00fces","og_description":"Los temas de bloques de WordPress requieren un enfoque diferente para la internacionalizaci\u00f3n. \u00a1En esta publicaci\u00f3n se comparten estrategias para lograr el \u00e9xito multiling\u00fce!","og_url":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2025-08-25T06:27:04+00:00","article_modified_time":"2025-10-08T11:49:52+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","type":"image\/png"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Los temas de bloques de WordPress requieren un enfoque diferente para la internacionalizaci\u00f3n. \u00a1En esta publicaci\u00f3n se comparten estrategias para lograr el \u00e9xito multiling\u00fce!","twitter_image":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tiempo de lectura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Gu\u00eda para desarrolladores: C\u00f3mo hacer que los temas de bloques de WordPress sean multiling\u00fces","datePublished":"2025-08-25T06:27:04+00:00","dateModified":"2025-10-08T11:49:52+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/"},"wordCount":1586,"publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/","url":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/","name":"C\u00f3mo Hacer que los Temas de Bloques de WordPress sean Multiling\u00fces (Gu\u00eda para Desarrolladores)","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","datePublished":"2025-08-25T06:27:04+00:00","dateModified":"2025-10-08T11:49:52+00:00","description":"Los temas de bloques de WordPress requieren un enfoque diferente para la internacionalizaci\u00f3n. \u00a1En esta publicaci\u00f3n se comparten estrategias para lograr el \u00e9xito multiling\u00fce!","breadcrumb":{"@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#primaryimage","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2025\/08\/developer-guide-making-wordpress-block-themes-multilingual.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/es\/blog\/internacionalizacion-temas-de-bloques\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Desarrollo WordPress","item":"https:\/\/kinqsta.com\/es\/secciones\/desarrollo-wordpress\/"},{"@type":"ListItem","position":3,"name":"Gu\u00eda para desarrolladores: C\u00f3mo hacer que los temas de bloques de WordPress sean multiling\u00fces"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/es\/#website","url":"https:\/\/kinqsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","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:\/\/kinqsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/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:\/\/kinqsta.com\/es\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/79951","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/comments?post=79951"}],"version-history":[{"count":15,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/79951\/revisions"}],"predecessor-version":[{"id":80493,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/79951\/revisions\/80493"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/translations\/es"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/translations\/jp"},{"href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/79951\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media\/79952"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media?parent=79951"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/tags?post=79951"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/topic?post=79951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}