Cambiar el idioma de su sitio de WordPress (locale) dinámicamente
Hay algunos complementos multilingües fantásticos para WordPress, sin embargo, para un proyecto de cliente, necesitaba algo mucho más flexible, ya que este cliente en particular necesitaba atender a varios países que hablaban varios idiomas.
En resumen, el cliente necesitaba poder tener una instancia multisitio que tuviera un país y un idioma configurados como predeterminados, y la capacidad de anular el país y el idioma en cada página/publicación.
Creación de un complemento multilingüe
Si suficientes personas me molestan para hacerlo, puedo considerar lanzar todo como un complemento independiente, sin embargo, el corazón del complemento multilingüe que construyo se basa en el localefiltro de WordPress, y el corazón del complemento reside en el siguiente fragmento de código:
function wholesomecode_example_redefine_locale( $locale) {
$country = get_post_meta( get_the_id(), '_wholesomecode_example_global_country_override', true );
$lang = get_post_meta( get_the_id(), '_wholesomecode_example_global_language_override', true );
if (( empty( $lang) ||! (is_page() || is_single() || is_singular()) )) {
$country = get_theme_mod( 'wholesomecode_example_multilingual_country', 'gb' );
$lang = get_theme_mod( 'wholesomecode_example_multilingual_language', 'en' );
}
if ('default' !== $country) {
$locale = $lang. '_'. strtoupper( $country );
} else {
$locale = $lang. '-'. $country;
}
return $locale;
}
add_filter( 'locale', 'wholesomecode_example_redefine_locale', 10 );
¡Tada! Su configuración regional ahora está configurada, y su sitio multilingüe ahora debería cambiar de idioma según la meta de su página/sitio.
¡Esperar! ¡Mis traducciones predeterminadas de WordPress Core no funcionan!
Este es un problema con el que me encontré, y no pude por mi vida resolverlo. Mi tema se tradujo perfectamente después de haber agregado los archivos .mo y .po relevantes, sin embargo, las traducciones predeterminadas del núcleo de WordPress (como el mensaje ‘Dejar una respuesta’ en la plantilla de comentarios) no se estaban traduciendo.
¡Resulta que la solución fue bastante simple! Aunque me había encargado de las traducciones de dominio personalizadas, me había olvidado de poner un código simple en mi tema: load_default_textdomain().
load_default_textdomain();
Si he reducido un par de horas de su depuración con ese ‘un consejo extraño’, ¡de nada!