React Context API로 다국어 웹사이트 만들기
5973 단어 reactwebdevtutorialjavascript
그리고 여기live POC of the project.가 있습니다.
(이 링크는 Github Repo에도 있습니다)
먼저 공식 React 웹 사이트에서 the React Context API 및 useContext Hook 문서를 한 눈에 볼 것을 강력히 제안합니다.
우리가 간다! 프로젝트의 폴더 구조는 다음과 같습니다.
텍스트는 언어별로 JSON으로 저장됩니다. 아래에서 영어의 예를 볼 수 있습니다.
{
"exploreHeader": "Explore",
"welcomeDescription": "This is a demo app for multi-language website with React Context API",
"clickMe": "Click Me",
"aboutMe": "For more info about the author",
"buttonClicked": "You clicked to button!"
}
그것들은 모두 사전 개체에 저장되며 이 기사의 뒷부분에서 설명할 선택한 언어에 따라 표시됩니다.
import tr from './tr.json';
import en from './en.json';
import de from './de.json';
export const dictionaryList = { en, tr, de };
export const languageOptions = {
en: 'English',
tr: 'Türkçe',
de: 'Deutsch'
};
언어 선택기는
languageOptions
로 채워집니다. 사용자는 여기에서 웹사이트의 언어를 변경할 수 있습니다.선택한 언어와 사전을 포함하는 컨텍스트를 생성하겠습니다.
import { languageOptions, dictionaryList } from '../languages';
// create the language context with default selected language
export const LanguageContext = createContext({
userLanguage: 'en',
dictionary: dictionaryList.en
});
그런 다음 컨텍스트 제공자를 정의하십시오. 선택한 언어를 설정하고 이 컨텍스트 제공자를 통해 사전에서 관련 텍스트를 가져올 수 있습니다.
// it provides the language context to app
export function LanguageProvider({ children }) {
const defaultLanguage = window.localStorage.getItem('rcml-lang');
const [userLanguage, setUserLanguage] = useState(defaultLanguage || 'en');
const provider = {
userLanguage,
dictionary: dictionaryList[userLanguage],
userLanguageChange: selected => {
const newLanguage = languageOptions[selected] ? selected : 'en'
setUserLanguage(newLanguage);
window.localStorage.setItem('rcml-lang', newLanguage);
}
};
return (
<LanguageContext.Provider value={provider}>
{children}
</LanguageContext.Provider>
);
};
언어 선택기가 변경되면 공급자의
userLanguageChange()
메서드를 호출합니다.아래에서 LanguageSelector.js를 검토할 수 있습니다.
import React, { useContext } from 'react';
import { languageOptions } from '../languages';
import { LanguageContext } from '../containers/Language';
export default function LanguageSelector() {
const { userLanguage, userLanguageChange } = useContext(LanguageContext);
// set selected language by calling context method
const handleLanguageChange = e => userLanguageChange(e.target.value);
return (
<select
onChange={handleLanguageChange}
value={userLanguage}
>
{Object.entries(languageOptions).map(([id, name]) => (
<option key={id} value={id}>{name}</option>
))}
</select>
);
};
그리고 App.js인 주요 구성 요소를
LanguageProvider
로 래핑해야 합니다.function App() {
return (
<LanguageProvider>
<div className="App">
<header className="App-header">
<LanguageSelector />
</header>
<Explore />
</div>
</LanguageProvider>
);
}
그런 다음 텍스트를 번역하기 위해
Text
구성 요소를 정의합니다.// get text according to id & current language
export function Text({ tid }) {
const languageContext = useContext(LanguageContext);
return languageContext.dictionary[tid] || tid;
};
이제 이 구성 요소를 사용하여 미리 정의된 언어 개체(기사 시작 부분에서 언급함)에서 선택한 언어에 따라 관련 텍스트를 수집할 수 있습니다.
또한 아래의 입력 자리 표시자 예와 같이 언어 컨텍스트를 직접 호출하여 사용할 수 있습니다.
다음은 구성 요소의 몇 가지 사용 예입니다.
export default function Explore() {
const [clickText, setClickText] = useState();
const { dictionary } = useContext(LanguageContext);
const handleClick = () => {
setClickText(<Text tid="buttonClicked" />);
}
return (
<div>
<h1><Text tid="exploreHeader" /></h1>
<p><Text tid="welcomeDescription" /></p>
<div>
<input type="text" placeholder={dictionary.enterText} />
<button onClick={handleClick}>
<Text tid="clickMe" />
</button>
<p>{clickText}</p>
</div>
<a href="https://halilcanozcelik.com" target="_blank" rel="noopener noreferrer">
<Text tid="aboutMe" />
</a>
</div>
);
}
또한 선택한 언어는 처음에 이 옵션으로 채워진 브라우저 및 컨텍스트 상태의 데이터베이스 또는 로컬 저장소에 저장되어야 합니다. 대체 시나리오에 languageOptions 옵션을 사용할 수 있습니다. 저는 이 프로젝트에서 영어("en")를 사용했습니다. 또한 선택한 언어를 로컬 저장소에 저장하고 처음부터 거기에서 읽습니다. 정보가 없으면 브라우저 언어를 기본 언어로 사용합니다.
도움이 되길 바랍니다.
Reference
이 문제에 관하여(React Context API로 다국어 웹사이트 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/halilcanozcelik/create-a-multi-language-website-with-react-context-api-4i27텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)