938 lines
34 KiB
TypeScript
938 lines
34 KiB
TypeScript
|
||
|
||
import { Language, Scenario } from "../types";
|
||
|
||
export const getScenarios = (language: Language): Scenario[] => {
|
||
switch(language) {
|
||
case 'ja':
|
||
return [
|
||
{
|
||
id: 'cafe_order',
|
||
title: 'カフェで注文',
|
||
icon: '☕',
|
||
description: '東京のカフェでコーヒーと軽食を注文する練習。',
|
||
initialMessage: 'いらっしゃいませ!ご注文はお決まりですか?',
|
||
role: '店員'
|
||
},
|
||
{
|
||
id: 'train_station',
|
||
title: '駅での道案内',
|
||
icon: '🚄',
|
||
description: '駅員に行き先を尋ねる練習。',
|
||
initialMessage: 'はい、どうされましたか?',
|
||
role: '駅員'
|
||
},
|
||
{
|
||
id: 'conbini',
|
||
title: 'コンビニでの買い物',
|
||
icon: '🏪',
|
||
description: 'コンビニで支払いをする練習。',
|
||
initialMessage: 'お弁当温めますか?',
|
||
role: '店員'
|
||
},
|
||
{
|
||
id: 'hotel_checkin',
|
||
title: 'ホテルのチェックイン',
|
||
icon: '🏨',
|
||
description: 'ホテルのフロントでチェックインをする。',
|
||
initialMessage: 'いらっしゃいませ。チェックインでございますか?',
|
||
role: 'フロント係'
|
||
},
|
||
{
|
||
id: 'immigration',
|
||
title: '入国審査',
|
||
icon: '🛂',
|
||
description: '空港の入国審査で質問に答える練習。',
|
||
initialMessage: '次の方どうぞ。パスポートを見せてください。',
|
||
role: '審査官'
|
||
},
|
||
{
|
||
id: 'boarding',
|
||
title: '搭乗手続き',
|
||
icon: '✈️',
|
||
description: '搭乗ゲートでのやり取り。',
|
||
initialMessage: 'ご搭乗ありがとうございます。パスポートと搭乗券を拝見します。',
|
||
role: '地上係員'
|
||
}
|
||
];
|
||
case 'zh':
|
||
return [
|
||
{
|
||
id: 'cafe_order',
|
||
title: '咖啡厅点单',
|
||
icon: '☕',
|
||
description: '练习在东京的咖啡厅点咖啡和小吃。',
|
||
initialMessage: 'いらっしゃいませ!ご注文はお決まりですか?',
|
||
initialTranslation: '欢迎光临!决定好要点什么了吗?',
|
||
role: '店员'
|
||
},
|
||
{
|
||
id: 'train_station',
|
||
title: '车站问路',
|
||
icon: '🚄',
|
||
description: '练习询问车站工作人员路线。',
|
||
initialMessage: 'はい、どうされましたか?',
|
||
initialTranslation: '您好,有什么可以帮您的吗?',
|
||
role: '站务员'
|
||
},
|
||
{
|
||
id: 'conbini',
|
||
title: '便利店购物',
|
||
icon: '🏪',
|
||
description: '练习在便利店结账。',
|
||
initialMessage: 'お弁当温めますか?',
|
||
initialTranslation: '便当需要加热吗?',
|
||
role: '店员'
|
||
},
|
||
{
|
||
id: 'hotel_checkin',
|
||
title: '酒店入住',
|
||
icon: '🏨',
|
||
description: '在酒店前台办理入住手续。',
|
||
initialMessage: 'いらっしゃいませ。チェックインでございますか?',
|
||
initialTranslation: '欢迎光临。是办理入住吗?',
|
||
role: '前台接待'
|
||
},
|
||
{
|
||
id: 'immigration',
|
||
title: '入境审查',
|
||
icon: '🛂',
|
||
description: '练习在机场回答入境审查官的提问。',
|
||
initialMessage: '次の方どうぞ。パスポートを見せてください。',
|
||
initialTranslation: '下一位。请出示您的护照。',
|
||
role: '审查官'
|
||
},
|
||
{
|
||
id: 'boarding',
|
||
title: '登机手续',
|
||
icon: '✈️',
|
||
description: '练习登机口的对话。',
|
||
initialMessage: 'ご搭乗ありがとうございます。パスポートと搭乗券を拝见します。',
|
||
initialTranslation: '感谢您的搭乘。请出示护照和登机牌。',
|
||
role: '地勤人员'
|
||
}
|
||
];
|
||
default: // en
|
||
return [
|
||
{
|
||
id: 'cafe_order',
|
||
title: 'Ordering at a Cafe',
|
||
icon: '☕',
|
||
description: 'Practice ordering coffee and snacks at a cafe in Tokyo.',
|
||
initialMessage: 'いらっしゃいませ!ご注文はお決まりですか?',
|
||
initialTranslation: 'Welcome! Have you decided on your order?',
|
||
role: 'Barista'
|
||
},
|
||
{
|
||
id: 'train_station',
|
||
title: 'Asking Directions',
|
||
icon: '🚄',
|
||
description: 'Practice asking a station attendant for help finding a platform.',
|
||
initialMessage: 'はい、どうされましたか?',
|
||
initialTranslation: 'Yes, how can I help you?',
|
||
role: 'Station Attendant'
|
||
},
|
||
{
|
||
id: 'conbini',
|
||
title: 'Convenience Store',
|
||
icon: '🏪',
|
||
description: 'Buying items at a Konbini.',
|
||
initialMessage: 'お弁当温めますか?',
|
||
initialTranslation: 'Would you like your bento warmed up?',
|
||
role: 'Clerk'
|
||
},
|
||
{
|
||
id: 'hotel_checkin',
|
||
title: 'Hotel Check-in',
|
||
icon: '🏨',
|
||
description: 'Checking into a hotel.',
|
||
initialMessage: 'いらっしゃいませ。チェックインでございますか?',
|
||
initialTranslation: 'Welcome. Are you checking in?',
|
||
role: 'Receptionist'
|
||
},
|
||
{
|
||
id: 'immigration',
|
||
title: 'Immigration',
|
||
icon: '🛂',
|
||
description: 'Answering questions at airport immigration control.',
|
||
initialMessage: '次の方どうぞ。パスポートを見せてください。',
|
||
initialTranslation: 'Next person, please. Show me your passport.',
|
||
role: 'Officer'
|
||
},
|
||
{
|
||
id: 'boarding',
|
||
title: 'Boarding Gate',
|
||
icon: '✈️',
|
||
description: 'Interacting with staff at the boarding gate.',
|
||
initialMessage: 'ご搭乗ありがとうございます。パスポートと搭乗券を拝見します。',
|
||
initialTranslation: 'Thank you for boarding. May I see your passport and boarding pass?',
|
||
role: 'Ground Staff'
|
||
}
|
||
];
|
||
}
|
||
};
|
||
|
||
export const translations = {
|
||
en: {
|
||
appTitle: "Sakura Sensei 🌸",
|
||
nav: {
|
||
sectionStudy: "Study & Input",
|
||
sectionPractice: "Practice & Output",
|
||
sectionTools: "Toolbox",
|
||
sectionImmersion: "Immersion",
|
||
chat: "Tutor Dojo",
|
||
reading: "Reading Hall",
|
||
listening: "Listening Lab",
|
||
speaking: "Roleplay",
|
||
creative: "Atelier",
|
||
translation: "Translator",
|
||
ocr: "Scanner",
|
||
settings: "Settings"
|
||
},
|
||
common: {
|
||
cancel: "Cancel",
|
||
confirm: "Confirm",
|
||
delete: "Delete",
|
||
next: "Next",
|
||
generatedBy: "Generated by",
|
||
error: "Error occurred",
|
||
poweredBy: "Powered by Gemini",
|
||
deleteItemConfirm: "Are you sure you want to delete this item?",
|
||
clearHistoryConfirm: "Are you sure you want to clear the entire history?",
|
||
save: "Save",
|
||
download: "Download",
|
||
content: "Content",
|
||
tutor: "Tutor",
|
||
text: "Text",
|
||
explanation: "Explanation",
|
||
clear: "Clear",
|
||
copy: "Copy",
|
||
copied: "Copied!",
|
||
share: "Share",
|
||
shareImage: "Image",
|
||
shareText: "Text",
|
||
shareFile: "File (TXT)",
|
||
aiLanguage: "AI Language",
|
||
langJa: "Japanese",
|
||
langNative: "User Language",
|
||
today: "Today",
|
||
yesterday: "Yesterday",
|
||
storageFull: "Storage full. History may not be saved.",
|
||
storageOptimized: "Storage full. Cleared audio cache to save text."
|
||
},
|
||
onboarding: {
|
||
welcome: "Welcome to Sakura Sensei!",
|
||
desc1: "Your AI-powered companion for mastering Japanese.",
|
||
step1Title: "Conversational Tutor",
|
||
step1Desc: "Chat with Sakura (Gemini 3 Pro) to practice grammar or ask cultural questions.",
|
||
step2Title: "Immersive Practice",
|
||
step2Desc: "Roleplay realistic scenarios, generate reading materials, and scan real-world text.",
|
||
step3Title: "Creative Tools",
|
||
step3Desc: "Generate images and videos to visualize your learning journey.",
|
||
startBtn: "Start Learning",
|
||
selectLang: "Select Interface Language"
|
||
},
|
||
chat: {
|
||
welcome: "Konnichiwa! 🌸 I am Sakura. How can I help you with your Japanese today?",
|
||
inputPlaceholder: "Send a message...",
|
||
thinkingPlaceholder: "Reasoning about grammar...",
|
||
imageAttached: "Image attached",
|
||
sending: "Sakura is thinking...",
|
||
error: "Connection lost.",
|
||
locationError: "Region not supported. Please configure a Proxy URL in Settings.",
|
||
playUserAudio: "Play Recording",
|
||
listenPronunciation: "Listen",
|
||
deepThinking: "Deep Thought",
|
||
imageAnalyzed: "Image Analyzed",
|
||
thinkingToggle: "Thinking Mode",
|
||
newChat: "New Chat",
|
||
history: "Chat History",
|
||
noHistory: "No previous chats.",
|
||
deleteChat: "Delete",
|
||
deleteConfirm: "Are you sure you want to delete this chat session?",
|
||
untitled: "Untitled Chat",
|
||
transcribedPrefix: "(Transcribed): "
|
||
},
|
||
creative: {
|
||
title: "Creative Atelier 🎨",
|
||
genImage: "Paint",
|
||
editImage: "Magic Edit",
|
||
genVideo: "Dream Video",
|
||
promptLabel: "Your Vision",
|
||
editLabel1: "1. Base Photo",
|
||
editLabel2: "2. Instruction",
|
||
uploadPlaceholder: "Drop an image here",
|
||
generateBtn: "Generate",
|
||
creatingBtn: "Creating...",
|
||
download: "Download",
|
||
videoWarning: "* Video generation (Veo) takes time.",
|
||
emptyState: "Your masterpiece will appear here",
|
||
imagePrompt: "Cyberpunk samurai cat in neon Tokyo...",
|
||
editPrompt: "Turn trees into cherry blossoms...",
|
||
videoPrompt: "Traditional tea ceremony in a futuristic garden...",
|
||
uploadAlert: "Please upload an image first!"
|
||
},
|
||
speaking: {
|
||
title: "Conversation Dojo 🗣️",
|
||
subtitle: "Roleplay in realistic scenarios. Get instant feedback on accent and fluency.",
|
||
back: "Exit",
|
||
listening: "Listening...",
|
||
tapSpeak: "Tap to Speak",
|
||
processing: "Analyzing...",
|
||
feedbackTitle: "Sensei's Report",
|
||
score: "Fluency",
|
||
toImprove: "Corrections",
|
||
advice: "Advice",
|
||
transcription: "You Said",
|
||
meaning: "Meaning",
|
||
perfect: "Sugoi! Perfect pronunciation! 🎉",
|
||
emptyFeedback: "Speak clearly to get feedback.",
|
||
replay: "Replay",
|
||
start: "Start",
|
||
roleplay: "Role",
|
||
translation: "Translation"
|
||
},
|
||
reading: {
|
||
title: "Reading Hall 📜",
|
||
subtitle: "Generate custom reading lessons based on your level.",
|
||
topicLabel: "Topic",
|
||
difficultyLabel: "Level",
|
||
levels: {
|
||
beginner: "Beginner (N5-N4)",
|
||
intermediate: "Intermediate (N3-N2)",
|
||
advanced: "Advanced (N1)"
|
||
},
|
||
generate: "Create Lesson",
|
||
generating: "Writing...",
|
||
translationToggle: "Translation",
|
||
vocabTitle: "Vocabulary",
|
||
grammarHeader: "Grammar",
|
||
qaTitle: "Tutor Chat",
|
||
qaPlaceholder: "Ask about this text...",
|
||
qaWelcome: "Lesson generated. Ask me anything about the text!",
|
||
historyTitle: "Library",
|
||
loadMore: "Open",
|
||
emptyHistory: "Empty Library",
|
||
clear: "Clear",
|
||
placeholder: "e.g. Kyoto History, Anime Culture",
|
||
translationLabel: "Translation",
|
||
thinking: "thinking...",
|
||
playAudio: "Listen",
|
||
stopAudio: "Stop",
|
||
contentMissing: "No text generated. Please try creating a new lesson with a more specific topic.",
|
||
translationMissing: "No translation available."
|
||
},
|
||
listening: {
|
||
title: "Listening Lab 🎧",
|
||
subtitle: "Train your ears with AI-generated conversations and quizzes.",
|
||
generate: "Create Practice",
|
||
generating: "Composing...",
|
||
play: "Play Audio",
|
||
pause: "Pause",
|
||
replay: "Replay",
|
||
showScript: "Show Transcript",
|
||
hideScript: "Hide Transcript",
|
||
quizTitle: "Comprehension Quiz",
|
||
check: "Check Answer",
|
||
correct: "Correct!",
|
||
incorrect: "Incorrect, try again.",
|
||
scriptTitle: "Transcript",
|
||
historyTitle: "Practice Log",
|
||
emptyHistory: "No practice logs",
|
||
qaWelcome: "I've generated a listening exercise. Listen to the audio first, try the quiz, then ask me anything!",
|
||
noScript: "No script available to play.",
|
||
scriptMissing: "No script generated. Please try generating again.",
|
||
vocabTitle: "Vocabulary",
|
||
grammarHeader: "Grammar"
|
||
},
|
||
ocr: {
|
||
title: "Text Scanner 🔍",
|
||
subtitle: "Scan text (books, menus) to create study guides.",
|
||
uploadBtn: "Upload",
|
||
cameraBtn: "Camera",
|
||
processing: "Scanning...",
|
||
extractedTitle: "Extracted Text",
|
||
analysisTitle: "Study Notes",
|
||
vocabHeader: "Vocabulary",
|
||
grammarHeader: "Grammar",
|
||
summaryHeader: "Summary",
|
||
chatPlaceholder: "Ask about this text...",
|
||
reScan: "New Scan",
|
||
error: "Could not analyze image.",
|
||
history: "Scan History",
|
||
emptyHistory: "No scans yet",
|
||
clear: "Clear",
|
||
analyzedIntro: "Analyzed (Language: $lang). Ask me anything!",
|
||
historyIntro: "Loaded from history (Language: $lang).",
|
||
tutorChat: "Tutor Chat",
|
||
thinking: "thinking...",
|
||
analysisFailed: "Analysis failed."
|
||
},
|
||
translation: {
|
||
title: "Translator",
|
||
inputLabel: "Input",
|
||
outputLabel: "Translation",
|
||
translateBtn: "Translate",
|
||
translating: "Translating...",
|
||
extracting: "Scanning...",
|
||
scanImage: "Camera",
|
||
uploadImage: "Image",
|
||
sourceLang: "Source",
|
||
targetLang: "Target",
|
||
history: "Translator History",
|
||
clear: "Clear",
|
||
copy: "Copy",
|
||
langs: {
|
||
auto: "Auto Detect",
|
||
en: "English",
|
||
ja: "Japanese",
|
||
zh: "Chinese",
|
||
ko: "Korean",
|
||
fr: "French",
|
||
es: "Spanish"
|
||
},
|
||
errorTranslating: "Error translating.",
|
||
imageReadError: "Could not read text from image.",
|
||
imageTransError: "Image translation failed."
|
||
},
|
||
settings: {
|
||
title: "Settings & Data",
|
||
backupTitle: "Backup",
|
||
backupDesc: "Download all data locally.",
|
||
backupBtn: "Backup",
|
||
restoreDesc: "Restore from backup file.",
|
||
restoreBtn: "Restore",
|
||
exportTitle: "Export",
|
||
exportChatBtn: "Chat Log (TXT)",
|
||
exportTransBtn: "Translations (CSV)",
|
||
exportReadingBtn: "Reading History (JSON)",
|
||
exportOCRBtn: "Scan History (JSON)",
|
||
successRestore: "Restored successfully!",
|
||
errorRestore: "Invalid file.",
|
||
apiKeyTitle: "API Configuration",
|
||
apiKeyDesc: "Configure your Gemini API access.",
|
||
apiKeyPlaceholder: "Paste API Key",
|
||
baseUrlPlaceholder: "Base URL (Optional, e.g. for Proxy)",
|
||
apiKeyMissing: "API Key is required.",
|
||
saveKey: "Save",
|
||
removeKey: "Remove",
|
||
keySaved: "Settings saved!",
|
||
keyRemoved: "Settings cleared.",
|
||
modelTitle: "AI Model",
|
||
modelDesc: "Select model for chat/reasoning.",
|
||
modelSaved: "Model updated!"
|
||
},
|
||
recorder: {
|
||
start: "Start Mic",
|
||
stop: "Stop Mic"
|
||
}
|
||
},
|
||
ja: {
|
||
appTitle: "さくら先生 🌸",
|
||
nav: {
|
||
sectionStudy: "学習とインプット",
|
||
sectionPractice: "練習とアウトプット",
|
||
sectionTools: "ツールボックス",
|
||
sectionImmersion: "没入体験",
|
||
chat: "学習道場",
|
||
reading: "読書の間",
|
||
listening: "聴解ラボ",
|
||
speaking: "ロールプレイ",
|
||
creative: "アトリエ",
|
||
translation: "翻訳機",
|
||
ocr: "スキャナー",
|
||
settings: "設定"
|
||
},
|
||
common: {
|
||
cancel: "キャンセル",
|
||
confirm: "確認",
|
||
delete: "削除",
|
||
next: "次へ",
|
||
generatedBy: "生成モデル:",
|
||
error: "エラーが発生しました",
|
||
poweredBy: "Powered by Gemini",
|
||
deleteItemConfirm: "この項目を削除してもよろしいですか?",
|
||
clearHistoryConfirm: "履歴をすべて消去してもよろしいですか?",
|
||
save: "保存",
|
||
download: "ダウンロード",
|
||
content: "コンテンツ",
|
||
tutor: "チューター",
|
||
text: "テキスト",
|
||
explanation: "解説",
|
||
clear: "クリア",
|
||
copy: "コピー",
|
||
copied: "コピーしました!",
|
||
share: "共有",
|
||
shareImage: "画像",
|
||
shareText: "テキスト",
|
||
shareFile: "ファイル (TXT)",
|
||
aiLanguage: "AIの使用言語",
|
||
langJa: "日本語",
|
||
langNative: "ユーザー言語",
|
||
today: "今日",
|
||
yesterday: "昨日",
|
||
storageFull: "保存容量がいっぱいです。履歴が保存されない可能性があります。",
|
||
storageOptimized: "保存容量がいっぱいのため、音声キャッシュを削除してテキストのみ保存しました。"
|
||
},
|
||
onboarding: {
|
||
welcome: "さくら先生へようこそ!",
|
||
desc1: "あなたのためのAI日本語学習パートナーです。",
|
||
step1Title: "会話チューター",
|
||
step1Desc: "さくら先生(Gemini 3 Pro)とチャットして、文法や文化について学びましょう。",
|
||
step2Title: "没入型練習",
|
||
step2Desc: "リアルなシナリオでのロールプレイ、読み物の作成、現実世界のテキストのスキャン。",
|
||
step3Title: "クリエイティブツール",
|
||
step3Desc: "学習の旅を視覚化するために画像やビデオを生成します。",
|
||
startBtn: "学習を始める",
|
||
selectLang: "言語を選択"
|
||
},
|
||
chat: {
|
||
welcome: "こんにちは!🌸 さくらです。日本語の勉強をお手伝いします。",
|
||
inputPlaceholder: "メッセージを送信...",
|
||
thinkingPlaceholder: "文法を推論中...",
|
||
imageAttached: "画像が添付されました",
|
||
sending: "さくら先生が考え中...",
|
||
error: "接続が失われました。",
|
||
locationError: "この地域はサポートされていません。設定でプロキシURLを設定してください。",
|
||
playUserAudio: "録音を再生",
|
||
listenPronunciation: "聞く",
|
||
deepThinking: "深い思考",
|
||
imageAnalyzed: "画像を分析しました",
|
||
thinkingToggle: "思考モード",
|
||
newChat: "新しいチャット",
|
||
history: "チャット履歴",
|
||
noHistory: "履歴はありません。",
|
||
deleteChat: "削除",
|
||
deleteConfirm: "このチャットセッションを削除してもよろしいですか?",
|
||
untitled: "無題のチャット",
|
||
transcribedPrefix: "(書き起こし): "
|
||
},
|
||
creative: {
|
||
title: "クリエイティブアトリエ 🎨",
|
||
genImage: "描画",
|
||
editImage: "マジック編集",
|
||
genVideo: "夢のビデオ",
|
||
promptLabel: "あなたのビジョン",
|
||
editLabel1: "1. 元の画像",
|
||
editLabel2: "2. 指示",
|
||
uploadPlaceholder: "ここに画像をドロップ",
|
||
generateBtn: "生成",
|
||
creatingBtn: "作成中...",
|
||
download: "ダウンロード",
|
||
videoWarning: "* ビデオ生成 (Veo) には時間がかかります。",
|
||
emptyState: "ここに作品が表示されます",
|
||
imagePrompt: "ネオン輝く東京のサイバーパンク侍猫...",
|
||
editPrompt: "木を桜に変えて...",
|
||
videoPrompt: "未来的な庭園での伝統的な茶道...",
|
||
uploadAlert: "まずは画像をアップロードしてください!"
|
||
},
|
||
speaking: {
|
||
title: "会話道場 🗣️",
|
||
subtitle: "リアルなシナリオでロールプレイ。アクセントや流暢さを即座にフィードバック。",
|
||
back: "終了",
|
||
listening: "聞いています...",
|
||
tapSpeak: "タップして話す",
|
||
processing: "分析中...",
|
||
feedbackTitle: "先生のレポート",
|
||
score: "流暢さ",
|
||
toImprove: "修正点",
|
||
advice: "アドバイス",
|
||
transcription: "あなたの発言",
|
||
meaning: "意味",
|
||
perfect: "すごい!完璧な発音です!🎉",
|
||
emptyFeedback: "はっきりと話してください。",
|
||
replay: "再生",
|
||
start: "開始",
|
||
roleplay: "役割",
|
||
translation: "翻訳"
|
||
},
|
||
reading: {
|
||
title: "読書の間 📜",
|
||
subtitle: "レベルに合わせて読み物を生成します。",
|
||
topicLabel: "トピック",
|
||
difficultyLabel: "レベル",
|
||
levels: {
|
||
beginner: "初級 (N5-N4)",
|
||
intermediate: "中級 (N3-N2)",
|
||
advanced: "上級 (N1)"
|
||
},
|
||
generate: "レッスン作成",
|
||
generating: "執筆中...",
|
||
translationToggle: "翻訳",
|
||
vocabTitle: "語彙",
|
||
grammarHeader: "文法",
|
||
qaTitle: "チューターチャット",
|
||
qaPlaceholder: "このテキストについて質問...",
|
||
qaWelcome: "レッスンを作成しました。テキストについて何でも聞いてください!",
|
||
historyTitle: "ライブラリ",
|
||
loadMore: "開く",
|
||
emptyHistory: "ライブラリは空です",
|
||
clear: "クリア",
|
||
placeholder: "例:京都の歴史、アニメ文化",
|
||
translationLabel: "翻訳",
|
||
thinking: "考え中...",
|
||
playAudio: "聞く",
|
||
stopAudio: "停止",
|
||
contentMissing: "コンテンツが生成されませんでした。新しいトピックで試してください。",
|
||
translationMissing: "翻訳がありません。"
|
||
},
|
||
listening: {
|
||
title: "聴解ラボ 🎧",
|
||
subtitle: "AIが生成した会話とクイズで耳を鍛えましょう。",
|
||
generate: "練習を作成",
|
||
generating: "作成中...",
|
||
play: "音声を再生",
|
||
pause: "一時停止",
|
||
replay: "もう一度",
|
||
showScript: "スクリプトを表示",
|
||
hideScript: "スクリプトを隠す",
|
||
quizTitle: "理解度クイズ",
|
||
check: "答え合わせ",
|
||
correct: "正解!",
|
||
incorrect: "不正解、もう一度。",
|
||
scriptTitle: "スクリプト",
|
||
historyTitle: "練習ログ",
|
||
emptyHistory: "練習ログなし",
|
||
qaWelcome: "リスニング練習を作成しました。まず音声を聞いてクイズに挑戦し、その後何でも質問してください!",
|
||
noScript: "再生できるスクリプトがありません。",
|
||
scriptMissing: "スクリプトが生成されませんでした。もう一度試してください。",
|
||
vocabTitle: "語彙",
|
||
grammarHeader: "文法"
|
||
},
|
||
ocr: {
|
||
title: "テキストスキャナー 🔍",
|
||
subtitle: "テキスト(本、メニュー)をスキャンして学習ガイドを作成。",
|
||
uploadBtn: "アップロード",
|
||
cameraBtn: "カメラ",
|
||
processing: "スキャン中...",
|
||
extractedTitle: "抽出されたテキスト",
|
||
analysisTitle: "学習ノート",
|
||
vocabHeader: "語彙",
|
||
grammarHeader: "文法",
|
||
summaryHeader: "要約",
|
||
chatPlaceholder: "このテキストについて質問...",
|
||
reScan: "新しいスキャン",
|
||
error: "画像を分析できませんでした。",
|
||
history: "スキャン履歴",
|
||
emptyHistory: "スキャン履歴なし",
|
||
clear: "クリア",
|
||
analyzedIntro: "分析しました(言語:$lang)。何でも聞いてください!",
|
||
historyIntro: "履歴から読み込みました(言語:$lang)。",
|
||
tutorChat: "チューターチャット",
|
||
thinking: "考え中...",
|
||
analysisFailed: "分析に失敗しました。"
|
||
},
|
||
translation: {
|
||
title: "翻訳機",
|
||
inputLabel: "入力",
|
||
outputLabel: "翻訳",
|
||
translateBtn: "翻訳",
|
||
translating: "翻訳中...",
|
||
extracting: "スキャン中...",
|
||
scanImage: "カメラ",
|
||
uploadImage: "画像",
|
||
sourceLang: "翻訳元",
|
||
targetLang: "翻訳先",
|
||
history: "翻訳履歴",
|
||
clear: "クリア",
|
||
copy: "コピー",
|
||
langs: {
|
||
auto: "自動検出",
|
||
en: "英語",
|
||
ja: "日本語",
|
||
zh: "中国語",
|
||
ko: "韓国語",
|
||
fr: "フランス語",
|
||
es: "スペイン語"
|
||
},
|
||
errorTranslating: "翻訳エラー。",
|
||
imageReadError: "テキストを読み取れませんでした。",
|
||
imageTransError: "画像の翻訳に失敗しました。"
|
||
},
|
||
settings: {
|
||
title: "設定とデータ",
|
||
backupTitle: "バックアップ",
|
||
backupDesc: "すべてのデータをローカルにダウンロード。",
|
||
backupBtn: "バックアップ",
|
||
restoreDesc: "バックアップファイルから復元。",
|
||
restoreBtn: "復元",
|
||
exportTitle: "エクスポート",
|
||
exportChatBtn: "チャットログ (TXT)",
|
||
exportTransBtn: "翻訳 (CSV)",
|
||
exportReadingBtn: "読書履歴 (JSON)",
|
||
exportOCRBtn: "スキャン履歴 (JSON)",
|
||
successRestore: "正常に復元されました!",
|
||
errorRestore: "無効なファイルです。",
|
||
apiKeyTitle: "API構成",
|
||
apiKeyDesc: "Gemini APIアクセスを構成します。",
|
||
apiKeyPlaceholder: "APIキーを貼り付け",
|
||
baseUrlPlaceholder: "ベースURL (オプション、プロキシ用)",
|
||
apiKeyMissing: "APIキーが必要です。",
|
||
saveKey: "保存",
|
||
removeKey: "削除",
|
||
keySaved: "設定を保存しました!",
|
||
keyRemoved: "設定をクリアしました。",
|
||
modelTitle: "AIモデル",
|
||
modelDesc: "チャット/推論用のモデルを選択。",
|
||
modelSaved: "モデルを更新しました!"
|
||
},
|
||
recorder: {
|
||
start: "マイク開始",
|
||
stop: "マイク停止"
|
||
}
|
||
},
|
||
zh: {
|
||
appTitle: "樱花老师 🌸",
|
||
nav: {
|
||
sectionStudy: "学习与输入",
|
||
sectionPractice: "练习与输出",
|
||
sectionTools: "工具箱",
|
||
sectionImmersion: "沉浸体验",
|
||
chat: "学习道场",
|
||
reading: "阅读室",
|
||
listening: "听力实验室",
|
||
speaking: "角色扮演",
|
||
creative: "工作室",
|
||
translation: "翻译机",
|
||
ocr: "扫描仪",
|
||
settings: "设置"
|
||
},
|
||
common: {
|
||
cancel: "取消",
|
||
confirm: "确认",
|
||
delete: "删除",
|
||
next: "下一步",
|
||
generatedBy: "生成模型:",
|
||
error: "发生错误",
|
||
poweredBy: "Powered by Gemini",
|
||
deleteItemConfirm: "您确定要删除此项目吗?",
|
||
clearHistoryConfirm: "您确定要清空历史记录吗?",
|
||
save: "保存",
|
||
download: "下载",
|
||
content: "内容",
|
||
tutor: "导师",
|
||
text: "文本",
|
||
explanation: "解析",
|
||
clear: "清除",
|
||
copy: "复制",
|
||
copied: "已复制!",
|
||
share: "分享",
|
||
shareImage: "图片",
|
||
shareText: "文本",
|
||
shareFile: "文件 (TXT)",
|
||
aiLanguage: "AI使用语言",
|
||
langJa: "日语",
|
||
langNative: "用户语言",
|
||
today: "今天",
|
||
yesterday: "昨天",
|
||
storageFull: "存储空间已满,历史记录可能无法保存。",
|
||
storageOptimized: "存储空间已满,已自动清除音频缓存以保存文本。"
|
||
},
|
||
onboarding: {
|
||
welcome: "欢迎来到樱花老师!",
|
||
desc1: "您的AI日语学习伙伴。",
|
||
step1Title: "对话导师",
|
||
step1Desc: "与樱花老师(Gemini 3 Pro)聊天,学习语法或文化。",
|
||
step2Title: "沉浸式练习",
|
||
step2Desc: "角色扮演现实场景,生成阅读材料,扫描现实世界的文本。",
|
||
step3Title: "创意工具",
|
||
step3Desc: "生成图像和视频以可视化您的学习之旅。",
|
||
startBtn: "开始学习",
|
||
selectLang: "选择界面语言"
|
||
},
|
||
chat: {
|
||
welcome: "你好!🌸 我是樱花。今天我可以帮你学习日语吗?",
|
||
inputPlaceholder: "发送消息...",
|
||
thinkingPlaceholder: "正在推理由法...",
|
||
imageAttached: "已附上图片",
|
||
sending: "樱花老师正在思考...",
|
||
error: "连接丢失。",
|
||
locationError: "不支持该地区。请在设置中配置代理URL。",
|
||
playUserAudio: "播放录音",
|
||
listenPronunciation: "听",
|
||
deepThinking: "深度思考",
|
||
imageAnalyzed: "图像已分析",
|
||
thinkingToggle: "思考模式",
|
||
newChat: "新聊天",
|
||
history: "聊天记录",
|
||
noHistory: "没有以前的聊天。",
|
||
deleteChat: "删除",
|
||
deleteConfirm: "您确定要删除此聊天会话吗?",
|
||
untitled: "未命名聊天",
|
||
transcribedPrefix: "(转录): "
|
||
},
|
||
creative: {
|
||
title: "创意工作室 🎨",
|
||
genImage: "绘画",
|
||
editImage: "魔法编辑",
|
||
genVideo: "梦境视频",
|
||
promptLabel: "你的愿景",
|
||
editLabel1: "1. 基础照片",
|
||
editLabel2: "2. 指令",
|
||
uploadPlaceholder: "在这里拖放图像",
|
||
generateBtn: "生成",
|
||
creatingBtn: "正在创建...",
|
||
download: "下载",
|
||
videoWarning: "* 视频生成 (Veo) 需要时间。",
|
||
emptyState: "你的杰作将出现在这里",
|
||
imagePrompt: "霓虹灯闪烁的东京赛博朋克武士猫...",
|
||
editPrompt: "把树变成樱花...",
|
||
videoPrompt: "未来花园中的传统茶道...",
|
||
uploadAlert: "请先上传图片!"
|
||
},
|
||
speaking: {
|
||
title: "对话道场 🗣️",
|
||
subtitle: "在现实场景中进行角色扮演。即时反馈口音和流利度。",
|
||
back: "退出",
|
||
listening: "正在听...",
|
||
tapSpeak: "点击说话",
|
||
processing: "正在分析...",
|
||
feedbackTitle: "老师的报告",
|
||
score: "流利度",
|
||
toImprove: "修正",
|
||
advice: "建议",
|
||
transcription: "你说了",
|
||
meaning: "意思",
|
||
perfect: "太棒了!完美的发音!🎉",
|
||
emptyFeedback: "请清楚地说出以获得反馈。",
|
||
replay: "重播",
|
||
start: "开始",
|
||
roleplay: "角色",
|
||
translation: "翻译"
|
||
},
|
||
reading: {
|
||
title: "阅读室 📜",
|
||
subtitle: "根据您的水平生成自定义阅读课程。",
|
||
topicLabel: "主题",
|
||
difficultyLabel: "等级",
|
||
levels: {
|
||
beginner: "初级 (N5-N4)",
|
||
intermediate: "中级 (N3-N2)",
|
||
advanced: "高级 (N1)"
|
||
},
|
||
generate: "创建课程",
|
||
generating: "正在写作...",
|
||
translationToggle: "翻译",
|
||
vocabTitle: "词汇",
|
||
grammarHeader: "语法",
|
||
qaTitle: "导师聊天",
|
||
qaPlaceholder: "关于此文本的问题...",
|
||
qaWelcome: "课程已生成。关于文本的问题尽管问我!",
|
||
historyTitle: "图书馆",
|
||
loadMore: "打开",
|
||
emptyHistory: "图书馆为空",
|
||
clear: "清除",
|
||
placeholder: "例如:京都历史,动漫文化",
|
||
translationLabel: "翻译",
|
||
thinking: "思考中...",
|
||
playAudio: "听",
|
||
stopAudio: "停止",
|
||
contentMissing: "未生成内容。请尝试新的主题。",
|
||
translationMissing: "暂无翻译。"
|
||
},
|
||
listening: {
|
||
title: "听力实验室 🎧",
|
||
subtitle: "通过AI生成的对话和测验训练您的耳朵。",
|
||
generate: "创建练习",
|
||
generating: "正在创作...",
|
||
play: "播放音频",
|
||
pause: "暂停",
|
||
replay: "重播",
|
||
showScript: "显示脚本",
|
||
hideScript: "隐藏脚本",
|
||
quizTitle: "理解测验",
|
||
check: "检查答案",
|
||
correct: "正确!",
|
||
incorrect: "不正确,请重试。",
|
||
scriptTitle: "脚本",
|
||
historyTitle: "练习日志",
|
||
emptyHistory: "暂无练习记录",
|
||
qaWelcome: "我已生成听力练习。先听音频,尝试测验,然后尽管问我任何问题!",
|
||
noScript: "暂无脚本可播放。",
|
||
scriptMissing: "未生成脚本。请重试。",
|
||
vocabTitle: "词汇",
|
||
grammarHeader: "语法"
|
||
},
|
||
ocr: {
|
||
title: "文本扫描仪 🔍",
|
||
subtitle: "扫描文本(书籍,菜单)以创建学习指南。",
|
||
uploadBtn: "上传",
|
||
cameraBtn: "相机",
|
||
processing: "正在扫描...",
|
||
extractedTitle: "提取的文本",
|
||
analysisTitle: "学习笔记",
|
||
vocabHeader: "词汇",
|
||
grammarHeader: "语法",
|
||
summaryHeader: "摘要",
|
||
chatPlaceholder: "关于此文本的问题...",
|
||
reScan: "新扫描",
|
||
error: "无法分析图像。",
|
||
history: "扫描记录",
|
||
emptyHistory: "暂无扫描",
|
||
clear: "清除",
|
||
analyzedIntro: "已分析(语言:$lang)。尽管问我!",
|
||
historyIntro: "从历史记录加载(语言:$lang)。",
|
||
tutorChat: "导师聊天",
|
||
thinking: "思考中...",
|
||
analysisFailed: "分析失败。"
|
||
},
|
||
translation: {
|
||
title: "翻译机",
|
||
inputLabel: "输入",
|
||
outputLabel: "翻译",
|
||
translateBtn: "翻译",
|
||
translating: "正在翻译...",
|
||
extracting: "正在扫描...",
|
||
scanImage: "相机",
|
||
uploadImage: "图像",
|
||
sourceLang: "源语言",
|
||
targetLang: "目标语言",
|
||
history: "翻译记录",
|
||
clear: "清除",
|
||
copy: "复制",
|
||
langs: {
|
||
auto: "自动检测",
|
||
en: "英语",
|
||
ja: "日语",
|
||
zh: "中文",
|
||
ko: "韩语",
|
||
fr: "法语",
|
||
es: "西班牙语"
|
||
},
|
||
errorTranslating: "翻译错误。",
|
||
imageReadError: "无法读取文本。",
|
||
imageTransError: "图片翻译失败。"
|
||
},
|
||
settings: {
|
||
title: "设置和数据",
|
||
backupTitle: "备份",
|
||
backupDesc: "下载所有数据到本地。",
|
||
backupBtn: "备份",
|
||
restoreDesc: "从备份文件恢复。",
|
||
restoreBtn: "恢复",
|
||
exportTitle: "导出",
|
||
exportChatBtn: "聊天记录 (TXT)",
|
||
exportTransBtn: "翻译 (CSV)",
|
||
exportReadingBtn: "阅读记录 (JSON)",
|
||
exportOCRBtn: "扫描记录 (JSON)",
|
||
successRestore: "恢复成功!",
|
||
errorRestore: "无效文件。",
|
||
apiKeyTitle: "API配置",
|
||
apiKeyDesc: "配置您的Gemini API访问。",
|
||
apiKeyPlaceholder: "粘贴API密钥",
|
||
baseUrlPlaceholder: "Base URL (可选,用于代理)",
|
||
apiKeyMissing: "需要API密钥。",
|
||
saveKey: "保存",
|
||
removeKey: "删除",
|
||
keySaved: "设置已保存!",
|
||
keyRemoved: "设置已清除。",
|
||
modelTitle: "AI模型",
|
||
modelDesc: "选择聊天/推理模型。",
|
||
modelSaved: "模型已更新!"
|
||
},
|
||
recorder: {
|
||
start: "开始录音",
|
||
stop: "停止录音"
|
||
}
|
||
}
|
||
}; |