Skip to content
This repository was archived by the owner on Dec 31, 2024. It is now read-only.

Commit aca0ed6

Browse files
committed
⭐ new(config): translation miss capturing configration
Closes #54
1 parent fdf9ab5 commit aca0ed6

4 files changed

Lines changed: 58 additions & 3 deletions

File tree

src/config.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { getWatcher, getDep } from './observer'
22

33
let fallback // fallback lang
4+
let missingHandler = null // missing handler
45

56
export default function (Vue, langVM, lang) {
67
const { bind } = Vue.util
@@ -35,4 +36,12 @@ export default function (Vue, langVM, lang) {
3536
get: () => { return fallback },
3637
set: val => { fallback = val }
3738
})
39+
40+
// define Vue.config.missingHandler configration
41+
Object.defineProperty(Vue.config, 'missingHandler', {
42+
enumerable: true,
43+
configurable: true,
44+
get: () => { return missingHandler },
45+
set: val => { missingHandler = val }
46+
})
3847
}

src/extend.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,12 @@ export default function (Vue) {
8181
}
8282

8383

84-
function warnDefault (key) {
84+
function warnDefault (lang, key, vm) {
8585
if (process.env.NODE_ENV !== 'production') {
8686
warn('Cannot translate the value of keypath "' + key + '". '
8787
+ 'Use the value of keypath as default')
8888
}
89+
Vue.config.missingHandler && Vue.config.missingHandler.apply(null, [lang, key, vm])
8990
return key
9091
}
9192

@@ -117,7 +118,7 @@ export default function (Vue) {
117118
if (!key) { return '' }
118119
const { lang, fallback, params } = parseArgs(...args)
119120
return translate(getAssetLocale, lang, fallback, key, params)
120-
|| warnDefault(key)
121+
|| warnDefault(lang, key, null)
121122
}
122123

123124
/**
@@ -153,7 +154,7 @@ export default function (Vue) {
153154
if (res) { return res }
154155
}
155156
return translate(getAssetLocale, lang, fallback, key, params)
156-
|| warnDefault(key)
157+
|| warnDefault(lang, key, this)
157158
}
158159

159160
/**

test/specs/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ Vue.use(plugin)
1010
require('./i18n')
1111
require('./asset')
1212
require('./component')
13+
require('./missing')
1314
require('./issues')

test/specs/missing.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import assert from 'power-assert'
2+
import Vue from 'vue'
3+
4+
5+
describe('missing', () => {
6+
let lang
7+
beforeEach(() => {
8+
lang = Vue.config.lang
9+
Vue.config.lang = 'en'
10+
})
11+
12+
afterEach(done => {
13+
Vue.config.lang = lang
14+
Vue.config.missingHandler = null
15+
Vue.nextTick(done)
16+
})
17+
18+
describe('global', () => {
19+
it('should be handled translate missing', done => {
20+
Vue.config.missingHandler = (lang, key, vm) => {
21+
assert.equal('en', lang)
22+
assert.equal('foo.bar.buz', key)
23+
assert(vm === null)
24+
done()
25+
}
26+
27+
Vue.t('foo.bar.buz')
28+
})
29+
})
30+
31+
describe('instance', () => {
32+
it('should be handled translate missing', done => {
33+
const vm = new Vue()
34+
Vue.config.missingHandler = (lang, key, instance) => {
35+
assert.equal('en', lang)
36+
assert.equal('foo.bar.buz', key)
37+
assert(vm === instance)
38+
done()
39+
}
40+
41+
vm.$t('foo.bar.buz')
42+
})
43+
})
44+
})

0 commit comments

Comments
 (0)