-
[React-i18next] 웹페이지에 다국어 적용하기 (with: typescript)프론트엔드 개발자가 될거야./라이브러리 2023. 3. 2. 21:17
현재 개발중인 웹페이지는 한국은 물론이고 영어권, 중국, 일본까지 사용자를 가지고 있다.
한국어, 영어, 중국어, 일본어를 모두 웹페이지에 그려내야한다.
어떻게 할 수 있을까?
React-i18next
다국어 처리를 해주는 라이브러리이다.
react-i18next는 React 애플리케이션에서 다국어 지원을 제공하는 i18next 라이브러리의 React 바인딩이다.React-i18next 사용법
1. initReactI18next로 세팅
src > utils > i18n > i18n.ts
import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import en from "./lang/en.json"; import jp from "./lang/jp.json"; import cn from "./lang/cn.json"; import ko from "./lang/ko.json"; const resources = { en: { translation: en, }, ko: { translation: ko, }, cn: { translation: cn, }, jp: { translation: jp, }, }; const userLanguage = window.navigator.language; i18n.use(initReactI18next).init({ resources, // lng: localStorage.getItem("language") || userLanguage || "en", lng: "en", fallbackLng: "en", keySeparator: false, interpolation: { escapeValue: false, }, }); export default i18n; export const languages = ["en", "ko", "cn", "jp"] as const; export type Languages = (typeof languages)[number]; // 'en' | 'ko'
lng는 초기 언어를 설정해주고
fallbackLng는 지원되지 않는 언어가 요청되면 사용할 기본 언어를 설정해준다.
resources는 번역 데이터를 나타낸다.
src > utils > i18n > lang > en.json
{ "MyAssets": "My Assets", "Refresh" : "Refresh", "TotalValue": "Total Value", "SeeDetail": "See detail", }
src > utils > i18n > lang > ko.json
{ "MyAssets": "나의 현황", "Refresh" : "새로고침", "TotalValue": "보유자산 현황", "SeeDetail": "자세히 보기", }
2. index.tsx
꼭!!! index.tsx에서 위에서 작성한 i18n를 import 해주어야한다.
import "./utils/i18n/locales/i18n";
import React from "react"; import ReactDOM from "react-dom/client"; import { StyledEngineProvider } from "@mui/styled-engine"; import { QueryClient, QueryClientProvider } from "react-query"; import { RecoilRoot } from "recoil"; import App from "./App"; import "./utils/i18n/locales/i18n"; const queryClient = new QueryClient(); const root = ReactDOM.createRoot( document.getElementById("root") as HTMLElement ); root.render( <QueryClientProvider client={queryClient}> <StyledEngineProvider injectFirst> <RecoilRoot> <App /> </RecoilRoot> </StyledEngineProvider> </QueryClientProvider> );
내가 이 부분을 안해서 몇시간동안 알 수 없는 에러를 잡고 있었다...
react::18next:: You will need to pass in an i18next instance by using initReactI18next
3. 컴포넌트에서 사용하기
useTranslation훅을 사용하여 i18n 번역 함수를 가져올 수 있다.
import { useTranslation } from "react-i18next"; function Page() { const { t } = useTranslation(); return ( <div>{t("Refresh")}</div> ) }
{t("Refresh")} 이런식으로 사용해주자.
4. 언어 변경하기
i18n.changeLanguage함수를 사용할 수 있다.
import { useTranslation } from "react-i18next"; function GlobalMenu() { const { i18n } = useTranslation(); const handleChangeLanguage = (lang: string) => { i18n.changeLanguage(lang); }; return ( <ul> <li onClick={() => handleChangeLanguage('ko')}>한국어</li> <li onClick={() => handleChangeLanguage('en')}>영어</li> </ul> ) }
'프론트엔드 개발자가 될거야. > 라이브러리' 카테고리의 다른 글
[React-i18next] 웹페이지에 '더 효율적으로' 다국어 적용하기 (with: typescript) (0) 2023.03.09 [Framer Motion] animation의 최강자 Framer Motion 알아보기, Animation/Variants/Gestures/Drag (0) 2023.01.08 [react-beautiful-dnd] 칸반보드 만들기, react-beautiful-dnd 상세설명 (0) 2023.01.07 리액트 캘린더 라이브러리 Datepicker 사용법, 커스텀하기 (0) 2022.08.07