This repository was archived by the owner on May 19, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathdirective.js
95 lines (75 loc) · 1.86 KB
/
directive.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* eslint-disable no-param-reassign, no-unused-vars */
import { warn, deprecate } from './utils';
function equalLanguage(el, vnode) {
const vm = vnode.context;
return el._i18nLanguage === vm.$i18n.i18next.language;
}
function equalValue(value, oldValue) {
if (value === oldValue) {
return true;
}
if (value && oldValue) {
return (
value.path === oldValue.path &&
value.language === oldValue.language &&
value.args === oldValue.args
);
}
}
function assert(vnode) {
const vm = vnode.context;
if (!vm.$i18n) {
warn('No VueI18Next instance found in the Vue instance');
return false;
}
return true;
}
function parseValue(value) {
let path;
let language;
let args;
if (typeof value === 'string') {
path = value;
} else if (toString.call(value) === '[object Object]') {
({ path, language, args } = value);
}
return { path, language, args };
}
function t(el, binding, vnode) {
const { value } = binding;
const { path, language, args } = parseValue(value);
if (!path && !language && !args) {
warn('v-t: invalid value');
return;
}
if (!path) {
warn('v-t: "path" is required');
return;
}
if (language) {
deprecate(`v-t: "language" is deprecated.Use the "lng" property in args.
https://www.i18next.com/overview/configuration-options#configuration-options`);
}
const vm = vnode.context;
el.textContent = vm.$i18n.i18next.t(path, {
...(language ? { lng: language } : {}),
...args
});
el._i18nLanguage = vm.$i18n.i18next.language;
}
export function bind(el, binding, vnode) {
if (!assert(vnode)) {
return;
}
t(el, binding, vnode);
}
export function update(el, binding, vnode, oldVNode) {
if (equalLanguage(el, vnode) && equalValue(binding.value, binding.oldValue)) {
return;
}
t(el, binding, vnode);
}
export default {
bind,
update
};