2012-05-16 9 views
6

Używam qTranslate do Wordpress, aby moje posty na blogu były w języku angielskim, szwedzkim i niemieckim. Aktywowałem "Wykryj język przeglądarki", aby odwiedzający został przekierowany na właściwy adres URL dla języka określonego przez jego przeglądarkę.qTranslate for Wordpress nie podaje automatycznie prawidłowego języka

Więc jeśli odwiedzę blog.domain.com, zostanie przeniesiony na blog.domain.com/sv/, a moje posty na blogu w języku szwedzkim, to świetnie! Ale teraz do problemu, jeśli odwiedzę blog.domain.com ponownie po raz drugi z tego samego komputera, nie zostanie przeniesiony, a blog jest w domyślnym języku angielskim.

Czy jest coś, co robię źle tutaj? Wydaje się dziwne, że zawsze muszę określić język, potrzebuję go automatycznie w oparciu o przeglądarkę.

+0

czy chodziło Ci o to, że wcześniej było przekierowywanie, ale teraz przestało działać? – Anand

+0

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

+0

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

Odpowiedz

0

Trudno wskazać, co może być nie tak z powyższego opisu

Ewentualny błąd może być, kiedy się najpierw zalogować pacjent jest wejście z „Wykryj język przeglądarki”. I od następnego czasu pobierając go z pliku cookie. Może być coś, co poszło nie tak z tym procesem. A może wcale nie używasz ciasteczek.

Możesz zapisać ustawienie języka użytkownika, jeśli masz bazę danych logowania. Następnie zmień adres URL zgodnie z żądanym językiem wkrótce po zalogowaniu.

2

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:

  1. 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; 
    } 
    
  2. 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 :)

+0

samo tutaj, stosowane kody bez żadnego wyniku. :( qTranslate wersja 3.4.6.4 | WordPress 4.4.2 – eapo

2

znalazłem piękny .htaccess regułę, która może ustawić cookie lang tutaj: http://tips.naivist.net/2012/11/09/remembering-the-user-language-choice/

Wydaje się łatwiejsze i działa dobrze:

Wystarczy zmienić swój główny .htaccess do tego:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

# Language Cookie redirect 
RewriteCond %{REQUEST_URI} ^/$ [NC] 
RewriteCond %{HTTP_COOKIE} lang=(lang1|lang2) [NC] 
RewriteRule ^(.*)$ /%1/ [R=302,L] 

RewriteCond %{REQUEST_URI} ^/(lang1|lang2)/.*$ [NC] 
RewriteCond %{HTTP_COOKIE} !lang=%1 [NC] 
RewriteRule . - [cookie=lang:%1:.%{HTTP_HOST}:144000:/] 

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress 

w lang1 i LANG2 stał, można wstawić języki masz tłumaczenie na swojej stronie.

Powiązane problemy