1 | import Vue from 'vue'
|
2 |
|
3 | import langEn from '../lang/en-us.js'
|
4 | import { isSSR, fromSSR } from './plugins/Platform.js'
|
5 |
|
6 | function getLocale () {
|
7 | if (isSSR === true) { return }
|
8 |
|
9 | let val =
|
10 | navigator.language ||
|
11 | navigator.languages[0] ||
|
12 | navigator.browserLanguage ||
|
13 | navigator.userLanguage ||
|
14 | navigator.systemLanguage
|
15 |
|
16 | if (val) {
|
17 | return val.toLowerCase()
|
18 | }
|
19 | }
|
20 |
|
21 | export default {
|
22 | getLocale,
|
23 |
|
24 | install ($q, queues, lang) {
|
25 | const initialLang = lang || langEn
|
26 |
|
27 | this.set = (langObject = langEn, ssrContext) => {
|
28 | const lang = {
|
29 | ...langObject,
|
30 | rtl: langObject.rtl === true,
|
31 | getLocale
|
32 | }
|
33 |
|
34 | if (isSSR === true) {
|
35 | if (ssrContext === void 0) {
|
36 | console.error('SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)')
|
37 | return
|
38 | }
|
39 |
|
40 | const dir = lang.rtl === true ? 'rtl' : 'ltr'
|
41 | const attrs = `lang=${lang.isoName} dir=${dir}`
|
42 |
|
43 | lang.set = ssrContext.$q.lang.set
|
44 |
|
45 | ssrContext.Q_HTML_ATTRS = ssrContext.Q_PREV_LANG !== void 0
|
46 | ? ssrContext.Q_HTML_ATTRS.replace(ssrContext.Q_PREV_LANG, attrs)
|
47 | : attrs
|
48 |
|
49 | ssrContext.Q_PREV_LANG = attrs
|
50 | ssrContext.$q.lang = lang
|
51 | }
|
52 | else {
|
53 | if (fromSSR === false) {
|
54 | const el = document.documentElement
|
55 | el.setAttribute('dir', lang.rtl === true ? 'rtl' : 'ltr')
|
56 | el.setAttribute('lang', lang.isoName)
|
57 | }
|
58 |
|
59 | lang.set = this.set
|
60 | $q.lang = this.props = lang
|
61 | this.isoName = lang.isoName
|
62 | this.nativeName = lang.nativeName
|
63 | }
|
64 | }
|
65 |
|
66 | if (isSSR === true) {
|
67 | queues.server.push((q, ctx) => {
|
68 | q.lang = {}
|
69 | q.lang.set = langObject => {
|
70 | this.set(langObject, ctx.ssr)
|
71 | }
|
72 |
|
73 | q.lang.set(initialLang)
|
74 | })
|
75 |
|
76 | this.isoName = initialLang.isoName
|
77 | this.nativeName = initialLang.nativeName
|
78 | this.props = initialLang
|
79 | }
|
80 | else {
|
81 | Vue.util.defineReactive($q, 'lang', {})
|
82 | this.set(initialLang)
|
83 | }
|
84 | }
|
85 | }
|