Ho avuto lo stesso problema e ho modificato qTranslate per aggiungere questa funzionalità. Quello che ho fatto è stato salvare un cookie con le informazioni sulla lingua, questo cookie viene salvato quando l'utente fa clic sulla bandiera della lingua nel widget.
La mia logica è la seguente:
- Nel widget che visualizza tutte le lingue, aggiungere il seguente parametro per ogni URL:? Save_lang
- Quando esiste questo parametro, salvare un cookie con nome 'save_lang' e value = $ lang
- reindirizzare immediatamente alla stessa pagina, ma senza che param 'save_lang'
- Quando si chiama qualsiasi pagina, in questo momento qTranslate imposterà il DEFAULT_LANGUAGE a quello nelle impostazioni. Se esiste il cookie 'save_lang', allora io ignorare il DEFAULT_LANGUAGE con quello memorizzato nel cookie
Così pochi passi:
Modifica qtranslate_core.php di file:
//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 il file qtranslate_widget.php (per aggiungere il parametro 'save_lang' ad ogni URL lingua):
Ogni volta che vedete questa linea:
qtrans_convertURL($url, $language)
sostituirla con:
add_url_param(qtrans_convertURL($url, $language), "save_lang")
E quindi aggiungere quella funzione:
// 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;
}
Spero che questo hel ps :)
intendevi dire che ti stava reindirizzando prima, ma ora aveva smesso di funzionare? – Anand
Il problema è che la prima volta che visito blog.domain.com da un browser viene reindirizzato alla lingua corretta, ma la seconda volta che visito blog.domain.com non vengo reindirizzato e vedo solo il blog inglese. – Martin
Hai effettuato l'accesso la seconda volta? Sembra che qtranslate gestisca il rilevamento della lingua in un modo diverso se hai effettuato l'accesso come amministratore. Forse è anche utile se si controlla quali cookie sono impostati dopo il reindirizzamento. – abimelex