{"id":233683,"date":"2023-02-20T11:58:00","date_gmt":"2023-02-20T08:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233683"},"modified":"2022-11-11T08:50:31","modified_gmt":"2022-11-11T05:50:31","slug":"tutorial-del-tema-de-wordpress-para-principiantes-parte-8-traduccion","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/tutorial-del-tema-de-wordpress-para-principiantes-parte-8-traduccion\/","title":{"rendered":"Tutorial del tema de WordPress para principiantes \u2013 Parte 8: Traducci\u00f3n"},"content":{"rendered":"\n<p>En esta lecci\u00f3n aprendemos c\u00f3mo funciona la traducci\u00f3n (o tambi\u00e9n conocida como i18n) en WordPress y c\u00f3mo hacer los ajustes necesarios en nuestras plantillas. Tambi\u00e9n aprenderemos c\u00f3mo configurar PoEdit correctamente para crear un archivo de traducci\u00f3n para nuestro tema, listo para ser traducido a diferentes idiomas.<\/p>\n<h2>\u00bfPor qu\u00e9 molestarse en agregar soporte de traducci\u00f3n?<\/h2>\n<p>Todos los temas, al menos los que se hacen p\u00fablicos para uso de otras personas adem\u00e1s del desarrollador, deben estar disponibles para su traducci\u00f3n. Esto se llama internacionalizaci\u00f3n (i18n para abreviar), y permite que las personas traduzcan los textos que agregas en tu tema a otro idioma.<\/p>\n<p>La forma en que funciona es que usted, como autor de temas o desarrollador de complementos, envuelve todos sus textos (como &quot;Leer m\u00e1s&quot;, &quot;Sin publicaciones&quot;) en ciertas funciones. Estas funciones hacen que WordPress pueda recogerlos e inyectarlos. una traducci\u00f3n si existe Dentro de su tema (o complemento) puede agregar archivos de un determinado tipo de archivo para cada idioma traducido, o asegurarse de que otras personas puedan crear su propia traducci\u00f3n en su propio idioma.<\/p>\n<p>Esto es muy \u00fatil para las personas que desean usar WordPress y su tema (o complemento) en un idioma diferente al idioma original en el que fue escrito (que generalmente es ingl\u00e9s). Pero tambi\u00e9n se puede utilizar para cambiar ciertos textos a algo diferente dentro del mismo idioma.<\/p>\n<p>Si est\u00e1 interesado en el tema, WordPress Codex tiene una larga y buena <a href=\"https:\/\/codex.wordpress.org\/I18n_for_WordPress_Developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">gu\u00eda de documentaci\u00f3n sobre i18n para desarrolladores<\/a>.<\/p>\n<h2>Implementando i18n en nuestro tema<\/h2>\n<p>Ya hicimos la primera parte en el <a href=\"http:\/\/awhitepixel.com\/blog\/wordpress-theme-tutorial-for-beginners-part-7-theme-setup-and-featured-images\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">paso anterior<\/a> de esta serie de tutoriales de temas, donde agregamos <code>load_theme_textdomain<\/code>la funci\u00f3n de configuraci\u00f3n de nuestro tema. En caso de que lo hayas olvidado, esto es lo que agregamos:<\/p>\n<pre><code>load_theme_textdomain('wptutorial', get_stylesheet_directory(). '\/lang');<\/code><\/pre>\n<p>El primer argumento es el identificador, esta es una cadena \u00fanica que usar\u00e1 para agrupar todos los textos que pertenecen a su tema. Repetir\u00e1 este identificador cada vez que haga que un texto sea traducible. El segundo argumento le dice a WordPress d\u00f3nde est\u00e1n los archivos de traducci\u00f3n. Los definimos para residir en una subcarpeta &#8216; <code>lang<\/code>&#8216; en nuestro directorio de temas.<\/p>\n<p>No se preocupe si esta carpeta no existe o no contiene ning\u00fan archivo; nada fallar\u00e1. Si WordPress no encuentra la carpeta ni los archivos de traducci\u00f3n correctos, volver\u00e1 por defecto a los textos que tenemos en el tema.<\/p>\n<p>El siguiente paso es revisar todo nuestro c\u00f3digo y encontrar cualquier resultado de texto que deba ser traducible. Es una buena pr\u00e1ctica asegurarse de cubrir absolutamente todos los textos. Nada es m\u00e1s molesto que usar un tema o un complemento en el que el autor codific\u00f3 textos que hacen que sea imposible traducirlos o cambiarlos de alguna manera.<\/p>\n<h2>C\u00f3mo hacer que los textos sean traducibles<\/h2>\n<p>Lo que hacemos con todos los textos es ponerlos dentro de una de las funciones gettext de WordPress, que normalmente son <code>_e()<\/code>o <code>__()<\/code>. El primero es un gui\u00f3n bajo con &quot;e&quot; que se usa cuando desea repetir el texto al mismo tiempo. El segundo tiene dos guiones bajos y se usa cuando no desea reproducirlo sino almacenarlo o usarlo en una variable.<\/p>\n<p>WordPress tiene m\u00e1s funciones gettext que sirven para prop\u00f3sitos m\u00e1s espec\u00edficos, por ejemplo, <code>esc_html__()<\/code>y m\u00e1s. Sin embargo, no entraremos en detalles para aquellos en este tutorial.<code>_n()``_x()<\/code><\/p>\n<p>Las funciones gettext toman dos par\u00e1metros; primero el texto en s\u00ed, y segundo el identificador que definiste en <code>load_theme_textdomain<\/code>. En este caso es &#8216; <code>wptutorial<\/code>&#8216;.<\/p>\n<p>Por ejemplo, si tienes algo como esto:<\/p>\n<pre><code>echo 'Read more';<\/code><\/pre>\n<p>Tendr\u00e1s que reemplazarlo con:<\/p>\n<pre><code>_e('Read more', 'wptutorial');<\/code><\/pre>\n<p>Y de manera similar para almacenar en una variable;<\/p>\n<pre><code>$myvariable = 'Read more';<\/code><\/pre>\n<p>Tiene que ser escrito as\u00ed:<\/p>\n<pre><code>$myvariable = __('Read more', 'wptutorial');<\/code><\/pre>\n<p>\u00a1Ahora necesitamos encontrar todos los textos en nuestras plantillas! Si has seguido este tutorial al pie de la letra, no son muchos. Tenemos algunas cadenas en <code>index.php<\/code>y algunas en <code>single.php<\/code>.<\/p>\n<h2>Agregar soporte de traducci\u00f3n en nuestro tema<\/h2>\n<p>Comencemos <code>index.php<\/code>y ubiquemos el mensaje &quot;No hay publicaciones, lo siento&quot; que agregamos si el bucle no conten\u00eda ninguna publicaci\u00f3n. Envolvemos este texto dentro <code>_e()<\/code>porque todav\u00eda queremos repetirlo. As\u00ed que esto es lo que obtenemos:<\/p>\n<pre><code>...\n} else {\n    ?&gt;&lt;p&gt;&lt;?php _e('No posts, sorry.', 'wptutorial'); ?&gt;&lt;\/p&gt;&lt;?php\n}\n...<\/code><\/pre>\n<p>Debido a que us\u00f3 <code>_e()<\/code>, no deber\u00eda ver ning\u00fan cambio cuando presiona actualizar en la p\u00e1gina principal o en el archivo. Pero bajo el cap\u00f3, \u00a1este texto ahora es traducible!<\/p>\n<p>Tenemos este mismo texto en nuestro <code>single.php<\/code>y <code>page.php<\/code>. Actual\u00edcelos de la misma manera que lo hicimos en <code>index.php<\/code>. Agregamos algunos textos m\u00e1s en <code>single.php<\/code>, as\u00ed que as\u00ed es como se ve despu\u00e9s de hacer que todos los textos sean traducibles:<\/p>\n<pre><code>...\n        &lt;?php the_category(); ?&gt;\n        &lt;p&gt;&lt;?php _e('Posted', 'wptutorial'); ?&gt;: &lt;?php the_date(); ?&gt; &lt;?php _e('at', 'wptutorial'); ?&gt; &lt;?php the_time(); ?&gt;&lt;\/p&gt;\n        &lt;p&gt;&lt;?php _e('Author', 'wptutorial'); ?&gt;: &lt;?php the_author(); ?&gt;&lt;\/p&gt;\n    &lt;\/article&gt;\n    &lt;?php endwhile;\n} else {\n    ?&gt;&lt;p&gt;&lt;?php _e('No posts, sorry.', 'wptutorial'); ?&gt;&lt;\/p&gt;&lt;?php\n}\n\u00a0\n...<\/code><\/pre>\n<p>A partir de ahora, todos los textos que agreguemos en nuestro tema nos aseguraremos de envolverlos dentro <code>__()<\/code>o <code>_e()<\/code>.<\/p>\n<h2>Archivos de traducci\u00f3n<\/h2>\n<p>Hay dos formas de proporcionar archivos de traducci\u00f3n a su tema;<\/p>\n<ul>\n<li>Proporcione un <code>.pot<\/code>archivo<\/li>\n<li>o proporcionar un par de <code>.po<\/code>y <code>.mo<\/code>archivos.<\/li>\n<\/ul>\n<p>Se <code>.pot<\/code>recomienda el archivo -para un tema que vende o regala a otros usuarios, porque con este archivo es muy f\u00e1cil generar un archivo de traducci\u00f3n para un nuevo idioma. Sin embargo, no es f\u00e1cil (ni gratis) crear uno de esos archivos. Si est\u00e1 familiarizado con WP-CLI (l\u00ednea de comandos de WordPress) o Grunt, puede seguir las pautas en <a href=\"https:\/\/codex.wordpress.org\/I18n_for_WordPress_Developers#POT_files\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la documentaci\u00f3n de WordPress aqu\u00ed<\/a>. Si no, la otra alternativa podr\u00eda ser para ti.<\/p>\n<p>Los archivos <code>.po<\/code>y <code>.mo<\/code>trabajan juntos. WordPress requiere una <code>.mo<\/code>traducci\u00f3n de textos, pero este archivo no es legible por humanos. Por lo tanto, tenemos el <code>.po<\/code>archivo que es legible para nosotros. Con el software adecuado, genera el <code>.mo<\/code>archivo cada vez que realiza cambios.<\/p>\n<p>La desventaja de los archivos <code>.po<\/code>y <code>.mo<\/code>es que necesita generar un par para cada idioma, y \u200b\u200buna vez que lo haya traducido a un idioma, no hay una manera f\u00e1cil de vaciar todas las traducciones para hacer otro idioma nuevo.<\/p>\n<p>Necesitas un programa para editar <code>.pot<\/code>y <code>.po<\/code>archivar. El m\u00e1s com\u00fan es <a href=\"https:\/\/poedit.net\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PoEdit<\/a>. PoEdit es gratuito y funciona tanto para iOS como para Windows. Pero algunas funciones avanzadas (como generar un <code>.pot<\/code>archivo) desafortunadamente requieren una versi\u00f3n paga. Usaremos la versi\u00f3n gratuita para crear un <code>.po<\/code>archivo para nuestro tema.<\/p>\n<p>Descarga e instala PoEdit para seguir el resto del tutorial.<\/p>\n<h2>Creando un archivo .po para nuestro tema con PoEdit<\/h2>\n<p>Hacer un archivo de traducci\u00f3n para ingl\u00e9s generalmente no tiene ning\u00fan sentido cuando todos los textos en nuestro tema est\u00e1n en ingl\u00e9s de todos modos, pero para los prop\u00f3sitos de este tutorial, crear\u00e9 un archivo de traducci\u00f3n al ingl\u00e9s.<\/p>\n<p>1 Abra PoEdit y haga clic en Archivo &gt; Nuevo\u2026<\/p>\n<p>2 Se le pedir\u00e1 que elija un idioma. Elija el idioma que desee, por ejemplo, ingl\u00e9s.<\/p>\n<p>3 Pulse Guardar (Ctrl+S). Localice la carpeta de su tema e ingrese la <code>\/lang\/<\/code>subcarpeta. (Si no lo cre\u00f3 en el \u00faltimo paso, cr\u00e9elo ahora). El nombre de su archivo es fundamental. Para los temas, debe nombrarse solo su c\u00f3digo de idioma. Para ingl\u00e9s americano ser\u00eda <code>en_US<\/code>, para noruego es <code>nb_NO<\/code>. B\u00fascalo en Google o consulta <a href=\"https:\/\/wpastra.com\/docs\/complete-list-wordpress-locale-codes\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">esta descripci\u00f3n general<\/a> para encontrar el c\u00f3digo de tu idioma. Lo nombraremos <code>en_US.po<\/code>.<\/p>\n<p>4 En el men\u00fa, haga clic en Cat\u00e1logo &gt; Propiedades\u2026<\/p>\n<p>5 En la primera pesta\u00f1a, puede completar cierta informaci\u00f3n, como el nombre de su proyecto (tema), o cambiar el idioma, pero no es necesario. Le recomiendo que mantenga el juego de caracteres en UTF-8 ya que esto es lo que escribimos para WordPress.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152370-61e4d69a10501.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152370-61e4d69a10501.png\" alt=\"Tutorial del tema de WordPress para principiantes \u2013 Parte 8: Traducci\u00f3n\" ><\/a><\/p>\n<p>6 Haga clic en la pesta\u00f1a Rutas de origen. Aqu\u00ed deber\u00e1 definir en qu\u00e9 carpetas debe buscar el archivo para los textos traducibles. Las rutas son relativas y, como ya lo guardamos en una subcarpeta de nuestro tema, sabemos que debe subir un directorio. Presione el bot\u00f3n + debajo del cuadro Rutas y elija Agregar carpetas. Elija su directorio de temas. Esto deber\u00eda agregar un elemento de ruta &quot;.&quot; (sube una carpeta). Vuelva a verificar que &quot;Ruta base&quot; se refiere a su directorio de tema ra\u00edz.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152370-61e4d69b261fd.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152370-61e4d69b261fd.png\" alt=\"Tutorial del tema de WordPress para principiantes \u2013 Parte 8: Traducci\u00f3n\" ><\/a><\/p>\n<p>7 Haga clic en la siguiente pesta\u00f1a, &quot;Palabras clave de fuentes&quot;. Aqu\u00ed debe decirle a PoEdit qu\u00e9 funciones ha utilizado para los textos traducibles (por ejemplo <code>__<\/code>, <code>_e<\/code>, <code>esc_html_e<\/code>etc.). Haga clic en el bot\u00f3n + para agregar cada funci\u00f3n y escr\u00edbalas sin &quot;()&quot;. Depende de usted si desea cubrir todas sus bases y agregar todas las funciones gettext de WordPress, pero en este tutorial sabemos que solo hemos usado dos. Entonces agregamos dos elementos; <code>__()<\/code>y <code>_e()<\/code>. Suma las funciones sin ning\u00fan par\u00e9ntesis.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152370-61e4d69c29a5b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152370-61e4d69c29a5b.png\" alt=\"Tutorial del tema de WordPress para principiantes \u2013 Parte 8: Traducci\u00f3n\" ><\/a><\/p>\n<p>8 Pulse Aceptar.<\/p>\n<p>9 Todo lo que queda es decirle a PoEdit que escanee las rutas proporcionadas en busca de funciones usando <code>__()<\/code>y <code>_e()<\/code>(o lo que haya proporcionado). Para ello, presione el bot\u00f3n &quot;Actualizar desde el c\u00f3digo&quot;. (La versi\u00f3n de Windows tiene el texto en el bot\u00f3n, pero la versi\u00f3n de iOS no, por lo que para iOS debe presionar el bot\u00f3n, que generalmente es el \u00faltimo en la barra de herramientas; un \u00edcono de archivo con un \u00edcono de &quot;rehacer&quot; en la parte superior. Haga clic en el bot\u00f3n &quot;Actualizar desde el c\u00f3digo&quot; y deber\u00eda ver todos los textos enumerados con una interfaz para la traducci\u00f3n:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152370-61e4d69d34b4a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152370-61e4d69d34b4a.png\" alt=\"Tutorial del tema de WordPress para principiantes \u2013 Parte 8: Traducci\u00f3n\" ><\/a><\/p>\n<p>\u00a1Agradable!<\/p>\n<h3>Archivos de traducci\u00f3n generados<\/h3>\n<p>Ahora puede usar PoEdit para traducir cada cadena, pero no lo haremos aqu\u00ed ya que no tiene sentido traducir de ingl\u00e9s a ingl\u00e9s. Recuerde presionar Guardar para actualizar y generar un <code>.mo<\/code>archivo, y cada vez que agregue otro texto en su tema, debe presionar el bot\u00f3n &quot;Actualizar desde el c\u00f3digo&quot; nuevamente. Luego aparecer\u00e1n los nuevos cambios en tus plantillas.<\/p>\n<p>Si revisa la <code>\/lang<\/code>subcarpeta en la carpeta del directorio de su tema, deber\u00eda ver dos archivos; el <code>.po<\/code>archivo que acabamos de crear y un <code>.mo<\/code>archivo con el mismo nombre, generado por nosotros al guardarlo en PoEdit.<\/p>\n<p>Puede hacer una copia del <code>en_US.po<\/code>archivo y cambiarle el nombre a un c\u00f3digo de idioma diferente. Pero recuerde que PoEdit no ofrece una forma sencilla de borrar todas las cadenas traducidas; Tendr\u00edas que borrar uno por uno. Esta es la raz\u00f3n por la que apesta para los usuarios que desean traducir su tema en un idioma diferente. Entonces, si tiene la posibilidad de crear un <code>.pot<\/code>archivo, debe hacerlo.<\/p>\n<p>WordPress buscar\u00e1 el archivo de traducci\u00f3n seg\u00fan el idioma definido en el men\u00fa de administraci\u00f3n Configuraci\u00f3n &gt; Idioma del sitio. Si agreg\u00f3 un idioma diferente al ingl\u00e9s, puede probarlo cambiando el idioma del sitio y ver si aparece su traducci\u00f3n.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aprendemos c\u00f3mo funciona la traducci\u00f3n (o i18n) en WordPress y c\u00f3mo hacer que los textos sean traducibles. Tambi\u00e9n incluye una gu\u00eda sobre el uso de PoEdit para generar archivos .po.<\/p>\n","protected":false},"author":1,"featured_media":224072,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[924,892,892,716,716,914,1110,914,924,840,840,861,861],"tags":[1172],"class_list":["post-233683","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asignaturas","category-codigo","category-desarrollador","category-otro","category-n-a","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=233683"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233683\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/224072"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}