Miałem ten sam problem i zmodyfikowałem qTranslate, aby dodać tę funkcjonalność. To, co zrobiłem, to zapisać plik cookie z informacją o języku, ten plik cookie jest zapisywany, gdy użytkownik kliknie flagę języka w widgecie.
Moja logika jest następująca:
- W widgecie wyświetlając wszystkie języki, dodaj następującą param do każdego adresu URL: save_lang
- Gdy występuje ten param, zapisz plik cookie o nazwie „save_lang” i wartość = $ lang
- Natychmiastowe przekierowanie do tej samej strony, ale bez tego parametru "save_lang"
- Podczas wywoływania dowolnej strony, teraz qTranslate ustawi język default_language na ten w ustawieniach. Jeśli istnieje plik cookie 'save_lang', wtedy będę przesłonić DEFAULT_LANGUAGE z jednego zapisanego w pliku cookie
Więc kilka kroków:
zmodyfikować qtranslate_core.php 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;
}
Zmodyfikuj plik qtranslate_widget.php (aby dodać 'save_lang' param do siebie to URL język):
każdym razem widzisz ten wiersz:
qtrans_convertURL($url, $language)
zastąpić go z:
add_url_param(qtrans_convertURL($url, $language), "save_lang")
a następnie dodać funkcja:
// 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;
}
Mam nadzieję, że ten hel ps :)
czy chodziło Ci o to, że wcześniej było przekierowywanie, ale teraz przestało działać? – Anand
Problem polega na tym, że po raz pierwszy odwiedzam blog.domain.com z przeglądarki, którą przekierowuję na właściwy język, ale po raz drugi odwiedzam blog.domain.com. Nie przekierowuję i widzę tylko angielski blog. – Martin
Jesteś zalogowany po raz drugi? Wygląda na to, że qtranslate obsługuje wykrywanie języka w inny sposób, jeśli jesteś zalogowany jako administrator. Może to również pomocne, jeśli sprawdzisz, które pliki cookie są ustawione po przekierowaniu. – abimelex