feat: Multiple locale paths support.
parent
135d55773a
commit
5ffefcc982
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
1.2.0 / 2015-08-31
|
1.2.0 / 2015-08-31
|
||||||
==================
|
==================
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ var locales = require('koa-locales');
|
||||||
|
|
||||||
var app = koa();
|
var app = koa();
|
||||||
app.use(locales({
|
app.use(locales({
|
||||||
dir: __dirname + '/locales'
|
dirs: [__dirname + '/locales', __dirname + '/foo/locales']
|
||||||
}));
|
}));
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ Patch locales functions to koa app.
|
||||||
```js
|
```js
|
||||||
locales({
|
locales({
|
||||||
app: app,
|
app: app,
|
||||||
dir: __dirname + '/app/locales',
|
dirs: [__dirname + '/app/locales'],
|
||||||
defaultLocale: 'zh-CN'
|
defaultLocale: 'zh-CN'
|
||||||
}));
|
}));
|
||||||
```
|
```
|
||||||
|
|
34
index.js
34
index.js
|
@ -20,6 +20,7 @@ var util = require('util');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var ms = require('humanize-ms');
|
var ms = require('humanize-ms');
|
||||||
|
var merge = require('merge-descriptors');
|
||||||
|
|
||||||
module.exports = function (app, options) {
|
module.exports = function (app, options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
@ -27,26 +28,43 @@ module.exports = function (app, options) {
|
||||||
var queryField = options.queryField || 'locale';
|
var queryField = options.queryField || 'locale';
|
||||||
var cookieField = options.cookieField || 'locale';
|
var cookieField = options.cookieField || 'locale';
|
||||||
var cookieMaxAge = ms(options.cookieMaxAge || '1y');
|
var cookieMaxAge = ms(options.cookieMaxAge || '1y');
|
||||||
var localeDir = options.dir || path.join(process.cwd(), 'locales');
|
var localeDir = options.dir;
|
||||||
|
var localeDirs = options.dirs || [path.join(process.cwd(), 'locales')];
|
||||||
var functionName = options.functionName || '__';
|
var functionName = options.functionName || '__';
|
||||||
var resources = {};
|
var resources = {};
|
||||||
|
|
||||||
if (fs.existsSync(localeDir)) {
|
if (localeDir && localeDirs.indexOf(localeDir) === -1) {
|
||||||
var names = fs.readdirSync(localeDir);
|
localeDirs.push(localeDir);
|
||||||
for (var i = 0; i < names.length; i++) {
|
}
|
||||||
var name = names[i];
|
|
||||||
var filepath = path.join(localeDir, name);
|
for (var i = 0; i < localeDirs.length; i ++) {
|
||||||
|
var dir = localeDirs[i];
|
||||||
|
|
||||||
|
if (!fs.existsSync(dir)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var names = fs.readdirSync(dir);
|
||||||
|
for (var j = 0; j < names.length; j++) {
|
||||||
|
var name = names[j];
|
||||||
|
var filepath = path.join(dir, name);
|
||||||
// support en_US.js => en-US.js
|
// support en_US.js => en-US.js
|
||||||
var locale = formatLocale(name.split('.')[0]);
|
var locale = formatLocale(name.split('.')[0]);
|
||||||
|
var resource = {};
|
||||||
|
|
||||||
if (name.endsWith('.js') || name.endsWith('.json')) {
|
if (name.endsWith('.js') || name.endsWith('.json')) {
|
||||||
resources[locale] = require(filepath);
|
resource = require(filepath);
|
||||||
} else if (name.endsWith('.properties')) {
|
} else if (name.endsWith('.properties')) {
|
||||||
resources[locale] = ini.parse(fs.readFileSync(filepath, 'utf8'));
|
resource = ini.parse(fs.readFileSync(filepath, 'utf8'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resources[locale] = resources[locale] || {};
|
||||||
|
merge(resources[locale], resource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
debug('init locales with %j, got %j resources', options, Object.keys(resources));
|
debug('init locales with %j, got %j resources', options, Object.keys(resources));
|
||||||
|
|
||||||
var ARRAY_INDEX_RE = /\{(\d+)\}/g;
|
var ARRAY_INDEX_RE = /\{(\d+)\}/g;
|
||||||
|
|
|
@ -30,7 +30,8 @@
|
||||||
"mm": "~1.1.0",
|
"mm": "~1.1.0",
|
||||||
"mocha": "*",
|
"mocha": "*",
|
||||||
"pedding": "~1.0.0",
|
"pedding": "~1.0.0",
|
||||||
"supertest": "~1.0.1"
|
"supertest": "~1.0.1",
|
||||||
|
"merge-descriptors": "~1.0.0"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/koajs/locales",
|
"homepage": "https://github.com/koajs/locales",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -53,7 +53,7 @@ describe('koa-locales.test.js', function () {
|
||||||
|
|
||||||
describe('custom options', function () {
|
describe('custom options', function () {
|
||||||
var app = createApp({
|
var app = createApp({
|
||||||
dir: __dirname + '/locales'
|
dirs: [__dirname + '/locales', __dirname + '/other-locales']
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should use default locale: en-US', function (done) {
|
it('should use default locale: en-US', function (done) {
|
||||||
|
@ -83,7 +83,7 @@ describe('koa-locales.test.js', function () {
|
||||||
request(app.callback())
|
request(app.callback())
|
||||||
.get('/?locale=zh-CN')
|
.get('/?locale=zh-CN')
|
||||||
.expect({
|
.expect({
|
||||||
email: '邮箱',
|
email: '邮箱1',
|
||||||
hello: 'fengmk2,今天过得如何?',
|
hello: 'fengmk2,今天过得如何?',
|
||||||
message: 'Hello fengmk2, how are you today? How was your 18.',
|
message: 'Hello fengmk2, how are you today? How was your 18.',
|
||||||
empty: '',
|
empty: '',
|
||||||
|
@ -128,7 +128,7 @@ describe('koa-locales.test.js', function () {
|
||||||
.get('/?locale=zh-CN')
|
.get('/?locale=zh-CN')
|
||||||
.set('cookie', 'locale=zh-TW')
|
.set('cookie', 'locale=zh-TW')
|
||||||
.expect({
|
.expect({
|
||||||
email: '邮箱',
|
email: '邮箱1',
|
||||||
hello: 'fengmk2,今天过得如何?',
|
hello: 'fengmk2,今天过得如何?',
|
||||||
message: 'Hello fengmk2, how are you today? How was your 18.',
|
message: 'Hello fengmk2, how are you today? How was your 18.',
|
||||||
empty: '',
|
empty: '',
|
||||||
|
@ -175,7 +175,7 @@ describe('koa-locales.test.js', function () {
|
||||||
.get('/?locale=')
|
.get('/?locale=')
|
||||||
.set('cookie', 'locale=zh-cn')
|
.set('cookie', 'locale=zh-cn')
|
||||||
.expect({
|
.expect({
|
||||||
email: '邮箱',
|
email: '邮箱1',
|
||||||
hello: 'fengmk2,今天过得如何?',
|
hello: 'fengmk2,今天过得如何?',
|
||||||
message: 'Hello fengmk2, how are you today? How was your 18.',
|
message: 'Hello fengmk2, how are you today? How was your 18.',
|
||||||
empty: '',
|
empty: '',
|
||||||
|
@ -204,7 +204,7 @@ describe('koa-locales.test.js', function () {
|
||||||
.get('/?locale=')
|
.get('/?locale=')
|
||||||
.set('Accept-Language', 'zh-CN')
|
.set('Accept-Language', 'zh-CN')
|
||||||
.expect({
|
.expect({
|
||||||
email: '邮箱',
|
email: '邮箱1',
|
||||||
hello: 'fengmk2,今天过得如何?',
|
hello: 'fengmk2,今天过得如何?',
|
||||||
message: 'Hello fengmk2, how are you today? How was your 18.',
|
message: 'Hello fengmk2, how are you today? How was your 18.',
|
||||||
empty: '',
|
empty: '',
|
||||||
|
@ -225,7 +225,7 @@ describe('koa-locales.test.js', function () {
|
||||||
.get('/?locale=')
|
.get('/?locale=')
|
||||||
.set('Accept-Language', 'zh-CN,zh;q=0.8')
|
.set('Accept-Language', 'zh-CN,zh;q=0.8')
|
||||||
.expect({
|
.expect({
|
||||||
email: '邮箱',
|
email: '邮箱1',
|
||||||
hello: 'fengmk2,今天过得如何?',
|
hello: 'fengmk2,今天过得如何?',
|
||||||
message: 'Hello fengmk2, how are you today? How was your 18.',
|
message: 'Hello fengmk2, how are you today? How was your 18.',
|
||||||
empty: '',
|
empty: '',
|
||||||
|
@ -246,7 +246,7 @@ describe('koa-locales.test.js', function () {
|
||||||
.get('/?locale=')
|
.get('/?locale=')
|
||||||
.set('Accept-Language', 'en;q=0.8, es, zh_CN')
|
.set('Accept-Language', 'en;q=0.8, es, zh_CN')
|
||||||
.expect({
|
.expect({
|
||||||
email: '邮箱',
|
email: '邮箱1',
|
||||||
hello: 'fengmk2,今天过得如何?',
|
hello: 'fengmk2,今天过得如何?',
|
||||||
message: 'Hello fengmk2, how are you today? How was your 18.',
|
message: 'Hello fengmk2, how are you today? How was your 18.',
|
||||||
empty: '',
|
empty: '',
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
module.exports = {
|
||||||
|
Email: '邮箱1'
|
||||||
|
}
|
Loading…
Reference in New Issue