Tuve el mismo problema y modifiqué qTranslate para agregar esta funcionalidad. Lo que hice fue guardar una cookie con la información del idioma, esta cookie se guarda cuando el usuario hace clic en el indicador del idioma en el widget.
Mi lógica es la siguiente:
- En el widget que muestra todos los idiomas, añada el siguiente parámetro a cada URL:? Save_lang
- Cuando existe este parámetro, guardar una cookie con el nombre 'save_lang' y value = $ lang
- Inmediatamente redirigir a la misma página, pero sin ese parámetro 'save_lang'
- Al llamar a cualquier página, en este momento qTranslate establecerá default_language en la configuración. Si existe la cookie 'save_lang', entonces voy a anular el default_language con el salvado en la cookie
Tan pocos pasos:
Modificar qtranslate_core.php archivo:
//Save the cookie if param ?save_lang is set, and then redirect to the same page without the param
add_action('qtranslate_loadConfig', 'custom_qtranslate_loadConfig');
function custom_qtranslate_loadConfig() {
global $q_config, $_COOKIE;
// By default, if the save_lang cookie is set, use that one instead
if(isset($_COOKIE['save_lang'])) {
$q_config['default_language'] = $_COOKIE['save_lang'];
}
}
// Priority 3: load after function qtrans_init (it has priority 2)
add_action('plugins_loaded', 'custom_after_qtrans_init', 3);
function custom_after_qtrans_init() {
global $q_config, $_COOKIE;
if (isset($_GET["save_lang"])) {
// cookie will last 30 days
setcookie('save_lang', $q_config['language'], time()+86400*30, $q_config['url_info']['home'], $q_config['url_info']['host']);
wp_redirect(remove_url_param("save_lang", $q_config['url_info']['url']));
exit();
}
}
function remove_url_param($param_rm, $url) {
$new_url = str_replace("?$param_rm", '', $url);
$new_url = str_replace("&$param_rm", '', $new_url);
return $new_url;
}
Modifica el archivo qtranslate_widget.php (para agregar la PARAM 'save_lang' a cada URL idioma):
Cada vez que vea esta línea:
qtrans_convertURL($url, $language)
sustituirlo por:
add_url_param(qtrans_convertURL($url, $language), "save_lang")
Y a continuación, añadir esa función:
// Function to add a parameter to a URL
function add_url_param($url, $name, $value = '') {
// Pick the correct separator to use
$separator = "?";
if (strpos($url,"?")!==false)
$separator = "&";
// Find the location for the new parameter
$insertPosition = strlen($url);
if (strpos($url,"#")!==false)
$insertPosition = strpos($url,"#");
$withValue = ($value == '' ? '' : "=$value");
// Build the new url
$newUrl = substr_replace($url,"$separator$name$withValue",$insertPosition,0);
return $newUrl;
}
Espero que este hel ps :)
¿Querías decir sa que te estaba redirigiendo antes, pero que ahora has dejado de funcionar? – Anand
El problema es que la primera vez que visito blog.domain.com desde un navegador, me redireccionan al idioma correcto, pero la segunda vez que visito blog.domain.com no me redireccionan y solo veo el blog en inglés. – Martin
¿Ha iniciado sesión por segunda vez? Parece que qtranslate maneja la detección de idioma de una manera diferente si has iniciado sesión como administrador. Tal vez también sea útil si comprueba qué cookies se configuran después de redirigirlas. – abimelex