-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.jsx
105 lines (94 loc) · 2.3 KB
/
app.jsx
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
import React from 'react';
import ReactDOM from 'react-dom';
import Translator from '@u-wave/translate';
import { TranslateProvider, translate, Interpolate } from '@u-wave/react-translate'; // eslint-disable-line import/no-unresolved
const NAME = 'Example User';
const english = {
title: 'My App',
welcome: 'Welcome {{name}}!',
languages: {
en: 'English',
nl: 'Nederlands (Dutch)',
},
};
const dutch = {
title: 'Mijn App',
welcome: 'Welkom {{name}}!',
languages: {
en: 'Engels (English)',
nl: 'Nederlands (Dutch)',
},
};
const availableLanguages = { en: english, nl: dutch };
const LanguagePicker = translate()(({
t, languages, currentLanguage, onChange,
}) => (
<div className="collection">
{languages.map((id) => (
<button
type="button"
className={`collection-item ${id === currentLanguage ? 'active' : ''}`}
onClick={() => onChange(id)}
>
{t(`languages.${id}`)}
</button>
))}
</div>
));
const AppView = translate()(({
t, languages, language, onChangeLanguage,
}) => (
<div className="row">
<div className="col s3">
<LanguagePicker
languages={languages}
currentLanguage={language}
onChange={onChangeLanguage}
/>
</div>
<div className="col s9 center-align">
<h2>
{t('title')}
</h2>
<p>
<Interpolate
i18nKey="welcome"
name={(
<strong>
{NAME}
</strong>
)}
/>
</p>
</div>
</div>
));
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
language: 'en',
translator: new Translator(availableLanguages.en),
};
this.handleChangeLanguage = this.handleChangeLanguage.bind(this);
}
handleChangeLanguage(language) {
this.setState({
language,
translator: new Translator(availableLanguages[language]),
});
}
render() {
const { language, translator } = this.state;
return (
<TranslateProvider translator={translator}>
<AppView
languages={Object.keys(availableLanguages)}
language={language}
onChangeLanguage={this.handleChangeLanguage}
/>
</TranslateProvider>
);
}
}
ReactDOM.render(<App />, document.getElementById('example'));