browser-language
Advanced tools
Comparing version 1.0.4 to 1.0.5
@@ -0,1 +1,7 @@ | ||
1.0.5 / 2014-06-06 | ||
================== | ||
* Fix if statment | ||
* Performance tips | ||
1.0.4 / 2014-06-02 | ||
@@ -2,0 +8,0 @@ ================== |
101
index.js
@@ -7,3 +7,3 @@ "use strict"; | ||
* @subpackage main | ||
* @version 1.0.4 | ||
* @version 1.0.5 | ||
* @author hex7c0 <hex7c0@gmail.com> | ||
@@ -17,5 +17,2 @@ * @copyright hex7c0 2014 | ||
*/ | ||
/** | ||
* @global | ||
*/ | ||
var my = {}, LANG = {}, languageAll = { | ||
@@ -128,17 +125,18 @@ 'ab': 'Abkhazian', | ||
* @param {Object} res - response to client | ||
* @param {Object} opt - my configuration | ||
* @param {String} lang - string for cookie | ||
* @param {Boolean} signed - if cookie'll be signed | ||
* @return | ||
* @return {String} | ||
*/ | ||
function set(res,lang,signed) { | ||
function set(res,opt,lang,signed) { | ||
res.cookie(my.cookie,lang,{ | ||
domain: my.domain, | ||
path: my.path, | ||
maxAge: my.age, | ||
httpOnly: my.httpOnly, | ||
secure: my.secure, | ||
res.cookie(opt.cookie,lang,{ | ||
domain: opt.domain, | ||
path: opt.path, | ||
maxAge: opt.age, | ||
httpOnly: opt.httpOnly, | ||
secure: opt.secure, | ||
signed: signed, | ||
}); | ||
return; | ||
return lang; | ||
} | ||
@@ -156,24 +154,25 @@ /** | ||
var done = false; | ||
var lang = LANG; // cache | ||
if (req.cookies == undefined) { | ||
req.cookies = {}; | ||
/** | ||
* @todo req.headers.cookie | ||
*/ | ||
} | ||
if (req.headers['accept-language'] && req.cookies[my.cookie] == undefined) { // check | ||
var languagesTyp = req.headers['accept-language'].replace(/q=[0-9.]*[,]?/g,'').split(';'); | ||
for (var i = 0, il = languagesTyp.length; i < il; i++) { | ||
var language = languagesTyp[i].substring(0,2); | ||
if (LANG[language]) { | ||
set(res,language,false); | ||
req.cookies[my.cookie] = language; | ||
done = true; | ||
break; | ||
if (req.cookies[my.cookie] == undefined) { // check | ||
if (req.headers['accept-language']) { | ||
var languagesTyp = req.headers['accept-language'].replace(/q=[0-9.]*[,]?/g,'').split( | ||
';'); | ||
for (var i = 0, il = languagesTyp.length; i < il; i++) { | ||
var language = languagesTyp[i].substring(0,2); | ||
if (lang[language]) { | ||
req.cookies[my.cookie] = set(res,my,language,false); | ||
return next(); | ||
} | ||
} | ||
} | ||
} else if (LANG[req.cookies[my.cookie]]) { // lookup | ||
done = true; | ||
} else if (lang[req.cookies[my.cookie]]) { // lookup | ||
return next(); | ||
} | ||
if (done == false) { // reset | ||
set(res,LANG._default,false); | ||
req.cookies[my.cookie] = LANG._default; | ||
} | ||
req.cookies[my.cookie] = set(res,my,lang._default,false); | ||
return next(); | ||
@@ -192,25 +191,25 @@ } | ||
var done = false; | ||
var lang = LANG; // cache | ||
if (req.signedCookies == undefined) { | ||
req.signedCookies = {}; | ||
/** | ||
* @todo req.headers.cookie | ||
*/ | ||
} | ||
if (req.headers['accept-language'] && req.signedCookies[my.cookie] == undefined) {// check | ||
var languagesTyp = req.headers['accept-language'].replace(/q=[0-9.]*[,]?/g,'').split(';'); | ||
for (var i = 0, il = languagesTyp.length; i < il; i++) { | ||
var language = languagesTyp[i].substring(0,2); | ||
if (LANG[language]) { | ||
set(res,language,true); | ||
req.signedCookies[my.cookie] = language; | ||
done = true; | ||
break; | ||
if (req.signedCookies[my.cookie] == undefined) { // check | ||
if (req.headers['accept-language']) { | ||
var languagesTyp = req.headers['accept-language'].replace(/q=[0-9.]*[,]?/g,'').split( | ||
';'); | ||
for (var i = 0, il = languagesTyp.length; i < il; i++) { | ||
var language = languagesTyp[i].substring(0,2); | ||
if (lang[language]) { | ||
req.signedCookies[my.cookie] = set(res,my,language,true); | ||
return next(); | ||
} | ||
} | ||
} | ||
} else if (LANG[req.signedCookies[my.cookie]]) { // lookup | ||
done = true; | ||
} else if (lang[req.signedCookies[my.cookie]]) { // lookup | ||
return next(); | ||
} | ||
if (done == false) {// reset | ||
set(res,LANG._default,true); | ||
req.signedCookies[my.cookie] = LANG._default; | ||
} | ||
req.signedCookies[my.cookie] = set(res,my,lang._default,true); | ||
return next(); | ||
@@ -224,5 +223,5 @@ } | ||
* @param {Object} options: various options. check README.md | ||
* @return {function} | ||
* @return {Function} | ||
*/ | ||
module.exports = function main(options) { | ||
var main = module.exports = function(options) { | ||
@@ -232,2 +231,3 @@ var include = __dirname + '/lib/dictionary.js'; | ||
var lang = options.dictionary || require(include).LANG; | ||
my = { | ||
@@ -237,3 +237,3 @@ cookie: String(options.cookie || 'lang'), | ||
path: String(options.path || '/'), | ||
age: parseInt(options.age) || 1000 * 3600 * 24 * 365, | ||
age: Number(options.age) || 1000 * 3600 * 24 * 365, | ||
httpOnly: Boolean(options.httpOnly), | ||
@@ -248,2 +248,5 @@ secure: Boolean(options.secure), | ||
} | ||
/** | ||
* @global | ||
*/ | ||
process.env.lang = lang._default; | ||
@@ -250,0 +253,0 @@ LANG = lang; |
{ | ||
"name": "browser-language", | ||
"version": "1.0.4", | ||
"description": "grab browser language for expressjs", | ||
"version": "1.0.5", | ||
"description": "grab browser language and store on cookie", | ||
"main": "index.js", | ||
@@ -15,7 +15,7 @@ "repository": { | ||
"name": "hex7c0", | ||
"email": "0x7c0@gmail.com", | ||
"email": "hex7c0@gmail.com", | ||
"url": "http://hex7c0.tk/" | ||
}, | ||
"dependencies": {}, | ||
"devDependencies":{ | ||
"devDependencies": { | ||
"cookie-parser": "1.1.0", | ||
@@ -30,4 +30,3 @@ "express": ">4.0.0" | ||
"language", | ||
"cookie", | ||
"express" | ||
"cookie" | ||
], | ||
@@ -34,0 +33,0 @@ "license": "GPLv3", |
#browser-language [![Build Status](https://travis-ci.org/hex7c0/browser-language.svg?branch=master)](https://travis-ci.org/hex7c0/browser-language) [![NPM version](https://badge.fury.io/js/browser-language.svg)](http://badge.fury.io/js/browser-language) | ||
grab browser language for [expressjs](http://expressjs.com/) | ||
grab browser language and store on cookie | ||
@@ -19,3 +19,3 @@ ## Installation | ||
_Clear_ use inside expressjs project | ||
_Normal_ use inside expressjs project | ||
```js | ||
@@ -60,11 +60,18 @@ var language = require('browser-language'); | ||
- `..` - **String** Set cookie with '..' value | ||
- `domain` - **String** Domain of cookie | ||
- `cookie` - **String** Name of cookie | ||
- `path` - **String** Path of cookie | ||
- `age` - **Integer** Age of cookie | ||
- `httpOnly` - **Boolean** Flag for http only | ||
- `secure` - **Boolean** Flag for using https | ||
- `signed` - **Boolean** Will use the secret passed to cookieParser(secret) to sign the value | ||
- `domain` - **String** Domain of cookie *(default "null")* | ||
- `cookie` - **String** Name of cookie *(default "lang")* | ||
- `path` - **String** Path of cookie *(default "/")* | ||
- `age` - **Number** Age of cookie in millisecond *(default "1 year")* | ||
- `httpOnly` - **Boolean** Flag for http only cookie *(default "false")* | ||
- `secure` - **Boolean** Flag for using cookie over TLS/SSL *(default "false")* | ||
- `signed` - **Boolean** Will use the secret passed to cookieParser(secret) to sign the value *(default "false")* | ||
`dictionary` object with correct value to be added, otherwise using a default dictionary inside /lib/dictionary.js | ||
`dictionary` object with correct value to be added, otherwise using a default dictionary inside ./lib/dictionary.js | ||
@@ -71,0 +78,0 @@ #### Examples |
55208
298
84