user의 기본 언어로 설정된 언어로 간단히 다국어 지원하도록 설정해보았다.
navigator.language
일단 웹에서 지원하는 navigator.language을 사용한다.
import React, { createContext, useContext, useState, useEffect } from 'react';
import { texts } from './texts';
export type Language = 'en' | 'ko';
interface LanguageContextType {
language: Language;
texts: { [key: string]: string };
t: (key: string) => string;
}
const LanguageContext = createContext<LanguageContextType | undefined>(undefined);
export const LanguageProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [language, setLanguage] = useState<Language>('en');
const [currentTexts, setCurrentTexts] = useState<{ [key: string]: string }>(texts['en']);
useEffect(() => {
const userLanguage = navigator.language.split('-')[0] as Language;
setLanguage(userLanguage);
setCurrentTexts(texts[userLanguage]);
}, []);
const t = (key: string) => currentTexts[key] || key;
return (
<LanguageContext.Provider value={{ language, texts: currentTexts, t }}>
{children}
</LanguageContext.Provider>
);
};
export const useLanguage = () => {
const context = useContext(LanguageContext);
if (!context) {
throw new Error('useLanguage must be used within a LanguageProvider');
}
return context;
};
그리고 간단하게 text는 object으로 만들어놓고 가져오는 방법이 있다.
import { Language } from './LanguageContext';
export const texts: { [lang in Language]: { [key: string]: string } } = {
en: {
title: 'title',
greeting: 'hello'
},
ko: {
title: '제목',
greeting: '안녕'
}
};
이런 식으로 쭉쭉 작성해놓은 다음
const { t } = useLanguage();
return (
<div>
<h1>{t('title')}</h1>
<p>{t('greeting')}</p>
</div>
);
이렇게 사용하면 끝
간단하게 다국어지원을 해볼 수 있다.
'Study note > React' 카테고리의 다른 글
티빙에서 명탐정코난 정주행 중요한 편만 보기 + 히스토리까지 (3) | 2024.05.07 |
---|---|
Save 버튼에 loading, done 효과 주기 (0) | 2024.04.17 |
[React] styled-components 조건부 스타일링 (0) | 2024.04.17 |
React 스터디노트 #3. 이벤트 (0) | 2020.11.30 |
React 스터디 노트 #2. State (0) | 2020.11.27 |