forked from ripple/explorer
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathlanguageDetector.js
More file actions
74 lines (63 loc) · 1.79 KB
/
languageDetector.js
File metadata and controls
74 lines (63 loc) · 1.79 KB
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
import { normalizeLanguage } from './containers/shared/utils'
const queryStringKey = 'lng'
const localStorageKey = 'i18nextLng'
let hasLocalStorageSupport
try {
hasLocalStorageSupport =
window !== 'undefined' && window.localStorage !== null
const testKey = 'i18next.translate.boo'
window.localStorage.setItem(testKey, 'foo')
window.localStorage.getItem(testKey)
window.localStorage.removeItem(testKey)
} catch (e) {
hasLocalStorageSupport = false
}
const getFromQS = () => {
if (typeof window !== 'undefined') {
const query = window.location.search.substring(1)
const params = query.split('&')
for (let i = 0; i < params.length; i += 1) {
const parts = params[i].split('=')
if (parts[0] === queryStringKey && parts[1]) {
return normalizeLanguage(parts[1])
}
}
}
return undefined
}
const getFromLocalStorage = () =>
hasLocalStorageSupport
? normalizeLanguage(window.localStorage.getItem(localStorageKey))
: undefined
const getFromNavigator = () => {
const found = []
let normalized
if (typeof navigator !== 'undefined') {
if (navigator.userLanguage) {
found.push(navigator.userLanguage)
}
if (navigator.language) {
found.push(navigator.language)
}
if (navigator.languages) {
for (let i = 0; i < navigator.languages.length; i += 1) {
found.push(navigator.languages[i])
}
}
}
found.every((lang) => {
normalized = normalizeLanguage(lang)
return !normalized
})
return normalized
}
const languageDetector = {
init: Function.prototype,
type: 'languageDetector',
detect: () =>
getFromQS() || getFromLocalStorage() || getFromNavigator() || 'en-US',
cacheUserLanguage: (lng) => {
window.localStorage.setItem(localStorageKey, lng)
},
}
export default languageDetector