在Cookie中保存用户的最后一种语言偏好

Save last language preference of the user in a Cookie

本文关键字:一种 语言 Cookie 保存 用户 最后      更新时间:2023-09-26

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

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

的例子:

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

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

更新:我做的代码!

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的解决方案,您应该考虑localStorage。如果你想知道所选择的服务器端语言,cookie是不错的选择,但如果你只需要本地语言,localStorage是更好的选择(原因如下)。

设置localStorage项,使用

localStorage.setItem(key, value);

,然后使用

查看值
localStorage.getItem(key);
与cookie相比,

localStorage有一些优点。其中一些是:

  • cookie包含在每个HTTP请求中,因此有时不必要地一遍又一遍地传输相同的数据,从而减慢您的网站速度
  • cookie包含在每个HTTP请求中,因此在互联网上发送未加密的数据
  • Cookies被限制在大约4kb的数据

听起来很基本,饼干是你想要的。你可以坚持使用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函数。它基于"我如何从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;
}