@restnfeel/agentc-starter-kit
Version:
한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템
79 lines (68 loc) • 2.23 kB
text/typescript
/**
* @fileoverview Internationalization hook
* @module hooks/useI18n
*/
import { useCallback, useState } from "react";
export type SupportedLanguage = "en" | "ko" | "ja" | "zh";
export interface UseI18nReturn {
language: SupportedLanguage;
setLanguage: (language: SupportedLanguage) => void;
t: (key: string, params?: Record<string, string>) => string;
isRTL: boolean;
}
const translations: Record<SupportedLanguage, Record<string, string>> = {
en: {
"chatbot.welcome": "Welcome! How can I help you today?",
"chatbot.placeholder": "Type your message...",
"chatbot.send": "Send",
"chatbot.upload": "Upload",
"chatbot.error": "Something went wrong",
"chatbot.retry": "Retry",
},
ko: {
"chatbot.welcome": "안녕하세요! 무엇을 도와드릴까요?",
"chatbot.placeholder": "메시지를 입력하세요...",
"chatbot.send": "전송",
"chatbot.upload": "업로드",
"chatbot.error": "오류가 발생했습니다",
"chatbot.retry": "다시 시도",
},
ja: {
"chatbot.welcome": "こんにちは!何をお手伝いできますか?",
"chatbot.placeholder": "メッセージを入力してください...",
"chatbot.send": "送信",
"chatbot.upload": "アップロード",
"chatbot.error": "エラーが発生しました",
"chatbot.retry": "再試行",
},
zh: {
"chatbot.welcome": "您好!我可以为您做些什么?",
"chatbot.placeholder": "输入您的消息...",
"chatbot.send": "发送",
"chatbot.upload": "上传",
"chatbot.error": "出现错误",
"chatbot.retry": "重试",
},
};
export function useI18n(): UseI18nReturn {
const [language, setLanguage] = useState<SupportedLanguage>("en");
const t = useCallback(
(key: string, params?: Record<string, string>): string => {
let text = translations[language][key] || key;
if (params) {
Object.entries(params).forEach(([param, value]) => {
text = text.replace(`{{${param}}}`, value);
});
}
return text;
},
[language]
);
const isRTL = false; // RTL languages not supported in current language set
return {
language,
setLanguage,
t,
isRTL,
};
}