Cómo cambiar de idioma en WordPress “sobre la marcha”

3 minutos de lectura

avatar de usuario
Javier

¿Hay alguna manera como switch_to_blog() para cambiar el idioma en WordPress.

Algo como

global $locale
$currentLanguage = $locale;
switch_to_language('de_DE');

//do some action with german localisation

switch_to_language($currentLanguage);

¿Es esto posible en general con WordPress?

avatar de usuario
Javier

Así que finalmente encontré la solución. La función se llama load_textdomain()

Así es como se hace de mi lado. Tener en cuenta para definir LANGUAGE_PATH y el idioma al que le gustaría cambiar en $new_language. $your_domain es el dominio de texto de su plugin/tema

//will output "Good Morning"
_e('Good Morning', $your_domain);

global $locale;
//save the current language for later
$current_language = $locale;
$new_language="DE_de";

//load the new text domain
load_textdomain( $your_language_domain, LANGUAGE_PATH."https://stackoverflow.com/".$your_domain.'-'.$new_language.'.mo' );

//do some action with the new localisation
//will output "Guten Morgen"
_e('Good Morning', $your_domain);

//go back to the previous language
load_textdomain( $your_language_domain , LANGUAGE_PATH."https://stackoverflow.com/".$your_domain.'-'.$current_language.'.mo' );

Tomó un tiempo encontrar este método en el núcleo. Lea más sobre esa función en el sitio del códice

  • ¿Sabes si esto todavía funciona? No puedo hacer que funcione yo mismo. Tengo un sitio en sueco donde cada cadena de texto se ejecuta a través de _e() o __() en inglés. En ciertas publicaciones/páginas, me gustaría mostrar todo el texto en inglés en lugar de en sueco, así que solo intento hacer lo que hiciste arriba, pero el resultado no cambia. ¿Estoy usando un tema infantil si eso cambia las cosas?

    – boya de energía

    12/09/2017 a las 10:52

  • Parece que no funciona si vuelves a cambiar a en_US. podrías cambiar $your_domain a una cadena aleatoria para que la traducción no se registre y use el respaldo – Inglés

    – Javier

    13 de septiembre de 2017 a las 12:13

  • De hecho, así es como terminé resolviéndolo: P. No es perfecto, y obviamente solo funciona para inglés, pero al menos funciona por ahora.

    – boya de energía

    13/09/2017 a las 14:40

Me temo que vas a necesitar un complemento para eso. WordPress no hace eso fuera de la caja. WPML suele ser el complemento multilingüe para WordPress, debería comprobarlo 🙂

  • Pero, ¿cómo lo hace un complemento? en realidad no necesito el switch_to_language() función. Si solo cambio el global $ local, no funciona

    – Javier

    21 de junio de 2013 a las 8:52

  • No puede cambiar una constante definida; eso no va a funcionar Puede cambiar la variable de configuración regional después de eso con el filtro ‘configuración regional’. Mira aquí: wordpress.stackexchange.com/questions/52419/…

    – LucP

    24/06/2013 a las 21:20


  • revisa mi respuesta final. Así es como lo hice y cómo funciona. Solo tengo que cambiar el idioma temporalmente y no para toda la solicitud.

    – Javier

    27 de junio de 2013 a las 13:59

  • Puede usar add_filter para cambiar el idioma y luego remove_filter para volver al predeterminado…

    – LucP

    27 de junio de 2013 a las 20:18

  • no cuando ya se aplicó el filtro, que es en mi caso

    – Javier

    28 de junio de 2013 a las 8:20

¿Ha sido útil esta solución?