Cómo cambiar el idioma solo para el front-end en WordPress
He instalado un tema de WordPress, puedo ver los archivos .mo y .po en /public_html/wp-content/themes/nombredeltema/lang
, el idioma que quiero usar está disponible.
¿Podrías aconsejarme sobre cómo usar un idioma específico? No quiero cambiar el idioma del administrador, solo el idioma del tema.
En realidad, no necesitas nada especial para tener dos idiomas diferentes en el backend y en el frontend. Acabo de probarlo nuevamente en WordPress 5.1:
Ve a
Ajustes
y configura elIdioma del sitio
al idioma del frontend, por ejemplo, alemán, luego guarda.Dirígete a
Usuarios
y haz clic en editar en tu cuenta de administrador. Allí puedes configurar elIdioma
a inglés y guardar. Eso es todo. Tu frontend usará alemán como base y el backend estará en inglés.

Si alguien aún está buscando esto, aquí está lo que deberías hacer desde la versión 4.7
function wp_noshor_redefine_locale($locale) {
if( is_admin() ):
switch_to_locale('en_US');
endif;
}
add_filter('init','wp_noshor_redefine_locale');
Esto fuerza que el panel de control se cargue en inglés, luego puedes ir a ajustes y establecer el idioma que desees.

En realidad, me refiero a ¿cómo puedo activar un idioma específico para el tema?

Esto sucede automáticamente cuando locale
coincide con un archivo de traducción existente.

Disculpa la molestia ya que soy nuevo en WP, pero ¿cómo puedo hacer que locale coincida con el archivo de traducción?

Al agregar el código anterior a un plugin o al archivo functions.php
de tu tema.

Solo quiero cambiar el idioma del front-end a árabe, no el back-end (mi panel de administración de WordPress), es decir, solo el idioma de mi tema. Entonces, si entendí bien: debo modificar el functions.php de mi tema y agregar lo siguiente:is_admin() or add_filter( 'locale', function() { return 'ar-AR'; });

Creo que tu opción más sencilla sería actualizar tu instalación utilizando la versión localizada de WordPress para tu idioma nativo (y asegurándote de que WPLANG
permanezca configurado correctamente), y luego usar un plugin como:
... para cambiar únicamente la interfaz de administración al inglés.

Aquí está la solución completa y mejorada para cambiar solo el idioma del tema (front-end) o del plugin. Incluso funciona para cambiar el idioma de una página/entrada específica, etc.
Resumen rápido; Existe un filtro llamado locale
que determina qué idioma cargar. Puedes cambiarlo al idioma específico que prefieras basándote en las condiciones que establezcas.
Cambiar solo el idioma del Tema, o basado en otras condiciones, sin afectar el idioma del escritorio de administración.
add_filter('locale', function($locale) {
if( is_admin() ) {
return $locale; // Mantener el idioma por defecto si es el área de administración.
}
// Puedes cargar el idioma basado en cualquier condicional aquí, como is_page(), is_singular(), is_archive() etc.
// En este ejemplo particular, quiero cambiar el idioma para todo el front-end.
$locale = 'es_ES'; // Cambia al idioma que necesites. El idioma debe estar instalado y cargado.
return $locale; // Devuelve el idioma a utilizar.
});
Antes de cambiar el idioma, quizás necesites cargar ese idioma primero.
En tu tema o tema hijo, carga el idioma personalizado usando este fragmento de código.
add_action( 'after_setup_theme', function() {
// Asumiendo que tus archivos de idioma están en /wp-content/themes/tu-tema/languages
// No olvides cambiar 'text-domain' por el text-domain de tu tema.
// Para el Tema.
load_theme_textdomain( 'text-domain', get_template_directory() . '/languages' );
// Para el Tema Hijo
load_child_theme_textdomain( 'text-domain', get_stylesheet_directory() . '/languages' );
// Elimina load_child_theme_textdomain si lo estás usando para el tema principal,
// O elimina load_theme_textdomain si estás cargando el idioma del tema hijo.
});
De manera similar, puedes cambiar el idioma basado en la URL, o para la página de tu plugin, etc.
Espero que ayude. O déjame saber si me faltó algo.

Aquí tienes un fragmento de código de ejemplo que puedes usar para cambiar el idioma dinámicamente en WordPress:
add_filter('locale', 'change_user_lang');
function change_user_lang($locale)
{
if (is_admin()) return 'en_US'; // establece el idioma del administrador en inglés
// tu lógica personalizada de idioma aquí, por ejemplo:
// if (alguna condición) return 'fr_FR'; // establece el idioma en francés
// if (alguna otra condición) return 'de_DE'; // establece el idioma en alemán
return $locale; // devuelve el idioma original si no se cumplen las condiciones
}

También puedes probar esto:
1. Descarga el script de traducción jQuery desde este enlace
2. Cómo funciona ( documentación, prueba en vivo )
<?php
function ravs_frontend_translate_script() {
wp_enqueue_script( 'translate', get_template_directory_uri() . '/js/jquery.translate.js', array( 'jquery' ), '0.0.1', true );
}
add_action( 'wp_enqueue_scripts', 'ravs_frontend_translate_script' );
function ravs_translate_webpage_fx(){
?>
<script>
// ejecutar script después de cargar ambos scripts para traducir la página web
jQuery(document).ready(function(){
//de inglés a alemán:
jQuery('body').translate( 'ar' );
});
</script>
<?php
add_action('wp_footer','ravs_translate_webpage_fx', 999 ); // asegurarse de que este hook se ejecute después de incluir jquery-translate en la página web

¿Pero eso no es usar Google para traducir la página, en lugar de usar los archivos .po que ya tiene?
