반응형
들어가기 전
- 다국어 처리를 위해 i18next와 react-i18next 모듈을 활용
모듈 설치
# yarn으로 설치
yarn add react-i18next i18next
# npm으로 설치
npm install react-i18next i18next --save
translation.en.json
- <프로젝트>/src/lang/translation.en.json
{
"message.hello": "Hello",
"n.selected": "{{n}} selected."
}
translation.ko.json
- <프로젝트>/src/lang/translation.ko.json
{
"message.hello": "안녕하세요",
"n.selected": "{{n}} 개 선택됨."
}
i18n.js
- <프로젝트>/src/lang/i18n.js
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import translationEn from './translation.en';
import translationKo from './translation.ko';
const resources = {
en: {
translation: translationEn
},
ko: {
translation: translationKo
}
};
i18n.use(initReactI18next) // passes i18n down to react-i18next
.init({
resources,
lng: "en",
fallbackLng: 'en',
keySeparator: false, // we do not use keys in form messages.welcome
interpolation: {
escapeValue: false // react already safes from xss
}
});
export default i18n;
App.js
- <프로젝트>/src/App.js
import React from 'react';
import {withTranslation} from "react-i18next";
const App = ({t, i18n}) => {
return (
<div>
<div>{t('message.hello')}</div>
<div>{t('n.selected', {n: 5})}</div>
<div>
<button onClick={() => {i18n.changeLanguage('en-US')}}>English</button>
<button onClick={() => {i18n.changeLanguage('ko-KR')}}>Korean</button>
<button onClick={() => {i18n.changeLanguage('???')}}>Other</button>
</div>
</div>
);
};
export default withTranslation()(App);
// 요즘은 아래 방식을 많이 사용
import React from 'react';
import { useTranslation } from 'react-i18next';
const App = ({ t, i18n }) => {
const { t, i18n } = useTranslation();
return (
<div>
<div>{t('message.hello')}</div>
<div>{t('n.selected', { n: 5 })}</div>
<div>
<button onClick={() => { i18n.changeLanguage('en-US') }}>English</button>
<button onClick={() => { i18n.changeLanguage('ko-KR') }}>Korean</button>
<button onClick={() => { i18n.changeLanguage('???') }}>Other</button>
</div>
</div>
);
};
export default App;
index.js
- <프로젝트>/src/index.js
# 아래 임포트 구문 추가
import './lang/i18n';
다국어 데이터를 API로 받아 사용하기
모듈 설치
yarn add i18next-http-backend
i18n.js
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import Backend from 'i18next-http-backend';
i18n.use(Backend)
.use(initReactI18next)
.init({
lng: 'ko',
fallbackLng: 'ko',
keySeparator: false, // we do not use keys in form messages.welcome
interpolation: {
escapeValue: false, // react already safes from xss
},
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json',
},
});
export default i18n;
참고
반응형
'Development > React' 카테고리의 다른 글
[React] material-ui (0) | 2019.05.28 |
---|---|
[React] styled-components (0) | 2019.05.28 |
[React] useContext (0) | 2019.05.23 |
[React] Storybook (0) | 2019.05.20 |
[React] Router (0) | 2019.05.17 |