2012-05-16 25 views
6

Utilizo qTranslate para que Wordpress tenga mis entradas de blog en inglés, sueco y alemán. He activado el "Detectar idioma del navegador" para que el visitante se reenvíe a la URL correcta para el idioma especificado por su navegador.qTranslate para Wordpress no me da automáticamente el idioma correcto

Así que si visito blog.domain.com me transfiero a blog.domain.com/sv/ y las entradas de mi blog están en sueco, ¡eso es genial! Pero ahora al problema, si vuelvo a visitar blog.domain.com por segunda vez desde la misma computadora, no me transfieren y la publicación del blog está en el idioma predeterminado en inglés.

¿Hay algo que estoy haciendo mal aquí? Parece extraño que siempre necesite especificar el idioma, necesito que sea automático en función del navegador.

+0

¿Querías decir sa que te estaba redirigiendo antes, pero que ahora has dejado de funcionar? – Anand

+0

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

+0

¿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

Respuesta

0

difícil señalar lo que podría estar mal con la descripción anterior

El posible error podría ser cuando se identifique primero que usted está tomando la entrada de "Detectar idioma Navegador". Y a partir de la próxima vez que lo recupere de una cookie. Puede haber algo que haya salido mal con este proceso. O tal vez no estés usando cookies.

Puede guardar el idioma preestablecido del usuario si tiene una base de datos de inicio de sesión. Luego, cambie la URL de acuerdo con el idioma deseado tan pronto como inicie sesión.

2

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:

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

+0

mismo aquí, aplicó los códigos sin ningún resultado. :( qTranslate versión 3.4.6.4 | WordPress 4.4.2 – eapo

2

me encontré con una regla .htaccess agradable que puede establecer la cookie lang aquí: http://tips.naivist.net/2012/11/09/remembering-the-user-language-choice/

Parece más fácil y funciona muy bien:

Sólo alterar su .htaccess principal para esto:

# 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 

en lang1 y lang2, puede insertar las lenguas que tienen traducción en su sitio.

Cuestiones relacionadas