/
lang.js
108 lines (88 loc) · 2.69 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
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
96
97
98
99
100
101
102
103
104
105
106
107
108
import defineReactivePlugin from './utils/private/define-reactive-plugin.js'
// no extension on purpose for next one:
import defaultLang from '../lang/en-US'
function getLocale () {
if (__QUASAR_SSR_SERVER__) { return }
const val = Array.isArray(navigator.languages) === true && navigator.languages.length > 0
? navigator.languages[ 0 ]
: navigator.language
if (typeof val === 'string') {
return val.split(/[-_]/).map((v, i) => (
i === 0
? v.toLowerCase()
: (
i > 1 || v.length < 4
? v.toUpperCase()
: (v[ 0 ].toUpperCase() + v.slice(1).toLowerCase())
)
)).join('-')
}
}
const Plugin = defineReactivePlugin({
__langPack: {}
}, {
getLocale,
set (langObject = defaultLang, ssrContext) {
const lang = {
...langObject,
rtl: langObject.rtl === true,
getLocale
}
if (__QUASAR_SSR_SERVER__) {
if (ssrContext === void 0) {
console.error('SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)')
return
}
lang.set = ssrContext.$q.lang.set
if (ssrContext.$q.config?.lang?.noHtmlAttrs !== true) {
const dir = lang.rtl === true ? 'rtl' : 'ltr'
const attrs = `lang=${ lang.isoName } dir=${ dir }`
ssrContext._meta.htmlAttrs = ssrContext.__qPrevLang !== void 0
? ssrContext._meta.htmlAttrs.replace(ssrContext.__qPrevLang, attrs)
: attrs
ssrContext.__qPrevLang = attrs
}
ssrContext.$q.lang = lang
}
else {
lang.set = Plugin.set
if (Plugin.__langConfig?.noHtmlAttrs !== true) {
const el = document.documentElement
el.setAttribute('dir', lang.rtl === true ? 'rtl' : 'ltr')
el.setAttribute('lang', lang.isoName)
}
Object.assign(Plugin.__langPack, lang)
Plugin.props = lang
Plugin.isoName = lang.isoName
Plugin.nativeName = lang.nativeName
}
},
install ({ $q, lang, ssrContext }) {
if (__QUASAR_SSR_SERVER__) {
const initialLang = lang || defaultLang
$q.lang = {}
$q.lang.set = langObject => {
this.set(langObject, ssrContext)
}
$q.lang.set(initialLang)
// one-time SSR server operation
if (this.isoName !== initialLang.isoName) {
this.isoName = initialLang.isoName
this.nativeName = initialLang.nativeName
this.props = initialLang
}
}
else {
$q.lang = Plugin.__langPack
Plugin.__langConfig = $q.config?.lang
if (this.__installed === true) {
lang !== void 0 && this.set(lang)
}
else {
this.set(lang || defaultLang)
}
}
}
})
export default Plugin
export { defaultLang }