Önizleme
Bu yazının temel düzeyde React bilgisi olanlara hitap ettiğini düşünerek uygulama oluşturma gibi başlangıç adımlarını atlıyorum.
const tr = {
title : 'Koronavirüs Nedir?',
text : 'Koronavirüs (COVID-19) yeni bir virüsten kaynaklanan bulaşıcı bir hastalıktır.',
tr : 'Türkçe',
en : 'İngilizce',
de : 'Almanca'
}
const en = {
title : 'What is Coronavirus?',
text : 'Coronavirus (COVID-19) is an infectious disease caused by a new virus.',
tr : 'Turkish',
en : 'English',
de : 'German'
}
const de = {
title : 'Was ist Coronavirus?',
text : 'Coronavirus (COVID-19) ist eine Infektionskrankheit, die durch ein neues Virus verursacht wird.',
tr : 'Türkisch',
en : 'Englisch',
de : 'Deutsch'
}
export default {
tr,
en,
de
} // Tek bir object olarak dışarıya açıyoruz.
import React, { Component, createContext } from 'react'
import languages from './languages'
export const AppContext = createContext()
export class Context extends Component {
state = {
currentLang : 'tr' //varsayılan Türkçe
}
changeLang = (lang) => {
this.setState({currentLang : lang})
}
render() {
return (
<AppContext.Provider value={{changeLang : this.changeLang, texts : languages[this.state.currentLang]}}>
{this.props.children}
</AppContext.Provider>
)
}
}
export default Context
Kodu açıklamak gerekirse;createContext()
metodu ile oluşturmamız gerekiyor.languages.js
içerisinden currentLang
alanında tanımlı olan dil için olan metinleri bütün uygulamadan erişilebilir hale getiriyoruz.Context
componentimiz ile bütün uygulamayı çevreliyoruz.Artık Text
componenti Context
ile çevrelendiği için bir önceki aşamada sunduğumuz şeylere ulaşabileceğiz.import React from 'react'
import Context from './Context'
import Text from './Text'
const App = () => {
return (
<Context>
<Text />
</Context>
)
}
export default App
import React, { useContext } from 'react'
import { AppContext } from './Context'
export default Text = () => {
const { texts, changeLang } = useContext(AppContext)
return (
<div style={{margin:'auto', maxWidth:'500px', padding:'10% 0'}}>
<h1> {texts.title} </h1>
<p> {texts.text} </p>
<select onChange={(e) => changeLang(e.target.value)} >
<option value="tr"> {texts.tr} </option>
<option value="en"> {texts.en} </option>
<option value="de"> {texts.de} </option>
</select>
</div>
)
}
Kodu açıklayacak olursak;useContext()
hook’unu kullanarak Context componentimizden dışarıya açtığımız object’e ulaşabiliyoruz. Parametre olarak createContext()
ile oluşturduğumuz AppContext'i
veriyoruz.texts.title
dediğimizde şu anda hangi dil seçili ise languages.js
dosyamızdan o dilin object’indeki title
alanı gösterilecek.changeLang()
fonksiyonu şu anki dili seçili seçeneğin value
değeri ile değiştiriyor.Bu yazıyı okuduğunuz için teşekkür ederim.Umarım faydalı olabilmiştir.Yaptığım demonun tüm kodlarına buradan ulaşabilirsiniz.Yeni yazılarda görüşmek üzere…