Polylang, cómo introducir tus propias cadenas de texto

Traducir cadenas de texto en polylang

Polylang es un plugin de WordPress para páginas multilingües que reporta beneficios de cara al SEO de tu web gracias a que su forma de funcionar es replicando las páginas y las entradas una vez para cada idioma consiguiendo así que éstas posean una url propia cada una.

Además si es necesario modificar algo en el contenido será menos farragoso ir directamente a la página o entrada concreta a editar y no tener que bucear hasta dar con el fragmento de texto o la etiqueta que identifica el idioma como sucedía en otros plugins.

Pero a veces no necesitamos crear una página entera sino simplemente una cadena de texto para maquetar nuestro tema. Esto será muy fácil con estas dos funciones propias de Polylang:

Función de polylang: pll_register_string()

Primero en el archivo functions.php de nuestro tema wordpress añadimos la función

pll_register_string( $name, $string, $group, $multiline);

Tendremos que añadir esta función una vez por cada cadena que queramos traducir y funciona tal que así:
$name      => (parametro obligatorio) el nombre que le damos a la cadena
$string      => (parametro obligatorio) la cadena que queremos traducir (no ha de ser completa, puede ser una referencia pero ¡cuidado! porque en ese caso habrá que vigilar no repetirla)
$group      => (parámetro opcional) el grupo en el que registramos la cadena, por defecto ‘polylang’
$multiline => (parámetro opcional) si ponemos el valor true, el campo para el texto será más grande, por defecto su valor es false

Un ejemplo de uso:
/***** Cadenas a traducir con polylang *****/
pll_register_string("Contacta", "Contacta con nosotros", "Footer");

Cuando guardemos el archivo functions.php podemos ir a Ajustes > Idioma > Traducción de cadenas y nos encontraremos con una tabla como la siguiente donde podemos modificar las traducciones de nuestras cadenas.
Cadenas de texto en polylang

Función de polylang: pll__()

Para después llamar a las traducciones de estas cadenas en nuestra maquetación es tan sencillo como  pasar la cadena a la función pll__($string);


<?php echo pll__("Contacta con nosotros"); ?>

 

¡Compartir mola!Share on Facebook0Share on Google+0Share on LinkedIn0Tweet about this on TwitterBuffer this pageEmail this to someone

