2012-05-16 3 views
6

私はqTranslate for Wordpressを使用して、私のブログ投稿を英語、スウェーデン語、ドイツ語にしています。 「ブラウザ言語の検出」を有効にして、訪問者がブラウザで指定された言語の正しいURLに転送されるようにしました。qTranslate for Wordpressは自動的に私に正しい言語を与えません

blog.domain.comにアクセスするとblog.domain.com/sv/に転送され、ブログの投稿はスウェーデン語で表示されます。しかし、今問題になっているのですが、同じコンピュータからもう一度blog.domain.comにアクセスすると、私は転送されず、ブログの投稿は既定の言語の英語になります。

私がここで間違っていることはありますか?私はいつも言語を指定する必要があることを奇妙に思う、私はそれがブラウザに基づいて自動的にする必要があります。あなたは、「ブラウザの言語を検出する」から入力を取っている最初のログイン時エラーの可能性があるかもしれない、上記の説明で間違っているかもしれないもの

を指摘する

+0

あなたは以前あなたをリダイレクトしていたが、現在は機能していなかったことを意味しましたか? – Anand

+0

問題は、ブラウザから初めてblog.domain.comにアクセスしたときに、正しい言語にリダイレクトされますが、私がblog.domain.comにアクセスしたのは2度目です。リダイレクトされずに英語のブログが表示されます。 – Martin

+0

2回目にログインしていますか?あなたが管理者としてログインしている場合は、qtranslateが言語検出を別の方法で処理するようです。リダイレクト後にどのCookieが設定されているかを確認すると便利かもしれません。 – abimelex

答えて

0

難しいです。また、次回からはクッキーから取得します。このプロセスに間違っているものがあるかもしれません。または、クッキーをまったく使用していない可能性があります。

ログインデータベースがある場合は、ユーザーの言語プリセットを保存できます。 その後、ログインするとすぐに希望の言語に合わせてURLを変更してください。

2

私は同じ問題があり、この機能を追加するためにqTranslateを変更しました。私がしたことは、言語情報を持つクッキーを保存することでした。このクッキーは、ユーザーがウィジェットの言語のフラグをクリックすると保存されます。すべての言語を表示するウィジェットで

  • 、各URLに次のparamを追加します:?save_lang
  • このparamは存在している場合は、名前を「save_lang」とクッキーを保存

    私のロジックは次のとおりです。 value = $ lang

  • すぐに同じページにリダイレクトされますが、「save_lang」というパラメータはありません
  • ページを呼び出すときは、今すぐqTranslateがdefault_languageを設定のものに設定します。

    1. 修正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. クッキー 'save_lang' は存在する場合、私はクッキー

だから、いくつかの手順で保存したものとDEFAULT_LANGUAGEを上書きします

  • ファイルqtranslate_widgetを変更します。PHP(それぞれの言語URLに 'save_lang' のparamを追加する):

  • この行見るたび:

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

    私はこの願いますPS :)

    +0

    と同じですが、結果を出さずにコードを適用しました。 :( q翻訳バージョン3.4.6.4 | WordPress 4.4.2 – eapo

    2

    私はここでLANGクッキーを設定することができます素敵な.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 
    

    lang1lang2では、あなたのサイトにあなたが翻訳を持つ言語を挿入することができます。

    関連する問題