【问题标题】:Save last language preference of the user in a Cookie将用户最后的语言偏好保存在 Cookie 中
【发布时间】:2014-09-29 01:00:34
【问题描述】:

我正在使用两种语言运行 Wordpress 多站点安装:希伯来语和英语。
我有一个名为 Geo IP 的插件,可以帮助我根据 IP 国家/地区重定向用户。

但实际上我需要更多。
我想保存用户最后选择的语言。

例子:

如果用户关闭我网站的英文选项卡,我希望当他回来时,他会得到英文。希伯来语反之亦然。

我不是专业开发人员,但我认为 cookie 可以是一种解决方案,如果可能的话,我希望解决方案在 JS 中。

更新:我制作的代码! WDYT 伙计们?

function get_language {
var myLang = getcookie ('language');                

if ( myLang == 'hebrew') {                          
    window.location = "http://zeek.me/he/";         
}

else if ( myLang == 'english') {                     
    window.location = "http://zeek.me";             
}

else {                                              
    window.location = "http://zeek.me";                         
    }
}


function set_language(lang) {
var setLang = setcookie ('language', lang, 30);
var englishClick = document.getElementById('#english_lang');
var hebrewClick = document.getElementById('#hebrew_lang');

englishClick.addEventListener('click', function() {
    set_language('english');
})

hebrewClick.addEventListener('click', function() {
    set_language('hebrew');
})

}

你们怎么看? 有什么解决办法吗?

谢谢,

西蒙

【问题讨论】:

    标签: javascript wordpress cookies


    【解决方案1】:

    听起来很基本,cookie 就是你想要的。您可以坚持使用 javascript,或使用 php cookie。您选择了 javascript 解决方案。

    您需要一些函数来完成这项工作。下面是一些示例,但这些不是工作代码。您需要对其进行编辑才能进行语言切换。

    function init_language() {
        // this function called when no language has been defined yet
        var lang = getcookie( 'language' );
        if ( lang == 'hebrew' ) hebrew_pls();
    }
    
    function switch_language() {
       // When the user takes action to change language, ie, clicks a flag icon
       if ( selected_language == 'hebrew' ) hebrew_pls();
    }
    
    function hebrew_pls() {
       set_language('hebrew'); // aka, whatever you want to do
       setcookie( 'language', 'hebrew', 30 ); // remember the language for 30 days
    }
    

    以下是我使用了一段时间的 cookie 函数。它基于“How do I create and read a value from cookie?”。我已经修改了这些,所以它们更容易使用。如果你不喜欢我的修改,网上有很多替代品。不幸的是,默认情况下 JavaScript 没有一种简单的方法来存储 cookie(没有第三方插件/脚本)。

    /*
      setCookie( name, value, days, [path = "/"] )
        Sets a cookie, expires after "days" have passed
    
      getCookie( name, default )
        Gets the value of a cookie, or returns "default". Note: Does not set the cookie to default.
    */
    
    function setCookie(c_name, value, exdays, path) {
      var exdate = new Date();
      exdate.setDate(exdate.getDate() + exdays);
      var c_value = escape(value) + ((exdays == null) ? "" : ("; expires=" + exdate.toUTCString()));
      document.cookie = c_name + "=" + c_value + ((path == null) ? "; path=/" : "; path=" + path);
    }
    
    function getCookie(c_name, c_default) {
      var i, x, y, ARRcookies = document.cookie.split(";");
      for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
          return unescape(y);
        }
      }
    
      if (typeof c_default != 'undefined') return c_default;
      return false;
    }
    

    【讨论】:

    • 非常感谢@RadGH,我正在努力让你更新。谢谢你们的快速响应。我会及时通知你!
    【解决方案2】:

    如果您想要使用 Javascript 的解决方案,您应该考虑使用 localStorage。如果您想知道所选语言的服务器端,Cookie 很好,但如果您只需要本地,localStorage 更好(原因如下)。

    要设置本地存储项,请使用

    localStorage.setItem(key, value);
    

    然后查看值,使用

    localStorage.getItem(key);
    

    localStorage 与 cookie 相比有一些优势。其中一些是:

    • 每个 HTTP 请求都包含 Cookie,因此有时会不必要地一遍又一遍地传输相同的数据,从而降低您的网站速度
    • 每个 HTTP 请求都包含 Cookie,从而通过 Internet 发送未加密的数据
    • Cookie 限制为大约 4 KB 的数据

    【讨论】:

    • +1 用于本地存储的教育,即使语言 cookie 可以存储在只有几个字符的单个字符串中
    • 谢谢你回答@NiemandWirklich,我也试试这个解决方案。
    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2019-01-17
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 2011-05-24
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多