React & typescript 이용 프로젝트에서 번역 기능을 구현해달라는 요청이 들어왔다.
google translate를 이용해서 페이지 전체를 자동 번역하는 방법을 사용해도 된다 했으나
google translate는 기본 구글 제공 형태에서 커스텀이 쉽지 않고 select box로만 가능!
내가 진행하는 프로젝트에서는 번역이 버튼 형태로 구현되어야 했음
찾아보니 i18n을 이요해 직접 하나하나 번역하는 것이 국룰인것 같았다.
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import translationEn from './trans.en.json'
import translationKo from './trans.ko.json'
const resource = {
en: {
translation: translationEn
},
ko: {
translation: translationKo
}
};
i18n
.use(initReactI18next) // passes i18n down to react-i18next
.init({
resources: resource,
lng: "ko",
fallbackLng: 'ko',
// ns: ['translation'],
// defaultNS: "translation",
debug: false,
keySeparator: false, // we do not use keys in form messages.welcome
interpolation: {
escapeValue: false // react already safes from xss
}
});
export default i18n;
//한국어 파일
{
"modify":"수정",
"completion":"완료",
"cancle":"취소",
"check":"확인",
"next":"다음",
}
//영어 파일
{
"modify":"modify",
"completion":"completion",
"cancle":"cancle",
"check":"confirm",
"next":"next",
}
const App = () => {
const lang = localStorage.getItem("lang");
const changeLanguage = (lang: string) => {
i18next.changeLanguage(lang);
};
useEffect(() => {
if (lang === "english") {
changeLanguage("en");
} else {
changeLanguage("ko");
}
}, []);
}
const { t } = useTranslation();
...
<span>{t("tile1")}</span>