diff --git a/examples/express4-cookie/index.js b/examples/express4-cookie/index.js new file mode 100644 index 00000000..0939d9bf --- /dev/null +++ b/examples/express4-cookie/index.js @@ -0,0 +1,38 @@ +var express = require('express'); +var cookieParser = require('cookie-parser'); +var url = require('url'); +var i18n = require('../../i18n'); + +i18n.configure({ + locales: ['en', 'de', 'ar'], + cookie: 'yourcookiename', + directory: __dirname+'/locales' +}); + +var app = express(); +app.use(cookieParser()); +app.use(i18n.init); + +app.get('/test', function (req, res) { + // delay a response to simulate a long running process, + // while another request comes in with altered language settings + setTimeout(function () { + res.send('res: ' + res.__('Hello') + ' req: ' + req.__('Hello') + ''); + }, app.getDelay(req, res)); +}); + +app.get('/testfail', function (req, res) { + // delay a response to simulate a long running process, + // while another request comes in with altered language settings + setTimeout(function () { + res.send('' + i18n.__('Hello') + ''); + }, app.getDelay(req, res)); +}); + +// simple param parsing +app.getDelay = function (req, res) { + return url.parse(req.url, true).query.delay || 0; +}; + +// startup +app.listen(3000); diff --git a/examples/express4-cookie/locales/ar.json b/examples/express4-cookie/locales/ar.json new file mode 100644 index 00000000..e64ae870 --- /dev/null +++ b/examples/express4-cookie/locales/ar.json @@ -0,0 +1,3 @@ +{ + "Hello": "مرحبا" +} \ No newline at end of file diff --git a/examples/express4-cookie/locales/de.json b/examples/express4-cookie/locales/de.json new file mode 100644 index 00000000..13a9c092 --- /dev/null +++ b/examples/express4-cookie/locales/de.json @@ -0,0 +1,4 @@ +{ + "Hello World": "Hallo Welt", + "Hello": "Hallo" +} \ No newline at end of file diff --git a/examples/express4-cookie/locales/en.json b/examples/express4-cookie/locales/en.json new file mode 100644 index 00000000..696b41c8 --- /dev/null +++ b/examples/express4-cookie/locales/en.json @@ -0,0 +1,4 @@ +{ + "Hello World": "Hello World", + "Hello": "Hello" +} \ No newline at end of file diff --git a/examples/express4-cookie/test.js b/examples/express4-cookie/test.js new file mode 100644 index 00000000..f20400da --- /dev/null +++ b/examples/express4-cookie/test.js @@ -0,0 +1,42 @@ +require('./index'); + +var Browser = require('zombie'), + visitLinks = require('../testlib/visitlinks'), + DE = new Browser(), + EN = new Browser(); + AR = new Browser(); + +EN.setCookie({name: 'yourcookiename', domain: 'localhost', value: 'en'}); +DE.setCookie({name: 'yourcookiename', domain: 'localhost', value: 'de'}); +AR.setCookie({name: 'yourcookiename', domain: 'localhost', value: 'ar'}); + +describe('Using i18n in express 4.x with cookieParser', function () { + describe('res.__() is able to handle concurrent request correctly', function () { + describe('serial requests', function () { + visitLinks('series', 'test', EN, 'res: Hello req: Hello', DE, 'res: Hallo req: Hallo'); + }); + + describe('parallel requests', function () { + visitLinks('parallel', 'test', EN, 'res: Hello req: Hello', DE, 'res: Hallo req: Hallo'); + }); + + describe('serial requests AR', function () { + visitLinks('series', 'test', EN, 'res: Hello req: Hello', AR, 'res: مرحبا req: مرحبا'); + }); + + describe('parallel requests AR', function () { + visitLinks('parallel', 'test', EN, 'res: Hello req: Hello', AR, 'res: مرحبا req: مرحبا'); + }); + + }); + + describe('i18n.__() is NOT able to handle concurrent request correctly', function () { + describe('serial requests', function () { + visitLinks('series', 'testfail', EN, 'Hello', DE, 'Hello'); + }); + + describe('parallel requests', function () { + visitLinks('parallel', 'testfail', EN, 'Hello', DE, 'Hello'); + }); + }); +}); diff --git a/i18n.js b/i18n.js index 35138752..07c7775e 100644 --- a/i18n.js +++ b/i18n.js @@ -792,7 +792,7 @@ function getStorageFilePath(locale) { return filepathJS; } } catch (e) { - logDebug('will write to ' + filepath); + logDebug('will use ' + filepath); } return filepath; } diff --git a/package.json b/package.json index f2c9c38d..98d01b1d 100644 --- a/package.json +++ b/package.json @@ -18,20 +18,19 @@ "lib": "." }, "dependencies": { - "sprintf-js": ">=1.0.3", + "debug": "*", "mustache": "*", - "debug": "*" + "sprintf-js": ">=1.0.3" }, "devDependencies": { + "async": "*", + "cookie-parser": "^1.4.1", + "express": "^4.13.4", + "jshint": "*", "mocha": "*", "should": "*", - "zombie": "*", - "async": "*", - "hbs": "*", - "jade": "*", - "consolidate": "*", - "restify": "*", - "jshint": "*" + "url": "^0.11.0", + "zombie": "*" }, "engines": { "node": ">=0.10.0"