programing

qWordpress용 번역기가 자동으로 올바른 언어를 제공하지 않습니다.

topblog 2023. 10. 30. 20:27
반응형

qWordpress용 번역기가 자동으로 올바른 언어를 제공하지 않습니다.

저는 qTranslate for Wordpress를 사용하여 영어, 스웨덴어, 독일어로 블로그에 글을 올립니다.방문자가 브라우저에서 지정한 언어의 올바른 URL로 전달되도록 "Detect Browser Language"를 활성화했습니다.

그래서 만약 제가 blog.domain.com 에 방문한다면, 저는 blog.domain.com/sv/ 로 옮겨지고 제 블로그 게시물은 스웨덴어로 되어 있습니다. 그것은 정말 좋은 일입니다!그러나 문제는, 만약 내가 같은 컴퓨터에서 blog.domain.com 을 다시 방문한다면, 나는 이동되지 않을 것이고, 블로그 게시물은 기본 언어 영어로 되어있습니다.

제가 여기서 뭘 잘못하고 있는 건가요?항상 언어를 지정해야 하는 게 이상한 것 같아요, 브라우저를 기반으로 자동으로 지정해야 해요.

저도 같은 문제가 있었는데 이 기능을 추가하기 위해 qTranslate를 수정했습니다.제가 한 일은 언어 정보로 쿠키를 저장하는 것이었는데, 이 쿠키는 사용자가 위젯에서 언어의 플래그를 클릭하면 저장됩니다.

제 논리는 다음과 같습니다.

  • 모든 언어를 표시하는 위젯에서 각 URL에 ?save_lang 매개변수를 추가합니다.
  • 이 매개변수가 존재할 경우 쿠키를 'save_lang' 값으로 저장하고 = $로 저장합니다.
  • 동일한 페이지로 즉시 리디렉션되지만 해당 매개 변수 'save_lang'은 없습니다.
  • 페이지를 호출할 때 지금 qTranslate는 기본_언어를 설정에 있는 언어로 설정합니다.쿠키 'save_lang'이 존재하면 쿠키에 저장된 언어로 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. 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;

}

도움이 되었으면 좋겠습니다 :)

여기에서 lang cookie를 설정할 수 있는 멋진 .htaccess 규칙을 찾았습니다. http://tips.naivist.net/2012/11/09/remembering-the-user-language-choice/

더 쉽고 잘 작동하는 것 같습니다.

메인 .ht 액세스를 다음과 같이 변경합니다.

# 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에서는 당신이 번역한 언어를 당신의 사이트에 삽입할 수 있습니다.

위 설명에 문제가 있을 수 있는 점을 지적하기 어렵습니다.

처음 로그인할 때 "Detect Browser Language(브라우저 언어 검출)"에서 입력을 가져오는 경우 오류가 발생할 수 있습니다.그리고 다음부터는 쿠키에서 그것을 가져옵니다.이 과정에 뭔가 잘못된 것이 있을 수도 있습니다.아니면 쿠키를 전혀 사용하지 않을 수도 있습니다.

로그인 데이터베이스가 있는 경우 사용자의 언어 사전 설정을 저장할 수 있습니다.그런 다음 로그인하는 즉시 원하는 언어에 따라 url을 변경합니다.

언급URL : https://stackoverflow.com/questions/10618636/qtranslate-for-wordpress-doesnt-automatic-give-me-the-correct-language

반응형