Files
ai-app-skr/utils/localization.ts
2025-11-21 00:24:18 +08:00

926 lines
33 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"
},
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."
},
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: "昨日"
},
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: "スクリプトが生成されませんでした。もう一度試してください。"
},
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: "昨天"
},
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: "未生成脚本。请重试。"
},
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: "停止录音"
}
}
};