24 comentarios sobre “Polylang, cómo introducir tus propias cadenas de texto

  1. Hola

    Soy un tanto nuevo con wordpress y no conozco mucho el lenguaje Php me podría mostrar como queda la función entera en el archivo functions.php y donde se ubica

    De antemano muchas gracias

    1. Hola, James

      es bastante sencillo, tienes que acceder a tu archivo functions.php y una vez ahí bajas hasta el final del archivo.

      Metes un par de saltos de línea y pegas lo siguiente:

      /***** Cadenas a traducir con polylang *****/
      pll_register_string("Texto que quieres traducir", "Texto que quieres traducir");

      Obligatorios sólo son esos dos primeros parámetros y para ahorrarte complicación simplemente pones los mismo dos veces.

      Después en el archivo donde quieras mostrar esa cadena de texto (p.e.: single.php, home.php, page.php, …) pegas lo siguiente:

      < ?php echo pll__("Texto que quieres traducir"); ?>

      Hechos estos dos pasos vas a la administración de tu wordpress y entras en Ajustes > Idioma > Traducción de cadenas

      Ahí tienes todas las cadenas a traducir, entre ellas estará Texto que quieres traducir con un recuadro para la traducción en cada idioma. Después de rellenar las traducciones, guardas los cambios.

      Y listo. Cuando cambies de idioma aparecerá la cadena traducida.

      Espero haberte ayudado.

      Un saludo.

  2. Muchas Gracias n_n tengo otra duda, sabe como podría encontrar una cadena de texto generada por un widget o por la pagina, o todas las cadenas en general.

    Por que con el archivo po no las encuentro

    Es que el sitio en el que trabajo es de una sola pagina y hay muchas cadenas de texto que polylang no detecta ¿con este proceso se podrían editar esas cadenas?

    Este es el link de la pagina en la que estoy trabajando : http://www.legacysupplementsllc.com

    Muchas gracias y disculpe lo intenso jaja 😀

    1. Hola de nuevo, James

      si no las encuentras en el archivo .po ni tampoco en Ajustes > Idioma > Traducción de cadenas es posible que estén metidas directamente en los archivos, en cuyo caso sólo tienes que crear tus propias frases para traducir con polylang y reemplazarlas en los archivos por la función pll__(“string”) correspondiente.

      Un saludo.

  3. ¡Muy buenas!

    Tengo un pequeño problemilla con el polylang a ver si me puedes echar un cable, en este caso es con la traducción de cadenas, me aparecen las cadenas a traducir con su campo correspondiente en inglés. Introduzco el valor en inglés y guardo los cambios.

    Pero al realizar el cambio de idioma, es un “header_number” y otro “footer_text” no me realiza el cambio de string.

    Por cierto, este código ¿Dónde tendría que ponerlo?

    Un saludo, Javi
    ¿Alguna idea?

  4. ¡Hola, Javier!

    ¿Puedes decirme una url donde pueda ver el problema?

    Este código es para utilizarlo en el código php de wordpress.

    Un saludo.

  5. Muy buenos dias! Una duda por si me puedes aconsejar.
    En una web usamos polylang. Me va perfecto para tener las urls separadas para español e inglés, pero el template usa “testimonios”, y esos testimonios no se pueden duplicar para el inglés, por ejemplo.
    Solo aparecen en un único idioma, y no deja duplicarse para el inglés.
    ¿Como podría hacer para que se pueda poner el texto en cada idioma? Ten en cuenta que el cliente final no suele acceder al php como para cada vez que quiera poner un testimonio, hacerlo via programacion.
    Se que con wpml por ejemplo, podia poner [wmpl-string] y se creaba la cadena, pero..
    ¿Puedo hacer algo similar con polylang? Actualmente solo me detecta los widgets, y algunos elementos del wordpress en general, pero no los testimonials

    Muchas gracias por tu tiempo!

    1. Buenos días, Javier

      me imagino que ese “testimonios” será un Custom post type, entonces si mirás en los ajustes del plugin

      Ajustes > Idiomas > Ajustes

      Ahí tienes un apartado que es “Tipos de entradas personalizados y taxonomías“.

      Dentro deberías poder activar que el polylang también funcione con “testimonios”.

      Un saludo.

  6. Saludos Autor.

    Me interesa saber cómo puedo insertar cadenas de texto personalizado a mis archivos del Theme. Entiendo lo que .MO y .PO, pero hay texto personalizado que no trae el Theme, por ejemplo, los Campos de BuddyPress no son traducibles por PolyLang por defecto, así que supongo que añadiendo las String sería posible. Pero No se como hacerlo.

  7. Hola Josu.
    Abusando de tu amabilidad, te expongo una duda.
    Tengo una traduccion con polylang que no estoy solucionando.

    he incluido en functions: pll_register_string(“Todos los Derechos Reservados”, “Todos los Derechos Reservados”, “Footer”);
    Al hacerlo, el admin ciertamente me reconoce en Idiomas / traduccion de cadenas, esa traducción, y me da la opcion de poner su version en castellano.

    pero ahora tengo que ubicarlo en el sitio que quiero que traduzca, pero es parte de las opciones del theme, o sea, se controla en la parte del administrador donde se pone el tipico ttexto para el footer, por lo que no se ponerle que sustituya el texto a pelo que viene “Todos los Derechos Reservados” por la cadena que se use para que se traduzca.
    o sea, se que con php puedo usando pero en esa caja no coge php.
    Creo que html si. Como seria para poner esa cadena pero con html? factible?

    muchas gracias!

    1. Buenas, Javier!

      Pues me temo que no es factible. Las opciones del tema que se pueden rellenar no siempre aceptan html y de todas formas no te serviría.
      Tendrías que modificar el código de footer.php y antes de meterte en eso te recomiendo que hagas un tema hijo.

      No es muy complicado, con este tutorial de ayudawordpress deberías poder hacerlo fácilmente: Como crear un tema hijo en WordPress.

      Una vez tengas tu tema hijo, copias y pegas el archivo footer.php del tema padre.
      Ahí ya modificas donde esté la llamada a ese texto que quieres cambiar por
      echo pll__(“Todos los Derechos Reservados”);

      Y listo.

      Un saludo.

  8. Muchas gracias! si, me olía que iban a ir por ahí los tiros…
    lo hago, si veo que me da quebraderos, lo dejo en blanco y tiro de widget.
    me he empecinado en usar el theme traduciendo todo, pero a veces no se puede todo.

    Oye, que muchas gracias. Un abrazo!

  9. Buenas tardes soleguia,
    No quisiera abusar de tu amabilidad, pero quizás podrías darme pistas sobre un problema. Estoy haciendo una web en dos idiomas, catalán y castellano. En la ficha de traducción de cadenas, me aparece una cadena html que he introducido en el footer, la traduzco y guardo los cambios pero en la página sigue apareciendo solo en el primer idioma, es como si no se guardaran las modificaciones. ¿Alguna idéa de dónde mirar?

    Muchas gracias

    1. ¿Te has asegurado si esa cadena de texto aparece en algún sitio más?

      Podría ser que la estés traduciendo correctamente pero se vea en otro sitio y por eso no cambia.

      Siempre puedes ir a Apariencia > Editor y buscar el archivo footer.php para comprobar si está llamando a la función pll__(‘cadena-a-traducir’)

      Un saludo.

      1. Hola de nuevo Soleguia.

        En primer lugar, muchas gracias por tu rápida respuesta.

        No, no aparece esta función en el archivo footer.php y tampoco aparece en ningún otro sitio que yo haya visto. Entiendo que debe aparecer tal cual y que debo substituir ‘cadena-a-traducir’ ¿por el nombre de la cadena o por la cadena en alguno de los idiomas?

        Gracias de nuevo

        1. Efectivamente, en “Traducciones de cadenas” de Polylang, hay una columna Nombre.

          El nombre de la frase que quieres es lo que tienes que poner en la función pll__( ‘nombre’ )

          Después insertar en el archivo footer.php

          < ?php echo pll__( 'nombre-de-la-cadena' ); ?>

          Donde quieras la cadena texto que se tiene que traducir.

          Un saludo.

  10. Hola de nuevo Soleguia

    Nada, que no hay manera he introducido el código pero sigue sin funcionar. Me traduce todas las cadenas excepto esta. ¿Sabes en que tabla de la base de datos almacena las cadenas traducidas?

    Gracias una vez más.

    1. Buenas,

      pues es bastante extraño.

      ¿Puedes tener algún plugin de caché que pueda estar interfiriendo?

      ¿O has probado a crear esa cadena específica como explico en el post?

      Un saludo.

  11. Hola de nuevo Soleguia,

    Toda la mañana con ello y sin hallar solución. A ver si el fin de semana me ilumina.

    Gracias Josu.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *