Skip to content

Commit 83d9f14

Browse files
aonkonDeyzfletch
authored andcommitted
adding I18n (#3)
* add i18n support * update dependencies
1 parent 05beeeb commit 83d9f14

File tree

7 files changed

+1300
-1056
lines changed

7 files changed

+1300
-1056
lines changed

package.json

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@
77
"beta-code-js": "^1.0.8",
88
"bootstrap": "^4.3.1",
99
"eslint-config-airbnb": "^18.0.1",
10-
"eslint-plugin-jest": "^22.15.2",
10+
"eslint-plugin-jest": "^23.0.4",
1111
"gh-pages": "^2.1.1",
12-
"perseids-react-components": "^0.1.1",
12+
"perseids-react-components": "^0.2.0",
1313
"prop-types": "^15.7.2",
14-
"react": "^16.9.0",
15-
"react-clipboard.js": "^2.0.13",
16-
"react-dom": "^16.9.0",
17-
"react-router-dom": "^5.0.1",
18-
"react-scripts": "3.1.1",
14+
"react": "^16.12.0",
15+
"react-clipboard.js": "^2.0.16",
16+
"react-dom": "^16.12.0",
17+
"react-router-dom": "^5.1.2",
18+
"react-router-i18n": "^0.1.2",
19+
"react-scripts": "3.2.0",
1920
"typeface-tinos": "^0.0.72"
2021
},
2122
"scripts": {

src/components/App/App.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import React from 'react';
22
import { PerseidsHeader, PerseidsFooter } from 'perseids-react-components';
33
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
44

5+
import I18n from '../I18n';
6+
57
import styles from './App.module.css';
68

79
import Converter from '../Converter';
@@ -10,7 +12,7 @@ const App = () => (
1012
<Router basename={process.env.PUBLIC_URL}>
1113
<>
1214
<PerseidsHeader>
13-
Greek Beta Code Converter
15+
<I18n t="header.title" />
1416
</PerseidsHeader>
1517
<main role="main" className={styles.main}>
1618
<div className={`container ${styles.container}`}>

src/components/Converter/Converter.js

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import React, { Component } from 'react';
2+
import { shape, string } from 'prop-types';
23
import { greekToBetaCode, betaCodeToGreek } from 'beta-code-js';
34
import Clipboard from 'react-clipboard.js';
45

6+
import I18n from '../I18n';
7+
58
import styles from './Converter.module.css';
69

710
class Converter extends Component {
@@ -37,13 +40,14 @@ class Converter extends Component {
3740

3841
render() {
3942
const { beta, unicode } = this.state;
43+
const { location } = this.props;
4044

4145
return (
4246
<>
4347
<div className="row pt-4 mb-3">
4448
<div className="col-12 text-center">
4549
<h1 className="h3 font-weight-normal">
46-
Greek Beta Code Converter
50+
<I18n t="converter.title" />
4751
</h1>
4852
</div>
4953
</div>
@@ -52,18 +56,18 @@ class Converter extends Component {
5256
<div className="col-6">
5357
<div className="d-block d-sm-none">
5458
<h4 className="text-center">
55-
Unicode
59+
<I18n t="converter.smallScreenUnicode" />
5660
</h4>
5761
</div>
5862
<div className="d-none d-sm-block">
5963
<h4 className="text-center">
60-
Greek Unicode
64+
<I18n t="converter.unicode" />
6165
</h4>
6266
</div>
6367
<textarea
6468
className={`${styles.textarea} form-control input-lg clipboard-target-unicode`}
6569
type="text"
66-
placeholder="μῆνιν ἄειδε θεὰ ..."
70+
placeholder={I18n.getTranslation(location, 'converter.placeholderUnicode')}
6771
autoComplete="off"
6872
autoCorrect="off"
6973
autoCapitalize="off"
@@ -74,11 +78,13 @@ class Converter extends Component {
7478
</div>
7579

7680
<div className="col-6">
77-
<h4 className="text-center">Beta Code</h4>
81+
<h4 className="text-center">
82+
<I18n t="converter.betacode" />
83+
</h4>
7884
<textarea
7985
className={`${styles.textarea} form-control input-lg clipboard-target-betacode`}
8086
type="text"
81-
placeholder="mh=nin a)/eide qea\ ..."
87+
placeholder={I18n.getTranslation(location, 'converter.placeholderBetacode')}
8288
autoComplete="off"
8389
autoCorrect="off"
8490
autoCapitalize="off"
@@ -95,7 +101,7 @@ class Converter extends Component {
95101
className="btn btn-block btn-success mb-4 mt-2"
96102
data-clipboard-target=".clipboard-target-unicode"
97103
>
98-
Copy to Clipboard
104+
<I18n t="converter.copy" />
99105
</Clipboard>
100106
</div>
101107
<div className="col-6">
@@ -104,7 +110,7 @@ class Converter extends Component {
104110
className="btn btn-block btn-success mb-4 mt-2"
105111
data-clipboard-target=".clipboard-target-betacode"
106112
>
107-
Copy to Clipboard
113+
<I18n t="converter.copy" />
108114
</Clipboard>
109115
</div>
110116
</div>
@@ -113,4 +119,10 @@ class Converter extends Component {
113119
}
114120
}
115121

122+
Converter.propTypes = {
123+
location: shape({
124+
search: string.isRequired,
125+
}).isRequired,
126+
};
127+
116128
export default Converter;
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
import React from 'react';
2+
import { MemoryRouter, Route } from 'react-router-dom';
23
import { render } from 'react-dom';
34

45
import Converter from './Converter';
56

67
it('renders without crashing', () => {
78
const div = window.document.createElement('div');
8-
render(<Converter />, div);
9+
10+
const component = (
11+
<MemoryRouter initialEntries={['/']}>
12+
<Route path="/" component={Converter} />
13+
</MemoryRouter>
14+
);
15+
16+
render(component, div);
917
});

src/components/I18n/I18n.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { createI18n } from 'react-router-i18n';
2+
3+
const locales = ['en'];
4+
5+
const translations = {
6+
en: {
7+
header: {
8+
title: 'Greek Beta Code Converter',
9+
},
10+
converter: {
11+
title: 'Greek Beta Code Converter',
12+
betacode: 'Beta Code',
13+
unicode: 'Greek Unicode',
14+
smallScreenUnicode: 'Unicode',
15+
copy: 'Copy to Clipboard',
16+
placeholderUnicode: 'μῆνιν ἄειδε θεὰ ...',
17+
placeholderBetacode: 'mh=nin a)/eide qea ...',
18+
},
19+
},
20+
};
21+
22+
const I18n = createI18n(
23+
locales,
24+
translations,
25+
);
26+
27+
export default I18n;

src/components/I18n/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import I18n from './I18n';
2+
3+
export default I18n;

0 commit comments

Comments
 (0)