【问题标题】:Set GTranslate WordPress plugin to never expire将 GTranslate WordPress 插件设置为永不过期
【发布时间】:2020-10-20 15:39:46
【问题描述】:

类似于this post,我想知道如何在 GTranslate WordPress 插件上设置 cookie 数据,使其永不过期。目前,我的网站有两种语言选择:英语和西班牙语。如果用户登录并选择西班牙语,我希望他们能够注销、关闭浏览器、打开浏览器、重新登录并查看西班牙语网站。现在,根据开发工具中的 cookie 数据,他们的语言选择似乎在每个会话结束时过期。这是 GTranslate 插件的 Widget 代码 - 有没有办法修改此代码以使 cookie 永不过期,并且用户每次登录时都可以看到他们选择的语言?感谢您提供任何线索。

<!-- GTranslate: https://gtranslate.io/ -->
<a href="#" onclick="doGTranslate('en|en');return false;" title="English" class="glink nturl notranslate">English</a> <a href="#" onclick="doGTranslate('en|es');return false;" title="Español" class="glink nturl notranslate">Español</a> <style type="text/css">
#goog-gt-tt {display:none !important;}
.goog-te-banner-frame {display:none !important;}
.goog-te-menu-value:hover {text-decoration:none !important;}
.goog-text-highlight {background-color:transparent !important;box-shadow:none !important;}
body {top:0 !important;}
#google_translate_element2 {display:none!important;}
</style>

<div id="google_translate_element2"></div>
<script type="text/javascript">
function googleTranslateElementInit2() {new google.translate.TranslateElement({pageLanguage: 'en',autoDisplay: false}, 'google_translate_element2');}
</script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit2"></script>


<script type="text/javascript">
function GTranslateGetCurrentLang() {var keyValue = document['cookie'].match('(^|;) ?googtrans=([^;]*)(;|$)');return keyValue ? keyValue[2].split('/')[2] : null;}
function GTranslateFireEvent(element,event){try{if(document.createEventObject){var evt=document.createEventObject();element.fireEvent('on'+event,evt)}else{var evt=document.createEvent('HTMLEvents');evt.initEvent(event,true,true);element.dispatchEvent(evt)}}catch(e){}}
function doGTranslate(lang_pair){if(lang_pair.value)lang_pair=lang_pair.value;if(lang_pair=='')return;var lang=lang_pair.split('|')[1];if(GTranslateGetCurrentLang() == null && lang == lang_pair.split('|')[0])return;if(typeof ga!='undefined'){ga('send', 'event', 'GTranslate', lang, location.hostname+location.pathname+location.search);}else{if(typeof _gaq!='undefined')_gaq.push(['_trackEvent', 'GTranslate', lang, location.hostname+location.pathname+location.search]);}var teCombo;var sel=document.getElementsByTagName('select');for(var i=0;i<sel.length;i++)if(/goog-te-combo/.test(sel[i].className)){teCombo=sel[i];break;}if(document.getElementById('google_translate_element2')==null||document.getElementById('google_translate_element2').innerHTML.length==0||teCombo.length==0||teCombo.innerHTML.length==0){setTimeout(function(){doGTranslate(lang_pair)},500)}else{teCombo.value=lang;GTranslateFireEvent(teCombo,'change');GTranslateFireEvent(teCombo,'change')}}
</script>

【问题讨论】:

标签: javascript wordpress cookies


【解决方案1】:

在服务器端设置另一个自定义 cookie,这样即使 googtrans cookie 在会话结束后过期,它也会在读取您的自定义 cookie 后重新创建会话。

例如,当用户想要从英语翻译成日语时,我在此处设置了一个自定义 cookie:

function set_jap_lang()
{
    if(!isset($_COOKIE['your_custom_cookie'])) 
    {

        // set a cookie for 1 week
        setcookie('your_custom_cookie', 'ja', time() + (86400 * 7), COOKIEPATH, COOKIE_DOMAIN);
 
    }
    else
    {
        //unset and set again in case if lang is in other language
        setcookie('your_custom_cookie', '', time() - (86400 * 7), COOKIEPATH, COOKIE_DOMAIN);

        setcookie('tia_lang', 'ja', time() + (86400 * 7), COOKIEPATH, COOKIE_DOMAIN);
    }
}

现在你有了这个 ajax 函数,即使googtrans cookie 在会话结束后过期,你的自定义 cookie 仍然存在。此外,您可以将其设置为随时过期。

您现在要做的第二件事是在 JQuery 中检测用户何时拥有您的自定义 cookie 进行翻译。使用google的divgoogle_translate_element2作为jquery中的检测div(因为该div存在于你的任何页面的翻译中)。

if($('#google_translate_element2').length) //if translation div exists anywhere on page
{
    let lang = getCookie('your_custom_cookie');
    if(lang == null) return;

    doGTranslate("en|"+lang); //this is the function GTranslate uses to translate the page
}
function getCookie(name)
{
    var re = new RegExp(name + "=([^;]+)");
    var value = re.exec(document.cookie);
    return (value != null) ? unescape(value[1]) : null;
}

现在,如果用户想将我的英文页面翻译成日文,我的自定义 cookie 将具有 ja 的值,然后将连接到 GTranslate 函数 doGTranslate("en|"+lang) = doGTranslate("en|ja")

【讨论】:

    猜你喜欢
    • 2011-03-18
    • 2012-06-28
    • 2012-05-25
    • 2013-10-13
    • 2020-07-15
    • 2012-08-14
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多