-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #49 from nyavro/react-translation-hook-support
React translation hook support
- Loading branch information
Showing
47 changed files
with
14,094 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
13,631 changes: 13,631 additions & 0 deletions
13,631
examples/react-i18n-using-hooks/package-lock.json
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
{ | ||
"name": "react-i18n-using-hooks", | ||
"version": "0.1.0", | ||
"private": true, | ||
"dependencies": { | ||
"i18next": "19.6.3", | ||
"i18next-browser-languagedetector": "5.0.0", | ||
"i18next-http-backend": "1.0.15", | ||
"react": "16.13.1", | ||
"react-dom": "16.13.1", | ||
"react-i18next": "11.7.0", | ||
"react-scripts": "3.4.1" | ||
}, | ||
"scripts": { | ||
"start": "react-scripts start", | ||
"build": "react-scripts build", | ||
"test": "react-scripts test --env=jsdom", | ||
"eject": "react-scripts eject" | ||
}, | ||
"browserslist": { | ||
"development": [ | ||
"last 2 chrome versions", | ||
"last 2 firefox versions", | ||
"last 2 edge versions" | ||
], | ||
"production": [ | ||
">1%", | ||
"last 4 versions", | ||
"Firefox ESR", | ||
"not ie < 11" | ||
] | ||
} | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<!doctype html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="utf-8"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
<meta name="theme-color" content="#000000"> | ||
<!-- | ||
manifest.json provides metadata used when your web app is added to the | ||
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/ | ||
--> | ||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json"> | ||
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> | ||
<!-- | ||
Notice the use of %PUBLIC_URL% in the tags above. | ||
It will be replaced with the URL of the `public` folder during the build. | ||
Only files inside the `public` folder can be referenced from the HTML. | ||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will | ||
work correctly both with client-side routing and a non-root public URL. | ||
Learn how to configure a non-root public URL by running `npm run build`. | ||
--> | ||
<title>React App</title> | ||
</head> | ||
<body> | ||
<noscript> | ||
You need to enable JavaScript to run this app. | ||
</noscript> | ||
<div id="root"></div> | ||
<!-- | ||
This HTML file is a template. | ||
If you open it directly in the browser, you will see an empty page. | ||
You can add webfonts, meta tags, or analytics to this file. | ||
The build step will place the bundled scripts into the <body> tag. | ||
To begin the development, run `npm start` or `yarn start`. | ||
To create a production bundle, use `npm run build` or `yarn build`. | ||
--> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"example1": { | ||
"title": "Hook titel %%%" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"header": { | ||
"title": "Willkommen zu i18n react mit hooks" | ||
}, | ||
"trans": { | ||
"description": "Aus namespace" | ||
} | ||
} |
7 changes: 7 additions & 0 deletions
7
examples/react-i18n-using-hooks/public/locales/de/translation.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{ | ||
"title": "Willkommen zu react und react-i18next", | ||
"description": { | ||
"part1": "Um loszulegen, ändere <1>src/App(DE).js</1> und speichere um neuzuladen.", | ||
"part2": "Wechsle die Sprache zwischen deutsch und englisch mit Hilfe der beiden Schalter." | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"example": { | ||
"title": "Hook title !!!" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"header": { | ||
"title": "Welcome to i18n react with hooks" | ||
}, | ||
"trans": { | ||
"description": "From namespace" | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
examples/react-i18n-using-hooks/public/locales/en/translation.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"title": "Welcome to react using react-i18next", | ||
"description": { | ||
"part1": "To get started, edit <1>src/App.js</1> and save to reload.", | ||
"part2": "Switch language between english and german using buttons above.", | ||
"part3": "Switch language" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
{ | ||
"short_name": "React App", | ||
"name": "Create React App Sample", | ||
"icons": [ | ||
{ | ||
"src": "favicon.ico", | ||
"sizes": "192x192", | ||
"type": "image/png" | ||
} | ||
], | ||
"start_url": "./index.html", | ||
"display": "standalone", | ||
"theme_color": "#000000", | ||
"background_color": "#ffffff" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
.App { | ||
text-align: center; | ||
} | ||
|
||
.App-logo { | ||
animation: App-logo-spin infinite 20s linear; | ||
height: 80px; | ||
} | ||
|
||
.App-header { | ||
background-color: #222; | ||
height: 150px; | ||
padding: 20px; | ||
color: white; | ||
} | ||
|
||
.App-intro { | ||
font-size: large; | ||
} | ||
|
||
@keyframes App-logo-spin { | ||
from { transform: rotate(0deg); } | ||
to { transform: rotate(360deg); } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import './App.css'; | ||
import React from 'react'; | ||
import {MainPage} from "./MainPage"; | ||
|
||
|
||
// here app catches the suspense from page in case translations are not yet loaded | ||
export default function App() { | ||
return React.createElement(MainPage); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import React, {Component} from 'react'; | ||
|
||
export class LegacyWelcomeClass extends Component { | ||
render() { | ||
const {t} = this.props; | ||
return <h2>{t('title')}</h2>; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
import React, {Suspense} from 'react'; | ||
import logo from "./logo.svg"; | ||
import {Trans, useTranslation, withTranslation} from "react-i18next"; | ||
import {LegacyWelcomeClass} from "./LegacyWelcomeClass"; | ||
|
||
const Welcome = withTranslation()(LegacyWelcomeClass); | ||
|
||
const TransComponent = () => ( | ||
<div style={{background: '#ABFFAB'}}> | ||
Trans: | ||
<Trans i18nKey="description.part3"> | ||
To get started, edit <code>src/App.js</code> and save to reload. ::SampleComponent:: | ||
</Trans> | ||
<br/> | ||
Trans namespace: | ||
<Trans i18nKey="main:trans.description"> | ||
(With namespace) To get started, edit <code>src/App.js</code> and save to reload. ::SampleComponent::NS:: | ||
</Trans> | ||
</div> | ||
); | ||
|
||
const UseTranslationHookComponent = () => { | ||
const { t, i18n } = useTranslation('hook'); | ||
return ( | ||
<div style={{background: '#32F0AB'}}> | ||
<div>useTranslation hook:</div> | ||
<div>{t('example.title')}</div> | ||
</div> | ||
); | ||
}; | ||
|
||
const MainComponent = () => { | ||
const { t, i18n } = useTranslation(); | ||
|
||
const changeLanguage = lng => { | ||
i18n.changeLanguage(lng); | ||
}; | ||
|
||
return ( | ||
<div className="App"> | ||
<div className="App-header"> | ||
<img src={logo} className="App-logo" alt="logo" /> | ||
<Welcome /> | ||
<button onClick={() => changeLanguage('de')}>de</button> | ||
<button onClick={() => changeLanguage('en')}>en</button> | ||
</div> | ||
<div className="App-intro"> | ||
<TransComponent/> | ||
<UseTranslationHookComponent/> | ||
</div> | ||
<div>{t('description.part2')}</div> | ||
<div>{'Namespace: ' + t('main:header.title')}</div> | ||
</div> | ||
); | ||
} | ||
|
||
// loading component for suspense fallback | ||
const Loader = () => ( | ||
<div className="App"> | ||
<img src={logo} className="App-logo" alt="logo" /> | ||
<div>loading...</div> | ||
</div> | ||
); | ||
|
||
export const MainPage = () => ( | ||
<Suspense fallback={<Loader />}> | ||
<MainComponent/> | ||
</Suspense> | ||
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import i18n from 'i18next'; | ||
import Backend from 'i18next-http-backend'; | ||
import LanguageDetector from 'i18next-browser-languagedetector'; | ||
import { initReactI18next } from 'react-i18next'; | ||
|
||
i18n | ||
// load translation using http -> see /public/locales | ||
// learn more: https://github.com/i18next/i18next-http-backend | ||
.use(Backend) | ||
// detect user language | ||
// learn more: https://github.com/i18next/i18next-browser-languageDetector | ||
.use(LanguageDetector) | ||
// pass the i18n instance to react-i18next. | ||
.use(initReactI18next) | ||
// init i18next | ||
// for all options read: https://www.i18next.com/overview/configuration-options | ||
.init({ | ||
fallbackLng: 'en', | ||
debug: true, | ||
ns: ['main'], | ||
|
||
interpolation: { | ||
escapeValue: false, // not needed for react as it escapes by default | ||
}, | ||
}); | ||
|
||
export default i18n; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
body { | ||
margin: 0; | ||
padding: 0; | ||
font-family: sans-serif; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import React from 'react'; | ||
import ReactDOM from 'react-dom'; | ||
import './index.css'; | ||
import App from './App'; | ||
|
||
// import i18n (needs to be bundled ;)) | ||
import './i18n'; | ||
|
||
ReactDOM.render(<App />, document.getElementById('root')); |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.