UNPKG

2.05 kBJavaScriptView Raw
1import Vue from 'vue'
2
3import langEn from '../lang/en-us.js'
4import { isSSR, fromSSR } from './plugins/Platform.js'
5
6function 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
21export 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}