与this post类似,我想知道如何在GTranslate WordPress插件上设置cookie数据,使其永不过期。目前,我有一个网站,有两种语言选择:英语和西班牙语。如果用户登录并选择西班牙语,我希望他们能够注销,关闭浏览器,打开浏览器,重新登录,并以西班牙语查看网站。现在,根据开发工具中的cookie数据,他们的语言选择似乎在每个会话结束时过期。这是GTranslate插件的窗口小部件代码--有没有办法修改这个代码,使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>发布于 2021-05-21 09:52:21
在服务器端设置另一个自定义cookie,这样即使googtrans cookie在会话后过期,它也会在读取您的自定义cookie后重新创建会话。
例如,当用户想要将英语翻译成日语时,我在下面的PHP代码中设置了一个自定义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 div google_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")
https://stackoverflow.com/questions/62655682
复制相似问题