UNPKG

2.28 kBJavaScriptView Raw
1import parseLanguageList from './parse-language-list'
2
3import {
4 availableLocales,
5} from './index'
6
7/**
8 * 检查单项,如果和availableLocales内的项目有匹配,返回匹配,否则返回null
9 * @param {string} input 检查项
10 * @returns 匹配的 localeId 或 null
11 */
12const checkItem = (input) => {
13 let id
14
15 // input = input.toLowerCase().replace(/_/g, '-')
16
17 availableLocales.some(_localeId => {
18 if (_localeId == input)
19 id = _localeId
20 return id
21 })
22
23 const parseSeg = (id, localeId, str) => {
24 if (id) return id
25
26 const seg = localeId.split(str)
27
28 if (!id) {
29 availableLocales.some(_localeId => {
30 if (_localeId == seg[0] + '-' + seg[seg.length - 1])
31 id = _localeId
32 return id
33 })
34 }
35
36 if (!id) {
37 availableLocales.some(_localeId => {
38 if (_localeId == seg[0])
39 id = _localeId
40 return id
41 })
42 }
43
44 return id || null
45 }
46
47 id = parseSeg(id, input, '-')
48
49 return id || null
50}
51
52/**
53 * 根据输入内容返回availableLocales内匹配的语言包ID(localeId)
54 * 如果没有匹配,返回availableLocales的第一项
55 * 注:仅为返回,没有赋值操作
56 *
57 * @param {string|array} input
58 *
59 * @returns 匹配的语言包ID localeId 或 availableLocales[0]
60 */
61const parseLocaleId = (input) => {
62
63 // 检查是否包含分号,如果是,按语言列表处理为array
64 // eg: zh-CN,zh;q=0.8,en;q=0.6
65 if (typeof input === 'string' && input.indexOf(';') > -1)
66 input = parseLanguageList(input)
67
68 // 检查是否为array
69 if (Array.isArray(input)) {
70 let id
71
72 input.some(thisId => {
73 id = checkItem(thisId)
74 return id
75 })
76
77 return id || availableLocales[0]
78 }
79
80 else if (!input && typeof navigator !== 'undefined')
81 return parseLocaleId(navigator.languages || navigator.language || navigator.browserLanguage || navigator.systemLanguage || navigator.userLanguage || availableLocales[0])
82
83 else if (input)
84 return checkItem(input) || availableLocales[0]
85
86 return availableLocales[0]
87}
88
89export default parseLocaleId