From 5d6bfaac0379baac64e7087d5b3fb28ef473061c Mon Sep 17 00:00:00 2001 From: Liming Xie Date: Mon, 12 Jan 2015 10:55:10 +0800 Subject: [PATCH] add i18n support to demo client --- dump.rdb | Bin 3894 -> 3045 bytes www/index.html | 5 ++ www/js/en.lang.js | 1 + www/js/hotjs-i18n.js | 5 +- www/js/jquery.cookie.js | 117 +++++++++++++++++++++++++++++++++++++ www/js/zh.lang.js | 1 + www/main.js | 32 +++++++--- wwwsrc/index.html | 5 ++ wwwsrc/js/en.lang.js | 1 + wwwsrc/js/hotjs-i18n.js | 5 +- wwwsrc/js/jquery.cookie.js | 117 +++++++++++++++++++++++++++++++++++++ wwwsrc/js/zh.lang.js | 1 + wwwsrc/main.js | 32 +++++++--- 13 files changed, 300 insertions(+), 22 deletions(-) create mode 100644 www/js/jquery.cookie.js create mode 100644 wwwsrc/js/jquery.cookie.js diff --git a/dump.rdb b/dump.rdb index c303963935da32cf6d45f22c405d62dc66d6458a..cdd10f06a93013f2eee23e6288bf9defcfc0350b 100644 GIT binary patch literal 3045 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 G5B>%1g>{Ai diff --git a/www/index.html b/www/index.html index 4474b54..76b0016 100644 --- a/www/index.html +++ b/www/index.html @@ -6,6 +6,7 @@ + @@ -13,6 +14,10 @@
+ Language:

diff --git a/www/js/en.lang.js b/www/js/en.lang.js index 9ad80c8..1fb919b 100644 --- a/www/js/en.lang.js +++ b/www/js/en.lang.js @@ -1,4 +1,5 @@ hotjs.i18n.put('en', { + 'language': 'Language', 'fastsignup': 'Fast Sign Up', 'signup': 'Sign Up', 'login': 'Login', diff --git a/www/js/hotjs-i18n.js b/www/js/hotjs-i18n.js index 46c66b5..468b907 100644 --- a/www/js/hotjs-i18n.js +++ b/www/js/hotjs-i18n.js @@ -59,9 +59,8 @@ hotjs.i18n = { setLang : function(lang, cook) { this.lang = lang; if (cook) { - var wl = window.location, now = new Date(), time = now.getTime(); - time += this.cookievalid; - now.setTime(time); + var wl = window.location, now = new Date(); + now.setTime( now.getTime() + this.cookievalid ); document.cookie = 'lang=' + lang + ';path=' + wl.pathname + ';domain=' + wl.host + ';expires=' + now.toGMTString(); } return this; diff --git a/www/js/jquery.cookie.js b/www/js/jquery.cookie.js new file mode 100644 index 0000000..feb62e9 --- /dev/null +++ b/www/js/jquery.cookie.js @@ -0,0 +1,117 @@ +/*! + * jQuery Cookie Plugin v1.4.1 + * https://github.com/carhartl/jquery-cookie + * + * Copyright 2006, 2014 Klaus Hartl + * Released under the MIT license + */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + + var pluses = /\+/g; + + function encode(s) { + return config.raw ? s : encodeURIComponent(s); + } + + function decode(s) { + return config.raw ? s : decodeURIComponent(s); + } + + function stringifyCookieValue(value) { + return encode(config.json ? JSON.stringify(value) : String(value)); + } + + function parseCookieValue(s) { + if (s.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + } + + try { + // Replace server-side written pluses with spaces. + // If we can't decode the cookie, ignore it, it's unusable. + // If we can't parse the cookie, ignore it, it's unusable. + s = decodeURIComponent(s.replace(pluses, ' ')); + return config.json ? JSON.parse(s) : s; + } catch(e) {} + } + + function read(s, converter) { + var value = config.raw ? s : parseCookieValue(s); + return $.isFunction(converter) ? converter(value) : value; + } + + var config = $.cookie = function (key, value, options) { + + // Write + + if (arguments.length > 1 && !$.isFunction(value)) { + options = $.extend({}, config.defaults, options); + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setTime(+t + days * 864e+5); + } + + return (document.cookie = [ + encode(key), '=', stringifyCookieValue(value), + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join('')); + } + + // Read + + var result = key ? undefined : {}; + + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling $.cookie(). + var cookies = document.cookie ? document.cookie.split('; ') : []; + + for (var i = 0, l = cookies.length; i < l; i++) { + var parts = cookies[i].split('='); + var name = decode(parts.shift()); + var cookie = parts.join('='); + + if (key && key === name) { + // If second argument (value) is a function it's a converter... + result = read(cookie, value); + break; + } + + // Prevent storing a cookie that we couldn't decode. + if (!key && (cookie = read(cookie)) !== undefined) { + result[name] = cookie; + } + } + + return result; + }; + + config.defaults = {}; + + $.removeCookie = function (key, options) { + if ($.cookie(key) === undefined) { + return false; + } + + // Must not alter options, thus extending a fresh object... + $.cookie(key, '', $.extend({}, options, { expires: -1 })); + return !$.cookie(key); + }; + +})); diff --git a/www/js/zh.lang.js b/www/js/zh.lang.js index c1da8c1..1dbaa2f 100644 --- a/www/js/zh.lang.js +++ b/www/js/zh.lang.js @@ -1,4 +1,5 @@ hotjs.i18n.put('zh', { + 'language': '语言', 'fastsignup': '快速注册', 'signup': '注册', 'login': '登录', diff --git a/www/main.js b/www/main.js index e78c242..3e1c8f1 100644 --- a/www/main.js +++ b/www/main.js @@ -7,8 +7,6 @@ var Client = require('../lib/client'), var client = null; -//hotjs.i18n.setLang('zh'); - Poker.toHTML = function(cards) { var html = ''; for(var i=0; i + @@ -13,6 +14,10 @@
+ Language:

diff --git a/wwwsrc/js/en.lang.js b/wwwsrc/js/en.lang.js index 9ad80c8..1fb919b 100644 --- a/wwwsrc/js/en.lang.js +++ b/wwwsrc/js/en.lang.js @@ -1,4 +1,5 @@ hotjs.i18n.put('en', { + 'language': 'Language', 'fastsignup': 'Fast Sign Up', 'signup': 'Sign Up', 'login': 'Login', diff --git a/wwwsrc/js/hotjs-i18n.js b/wwwsrc/js/hotjs-i18n.js index 46c66b5..468b907 100644 --- a/wwwsrc/js/hotjs-i18n.js +++ b/wwwsrc/js/hotjs-i18n.js @@ -59,9 +59,8 @@ hotjs.i18n = { setLang : function(lang, cook) { this.lang = lang; if (cook) { - var wl = window.location, now = new Date(), time = now.getTime(); - time += this.cookievalid; - now.setTime(time); + var wl = window.location, now = new Date(); + now.setTime( now.getTime() + this.cookievalid ); document.cookie = 'lang=' + lang + ';path=' + wl.pathname + ';domain=' + wl.host + ';expires=' + now.toGMTString(); } return this; diff --git a/wwwsrc/js/jquery.cookie.js b/wwwsrc/js/jquery.cookie.js new file mode 100644 index 0000000..feb62e9 --- /dev/null +++ b/wwwsrc/js/jquery.cookie.js @@ -0,0 +1,117 @@ +/*! + * jQuery Cookie Plugin v1.4.1 + * https://github.com/carhartl/jquery-cookie + * + * Copyright 2006, 2014 Klaus Hartl + * Released under the MIT license + */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + + var pluses = /\+/g; + + function encode(s) { + return config.raw ? s : encodeURIComponent(s); + } + + function decode(s) { + return config.raw ? s : decodeURIComponent(s); + } + + function stringifyCookieValue(value) { + return encode(config.json ? JSON.stringify(value) : String(value)); + } + + function parseCookieValue(s) { + if (s.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + } + + try { + // Replace server-side written pluses with spaces. + // If we can't decode the cookie, ignore it, it's unusable. + // If we can't parse the cookie, ignore it, it's unusable. + s = decodeURIComponent(s.replace(pluses, ' ')); + return config.json ? JSON.parse(s) : s; + } catch(e) {} + } + + function read(s, converter) { + var value = config.raw ? s : parseCookieValue(s); + return $.isFunction(converter) ? converter(value) : value; + } + + var config = $.cookie = function (key, value, options) { + + // Write + + if (arguments.length > 1 && !$.isFunction(value)) { + options = $.extend({}, config.defaults, options); + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setTime(+t + days * 864e+5); + } + + return (document.cookie = [ + encode(key), '=', stringifyCookieValue(value), + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join('')); + } + + // Read + + var result = key ? undefined : {}; + + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling $.cookie(). + var cookies = document.cookie ? document.cookie.split('; ') : []; + + for (var i = 0, l = cookies.length; i < l; i++) { + var parts = cookies[i].split('='); + var name = decode(parts.shift()); + var cookie = parts.join('='); + + if (key && key === name) { + // If second argument (value) is a function it's a converter... + result = read(cookie, value); + break; + } + + // Prevent storing a cookie that we couldn't decode. + if (!key && (cookie = read(cookie)) !== undefined) { + result[name] = cookie; + } + } + + return result; + }; + + config.defaults = {}; + + $.removeCookie = function (key, options) { + if ($.cookie(key) === undefined) { + return false; + } + + // Must not alter options, thus extending a fresh object... + $.cookie(key, '', $.extend({}, options, { expires: -1 })); + return !$.cookie(key); + }; + +})); diff --git a/wwwsrc/js/zh.lang.js b/wwwsrc/js/zh.lang.js index c1da8c1..1dbaa2f 100644 --- a/wwwsrc/js/zh.lang.js +++ b/wwwsrc/js/zh.lang.js @@ -1,4 +1,5 @@ hotjs.i18n.put('zh', { + 'language': '语言', 'fastsignup': '快速注册', 'signup': '注册', 'login': '登录', diff --git a/wwwsrc/main.js b/wwwsrc/main.js index 104a110..d2cc740 100644 --- a/wwwsrc/main.js +++ b/wwwsrc/main.js @@ -6,8 +6,6 @@ var Client = require('../lib/client'), var client = null; -//hotjs.i18n.setLang('zh'); - Poker.toHTML = function(cards) { var html = ''; for(var i=0; i