CreateContext를 사용해 문자열을 다국어 지원을 만든어 본다.
translations.js 파일 export const translations = {
ko: { greeting: "안녕하세요!", button: "언어 변경" }, en: { greeting: "Hello!", button: "Change Language" }, es: { greeting: "¡Hola!", button: "Cambiar idioma" } }; LanguageContext.js 파일 import React, { createContext, useState } from 'react';
export const LanguageContext = createContext(); export function LanguageProvider({ children }) { const [language, setLanguage] = useState("ko"); // 기본값: 한국어 const changeLanguage = (lang) => { setLanguage(lang); }; return ( <LanguageContext.Provider value={{ language, changeLanguage }}> {children} </LanguageContext.Provider> ); } const LanguageContext = createContext() //OK export LanguageContext; 처럼 사용해도 되지만 아래처럼 한줄로 해도 된다. export const LanguageContext = createContext(); //OK export default const LanguageContext = createContext(); //문법 오류, 이건 안된다. export default 뒤에는 **표현식(expression)**이 와야 하는데 const ...는 선언문(statement)이기 때문에 syntax error가 난다. HomeScreen.js 파일 import React, { useContext } from 'react';
import { View, Text, Button, StyleSheet } from 'react-native'; import { LanguageContext } from './LanguageContext'; import { translations } from './translations'; export default function HomeScreen() { const { language, changeLanguage } = useContext(LanguageContext); return ( <View style={styles.container}> <Text style={styles.text}> {translations[language].greeting} </Text> <View style={styles.buttons}> <Button title="한국어" onPress={() => changeLanguage("ko")} /> <Button title="English" onPress={() => changeLanguage("en")} /> <Button title="Español" onPress={() => changeLanguage("es")} /> </View> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: "center", alignItems: "center" }, text: { fontSize: 24, marginBottom: 20 }, buttons: { flexDirection: "row", gap: 10 } }); App.js 파일 import React from 'react';
import { LanguageProvider } from './LanguageContext'; import HomeScreen from './HomeScreen'; export default function App() { return ( <LanguageProvider> <HomeScreen /> </LanguageProvider> ); } |