在Cookie中保存用户的上一个语言首选项

时间:2014-08-06 07:25:47

标签: javascript wordpress cookies

我正在使用两种语言运行Wordpress Multisite安装:希伯来语和英语 我有一个名为 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');
})

}

你们怎么想? 任何解决方案?

谢谢,

西蒙

2 个答案:

答案 0 :(得分:3)

如果你想要一个使用Javascript的解决方案,你应该考虑localStorage。如果你想知道选定的语言服务器端,Cookies很不错,但如果你只需要本地,那么localStorage就更好了(原因如下)。

要设置localStorage项目,请使用

localStorage.setItem(key, value);

然后查看该值,请使用

localStorage.getItem(key);

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

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

答案 1 :(得分:1)

听起来非常基本,饼干就是你想要的。你可以坚持使用JavaScript,或使用PHP cookies。您选择了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;
}