feat: Support nested locale keys.

Example:

```js
{
  model: {
    user: {
      name: 'Real Name',
      createdAt: 'Joined At'
    }
  }
}
```

```js
ctx.__('model.user.name');
ctx.__('model.user.createdAt');
```

The before:

```js
{
  'model.user.name': 'Real Name',
  'model.user.createdAt', 'Joined At'
}
```

Benchmarks:

```
Deeps:  9
  2 tests completed.

  direct read a key x 85,993,593 ops/sec ±1.89% (96 runs sampled)
  by nested         x  4,203,837 ops/sec ±0.98% (93 runs sampled)
```
This commit is contained in:
Jason Lee
2015-09-17 18:20:10 +08:00
parent 1c347630f1
commit 58324a11ff
6 changed files with 193 additions and 3 deletions

View File

@@ -45,6 +45,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "model.user.fields.gender",
"name": "model.user.fields.name"
})
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=\w+/)
.expect(200, done);
@@ -73,6 +75,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "model.user.fields.gender",
"name": "model.user.fields.name"
})
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=\w+/)
.expect(200, done);
@@ -96,6 +100,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "性别",
"name": "姓名"
})
.expect('Set-Cookie', /^locale=zh\-cn; path=\/; expires=\w+/)
.expect(200, done);
@@ -118,6 +124,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "model.user.fields.gender",
"name": "model.user.fields.name"
})
.expect('Set-Cookie', /^locale=de; path=\/; expires=\w+/)
.expect(200, done);
@@ -141,6 +149,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "性别",
"name": "姓名"
})
.expect('Set-Cookie', /^locale=zh\-cn; path=\/; expires=\w+/)
.expect(200, done);
@@ -163,6 +173,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "model.user.fields.gender",
"name": "model.user.fields.name"
})
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=\w+/)
.expect(200, done);
@@ -188,6 +200,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "性别",
"name": "姓名"
})
.expect(function (res) {
assert(!res.headers['set-cookie']);
@@ -217,6 +231,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "性别",
"name": "姓名"
})
.expect('Set-Cookie', /^locale=zh\-cn; path=\/; expires=\w+/)
.expect(200, done);
@@ -238,6 +254,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "性别",
"name": "姓名"
})
.expect('Set-Cookie', /^locale=zh\-cn; path=\/; expires=\w+/)
.expect(200, done);
@@ -259,6 +277,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "性别",
"name": "姓名"
})
.expect('Set-Cookie', /^locale=zh\-cn; path=\/; expires=\w+/)
.expect(200, done);
@@ -282,6 +302,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "model.user.fields.gender",
"name": "model.user.fields.name"
})
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=\w+/)
.expect(200, done);
@@ -305,6 +327,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "model.user.fields.gender",
"name": "model.user.fields.name"
})
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=\w+/)
.expect(200, done);
@@ -330,6 +354,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "性別",
"name": "姓名"
})
.expect('Set-Cookie', /^locale=zh\-tw; path=\/; expires=\w+/)
.expect(200, done);
@@ -355,6 +381,8 @@ describe('koa-locales.test.js', function () {
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
"gender": "model.user.fields.gender",
"name": "model.user.fields.name"
})
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=\w+/)
.expect(200, done);
@@ -371,6 +399,8 @@ function createApp(options) {
app.use(function* () {
this.body = {
email: this[fname]('Email'),
name: this[fname]('model.user.fields.name'),
gender: this[fname]('model.user.fields.gender'),
hello: this[fname]('Hello %s, how are you today?', 'fengmk2'),
message: this[fname]('Hello %s, how are you today? How was your %s.', 'fengmk2', 18),
empty: this[fname](),