2012-05-16 10 views
6

Io uso qTranslate per Wordpress per avere i post del mio blog in inglese, svedese e tedesco. Ho attivato il "Rileva lingua del browser" in modo che il visitatore venga inoltrato all'URL corretto per la lingua specificata dal suo browser.qTranslate per Wordpress non mi dà automaticamente la lingua corretta

Quindi se visito blog.domain.com vengo trasferito su blog.domain.com/sv/ e il mio post sul blog è in svedese, è fantastico! Ma ora il problema, se visito ancora blog.domain.com una seconda volta dallo stesso computer, non mi viene trasferito e il post del blog è nella lingua predefinita inglese.

C'è qualcosa che sto facendo male qui? Sembra strano che io debba sempre specificare la lingua, ho bisogno che sia automatica in base al browser.

+0

intendevi dire che ti stava reindirizzando prima, ma ora aveva smesso di funzionare? – Anand

+0

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

+0

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

risposta

0

difficile indicare quello che potrebbe essere sbagliato con la descrizione di cui sopra

L'errore potrebbe essere possibile quando si effettua il login prima si sta prendendo l'input da "Rileva lingua del browser". E dalla prossima volta recuperandolo da un cookie. Potrebbe esserci qualcosa che non ha funzionato in questo processo. Oppure potresti non utilizzare affatto i cookie.

È possibile salvare la preimpostazione della lingua dell'utente se si dispone di un database di accesso. Quindi modificare l'url in base alla lingua desiderata non appena si effettua il login.

2

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:

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

+0

stesso qui, applicato i codici senza alcun risultato. :( qTranslate versione 3.4.6.4 | WordPress 4.4.2 – eapo

2

ho trovato una bella regola .htaccess che può impostare il cookie lang qui: http://tips.naivist.net/2012/11/09/remembering-the-user-language-choice/

Sembra più facile e funziona bene:

Basta modificare il vostro file .htaccess principale di questo:

# 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 

in lang1 e lang2, è possibile inserire le lingue di traduzione che avete nel vostro sito.

Problemi correlati