2012-05-16 8 views
6

Я использую qTranslate для Wordpress, чтобы иметь свои сообщения в блогах на английском, шведском и немецком языках. Я активировал «Определить язык браузера», чтобы посетитель был перенаправлен на правильный URL-адрес для языка, указанного в его браузере.qTranslate для Wordpress не дает мне правильный язык

Так что если я посетил blog.domain.com, я перейду на blog.domain.com/sv/, а мои сообщения в блогах на шведском языке, это здорово! Но теперь к проблеме, если я снова заеду на blog.domain.com во второй раз с того же компьютера, я не получаю передачу, а сообщение в блоге по-английски по-английски.

Есть ли что-то, что я делаю неправильно здесь? Кажется странным, что мне всегда нужно указывать язык, мне нужно, чтобы он был автоматически основан на браузере.

+0

Вы имели в виду, что вы перенаправляли вас раньше, но теперь перестали работать? – Anand

+0

Проблема в том, что в первый раз, когда я посещаю blog.domain.com из браузера, я перенаправляюсь на правильный язык, но во второй раз посещаю blog.domain.com. Я не перенаправляюсь и просто вижу английский блог. – Martin

+0

Вы вошли во второй раз? Кажется, что qtranslate обрабатывает обнаружение языка по-другому, если вы вошли в систему как администратор. Возможно, это также полезно, если вы проверите, какие файлы cookie устанавливаются после перенаправления. – abimelex

ответ

0

Трудно указать, что может быть плохого в приведенном выше описании

Возможная ошибка может быть при входе сначала принимают входной сигнал от «Detect Browser Language». И со следующего раза извлекая его из файла cookie. Возможно, что-то случилось с этим процессом. Или вы не можете использовать файлы cookie вообще.

Вы можете сохранить языковой язык пользователя, если у вас есть база данных входа. Затем измените URL-адрес в соответствии с желаемым языком, как только они войдут в систему.

2

У меня была такая же проблема, и я изменил qTranslate, чтобы добавить эту функциональность. Я сделал, чтобы сохранить файл cookie с информацией о языке, этот файл cookie сохраняется, когда пользователь нажимает на флаг языка в виджетах.

Моя логика такова:

  • В виджете отображается все языки, добавьте следующие параметры для каждого URL: save_lang
  • Когда пары существуют, сохранить печенье с именем «save_lang» и value = $ lang
  • Сразу же перенаправить на ту же страницу, но без этого параметра 'save_lang'
  • При вызове любой страницы прямо сейчас qTranslate установит для файла по умолчанию значение, указанное в настройках. Если печенье 'save_lang', то я перекроет default_language с одной сохраненной в куки

Так несколько шагов:

  1. Modify qtranslate_core.php файл:

     //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. Изменить файл qtranslate_widget.PHP (добавить 'save_lang' параметров для каждого это язык URL):

Каждый раз, когда вы видите эту строку:

qtrans_convertURL($url, $language) 

заменить его:

add_url_param(qtrans_convertURL($url, $language), "save_lang") 

, а затем добавить эта функция:

// 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; 

} 

Надеюсь, что этот шлем пс :)

+0

тоже здесь, применял коды без каких-либо результатов. :( qTranslate Version 3.4.6.4 | WordPress 4.4.2 – eapo

2

Я нашел хороший .htaccess правила, которое может установить кук языков здесь: http://tips.naivist.net/2012/11/09/remembering-the-user-language-choice/

кажется проще и работает просто отлично:

Просто изменить ваш главный .htaccess к этому:

# 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 

в lang1 и lang2, вы можете вставить языки, есть перевод на вашем сайте.