/
lang.js
68 lines (57 loc) · 1.47 KB
/
lang.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
import Vue from 'vue'
import langEn from '../lang/en-us.js'
import { isSSR } from './plugins/Platform.js'
export default {
install ($q, queues, lang) {
if (isSSR === true) {
queues.server.push((q, ctx) => {
const
opt = {
lang: q.lang.isoName,
dir: q.lang.rtl === true ? 'rtl' : 'ltr'
},
fn = ctx.ssr.setHtmlAttrs
if (typeof fn === 'function') {
fn(opt)
}
else {
ctx.ssr.Q_HTML_ATTRS = Object.keys(opt)
.map(key => `${key}=${opt[key]}`)
.join(' ')
}
})
}
this.set = (lang = langEn) => {
lang.set = this.set
lang.getLocale = this.getLocale
lang.rtl = lang.rtl || false
if (isSSR === false) {
const el = document.documentElement
el.setAttribute('dir', lang.rtl ? 'rtl' : 'ltr')
el.setAttribute('lang', lang.isoName)
}
if (isSSR === true || $q.lang !== void 0) {
$q.lang = lang
}
else {
Vue.util.defineReactive($q, 'lang', lang)
}
this.isoName = lang.isoName
this.nativeName = lang.nativeName
this.props = lang
}
this.set(lang)
},
getLocale () {
if (isSSR === true) { return }
let val =
navigator.language ||
navigator.languages[0] ||
navigator.browserLanguage ||
navigator.userLanguage ||
navigator.systemLanguage
if (val) {
return val.toLowerCase()
}
}
}