6

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

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

ここで私が間違っていることはありますか?常に言語を指定する必要があるのは奇妙に思えます。ブラウザに基づいて自動化する必要があります。

4

3 に答える 3

2

ここで lang Cookie を設定できる素敵な .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では、翻訳した言語をサイトに挿入できます。

于 2013-01-18T11:55:43.910 に答える
2

私は同じ問題を抱えていたので、この機能を追加するためにqTranslateを修正しました。私がしたことは、言語情報を含む Cookie を保存することでした。この Cookie は、ユーザーがウィジェットで言語のフラグをクリックすると保存されます。

私の論理は次のとおりです。

  • すべての言語を表示するウィジェットで、次のパラメーターを各 URL に追加します。
  • このパラメーターが存在する場合、「save_lang」という名前と値 = $lang で Cookie を保存します
  • すぐに同じページにリダイレクトしますが、そのパラメータ「save_lang」はありません
  • 任意のページを呼び出すと、現在、qTranslate は default_language を設定の言語に設定します。Cookie「save_lang」が存在する場合、default_language を Cookie に保存されたものでオーバーライドします

いくつかの手順:

  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. ファイル qtranslate_widget.php を変更します (それぞれの言語 URL に「save_lang」パラメータを追加するため):

この行が表示されるたびに:

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;

}

これが役立つことを願っています:)

于 2012-08-15T09:22:09.453 に答える
0

上記の説明の何が問題なのかを指摘するのは難しい

考えられるエラーは、最初にログインしたときに「ブラウザー言語の検出」から入力を取得している可能性があります。次回からはクッキーから取得します。このプロセスで問題が発生した可能性があります。または、Cookie をまったく使用していない可能性があります。

ログイン データベースがある場合は、ユーザーの言語プリセットを保存できます。次に、ログインしたらすぐに、目的の言語に従って URL を変更します。

于 2012-05-30T09:31:28.067 に答える