-
Notifications
You must be signed in to change notification settings - Fork 171
Expand file tree
/
Copy pathlanguage.js
More file actions
82 lines (75 loc) · 2.54 KB
/
language.js
File metadata and controls
82 lines (75 loc) · 2.54 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
75
76
77
78
79
80
81
82
import React from "react";
import { connect } from "react-redux";
import i18n from "i18next";
import { controlsWidth } from "../../util/globals";
import { analyticsControlsEvent } from "../../util/googleAnalytics";
import { CHANGE_LANGUAGE } from "../../actions/types";
import CustomSelect from "./customSelect";
@connect((state) => {
return {
metadata: state.metadata,
language: state.general.language
};
})
class Language extends React.Component {
async ensureLanguageResources(lang) {
for (const ns of ["language", "sidebar", "translation"]) {
if (!i18n.hasResourceBundle(lang, ns)) {
try {
const res = await import(/* webpackMode: "lazy-once" */ `../../locales/${lang}/${ns}.json`);
i18n.addResourceBundle(lang, ns, res.default);
} catch (err) {
console.error(`Language ${lang} not found!`);
}
}
}
}
async UNSAFE_componentWillMount() {
if (!this.props.language || this.props.language === "en") return;
await this.ensureLanguageResources(this.props.language);
i18n.changeLanguage(this.props.language);
}
getlanguageOptions() {
const languages = [
{value: "de", label: "Deutsch"},
{value: "en", label: "English"},
{value: "zh", label: "中文"},
{value: "es", label: "Español"},
{value: "ru", label: "Русский"},
{value: "lt", label: "Lietuvių"},
{value: "pt", label: "Português"},
{value: "fr", label: "Français"},
{value: "tr", label: "Türkçe"},
{value: "ja", label: "日本語"},
{value: "ar", label: "العربية"},
{value: "it", label: "Italiano"},
{value: "pl", label: "Polski"}
];
return languages;
}
async changeLanguage(language) {
if (!language || language === this.props.language) return;
analyticsControlsEvent("change-language");
await this.ensureLanguageResources(language);
i18n.changeLanguage(language);
this.props.dispatch({ type: CHANGE_LANGUAGE, data: language });
}
render() {
const selectOptions = this.getlanguageOptions();
return (
<div style={{paddingBottom: 100, width: controlsWidth, fontSize: 14}}>
<CustomSelect
name="selectLanguage"
id="selectLanguage"
value={selectOptions.filter(({value}) => value === this.props.language)}
options={selectOptions}
isClearable={false}
isSearchable={false}
isMulti={false}
onChange={(opt) => {this.changeLanguage(opt.value);}}
/>
</div>
);
}
}
export default Language;