feat: Support i18n

This commit is contained in:
2026-02-05 13:59:13 +08:00
parent ff0a7dc1a8
commit 2f53e14a26
87 changed files with 4290 additions and 358 deletions

View File

@@ -0,0 +1,25 @@
{
"login": "ログイン",
"username": "ユーザー名",
"password": "パスワード",
"loginButton": "ログイン",
"loggingIn": "ログイン中...",
"welcome": "Qwen TTSへようこそ",
"loginPrompt": "続行するにはログインしてください",
"loginSuccess": "ログインしました",
"loginFailed": "ログインに失敗しました",
"loginFailedCheckCredentials": "ログインに失敗しました。ユーザー名とパスワードを確認してください",
"logoutSuccess": "ログアウトしました",
"unauthorized": "未認証です。ログインしてください",
"sessionExpired": "セッションが期限切れです。再度ログインしてください",
"noPermission": "この操作を実行する権限がありません",
"adminOnly": "この機能は管理者のみ利用できます",
"usernamePlaceholder": "ユーザー名を入力",
"passwordPlaceholder": "パスワードを入力",
"validation": {
"usernameMinLength": "ユーザー名は {{min}} 文字以上である必要があります",
"usernameMaxLength": "ユーザー名は {{max}} 文字以下である必要があります",
"passwordMinLength": "パスワードは {{min}} 文字以上である必要があります",
"apiKeyRequired": "APIキーを入力してください"
}
}

View File

@@ -0,0 +1,40 @@
{
"save": "保存",
"cancel": "キャンセル",
"confirm": "確認",
"delete": "削除",
"edit": "編集",
"add": "追加",
"create": "作成",
"update": "更新",
"submit": "送信",
"close": "閉じる",
"back": "戻る",
"next": "次へ",
"previous": "前へ",
"search": "検索",
"filter": "絞り込み",
"clear": "クリア",
"reset": "リセット",
"loading": "読み込み中...",
"noData": "データがありません",
"success": "成功",
"error": "エラー",
"warning": "警告",
"info": "情報",
"yes": "はい",
"no": "いいえ",
"ok": "OK",
"download": "ダウンロード",
"upload": "アップロード",
"copy": "コピー",
"copied": "コピーしました",
"view": "表示",
"details": "詳細",
"actions": "操作",
"generatingAudio": "音声を生成中です、お待ちください...",
"generationTakingLong": "生成に時間がかかっています、しばらくお待ちください...",
"waitedSeconds": "{{seconds}}秒待機中",
"loadingAudio": "読み込み中...",
"failedToLoadAudio": "音声の読み込みに失敗しました"
}

View File

@@ -0,0 +1,152 @@
{
"languages": {
"Auto": "自動検出",
"Chinese": "中国語",
"English": "英語",
"Japanese": "日本語",
"Korean": "韓国語",
"German": "ドイツ語",
"French": "フランス語",
"Russian": "ロシア語",
"Portuguese": "ポルトガル語",
"Spanish": "スペイン語",
"Italian": "イタリア語",
"Cantonese": "広東語",
"zh": "中国語",
"en": "英語",
"ja": "日本語",
"ko": "韓国語",
"yue": "広東語"
},
"speakers": {
"Vivian": "女性、プロフェッショナルで明瞭",
"Serena": "女性、優しく温かい",
"Aria": "女性、活発で明るい",
"Emma": "女性、成熟して落ち着いた",
"Sophie": "女性、優雅で知的",
"Isabella": "女性、穏やかで親しみやすい",
"Ava": "女性、若々しくスタイリッシュ",
"Oliver": "男性、磁性のある落ち着いた",
"Lucas": "男性、明るく爽やか",
"Ethan": "男性、プロフェッショナルで堂々とした",
"Noah": "男性、温和で親しみやすい",
"Liam": "男性、若々しく活力的"
},
"presetInstructs": [
{
"label": "Happy",
"instruct": "very happy",
"text": "The weather is so nice today, let's go to the park together!"
},
{
"label": "Sad",
"instruct": "very sad, with a crying tone",
"text": "I'm sorry, I really tried my best, but I still let you down."
},
{
"label": "Angry",
"instruct": "very angry, with intense tone",
"text": "How could you do this! This is absolutely unacceptable!"
},
{
"label": "Gentle Care",
"instruct": "gentle and caring, slow pace, soft tone, full of care and comfort",
"text": "Don't worry, everything will be fine. I'll always be here with you."
},
{
"label": "Excited",
"instruct": "very excited, faster pace, rising tone, full of energy and enthusiasm",
"text": "Awesome! We finally made it! This is so exciting!"
},
{
"label": "Anxious",
"instruct": "anxious tone, slightly faster pace, unstable tone, with tension and worry",
"text": "What should we do? We're running out of time, we won't make it, what can we do?"
},
{
"label": "Professional Broadcaster",
"instruct": "Professional news broadcaster. Pace: standard broadcasting speed, clear articulation. Emotion: calm and professional, without personal emotion. Tone: mostly flat with slight variations, emphasis on key words. Character: rigorous, objective, authoritative.",
"text": "According to Reuters, our space program has achieved a major breakthrough, with the successful completion of manned space missions."
},
{
"label": "Warm Mentor",
"instruct": "Warm mentor. Pace: unhurried, speaking slowly. Tone: stable with encouraging rises. Emotion: caring, patient, encouraging. Character: understanding, guiding, full of positive energy.",
"text": "Everyone has their own pace, don't rush. Take your time, you will definitely find your own path."
},
{
"label": "Energetic Youth",
"instruct": "Full of energy. Pace: fast, crisp articulation. Emotion: cheerful and optimistic, energetic. Tone: strong sense of rhythm, cadence. Character: outgoing, confident, enthusiastic, full of youthful spirit.",
"text": "Wow, this game is so cool! Let's team up and play together, I promise I'll carry you!"
}
],
"presetVoiceDesigns": [
{
"label": "Sweet Girl",
"instruct": "Young female, sweet and bright voice, with a touch of girlish charm. High pitch, lively and varied intonation. Moderate pace, clear articulation. Cheerful and relaxed emotion, full of youthful energy. Suitable for: customer service, voice assistant, entertainment content.",
"text": "Hello, I'm happy to help you! How may I assist you today?"
},
{
"label": "Mature Woman",
"instruct": "Mature and intellectual female voice, warm and full tone, with professional woman's capable temperament. Medium pitch, stable range. Moderate to fast pace, clear and organized. Calm and confident emotion, conveying professionalism and reliability.",
"text": "According to the latest market analysis report, this quarter's performance shows steady growth, with all indicators meeting expected targets."
},
{
"label": "Magnetic Male",
"instruct": "Mid-low male voice, deep and magnetic tone, very appealing. Slow pace, steady rhythm. Moderate volume, thick and powerful voice. Suitable for emotional content, storytelling, brand promotion.",
"text": "Night falls, yet the city lights remain brilliant. Under each light, there's a story about dreams."
},
{
"label": "Energetic Youth",
"instruct": "Energetic young male, bright and clear tone, with youthful vigor. Fast pace, strong sense of rhythm. Enthusiastic and positive emotion, very appealing. Suitable for sports, gaming, entertainment.",
"text": "Brothers, are you ready? Today we're going to challenge the new dungeon, let's go!"
},
{
"label": "Authority Expert",
"instruct": "Middle-aged male expert image, calm and authoritative tone, thick and powerful voice. Moderate pace, clear and standard articulation. Serious and professional emotion, conveying trust and expertise. Suitable for academic lectures, knowledge popularization, formal occasions.",
"text": "From a historical development perspective, technological innovation has always been the core driving force for social progress."
},
{
"label": "Gentle Mother",
"instruct": "Gentle and loving middle-aged female, soft and warm tone, full of maternal care. Slow pace, calm and soothing tone. Warm and caring emotion, giving a sense of security. Suitable for children's content, emotional companionship, bedtime stories.",
"text": "Sweetie, it's time to sleep. Mom will tell you a story. Once upon a time, there was a little rabbit who lived in the forest..."
},
{
"label": "Broadcasting Host",
"instruct": "Professional broadcasting host voice, full and round tone, standard pronunciation. Medium pitch, wide range. Standard pace, precise rhythm control. Professional and calm emotion, clear articulation. Suitable for news broadcasting, program hosting, formal reading.",
"text": "Hello dear listeners, welcome to today's program. Next, we bring you today's news."
},
{
"label": "Playful Girl",
"instruct": "Playful and cute girl voice, light and lively sound, with unique girlish liveliness. High and varied tone, with coquettish and cute elements. Varying pace, clear articulation with cute interjections.",
"text": "Oh no, I didn't mean to~ Can you forgive me this time? Please please~"
}
],
"presetRefTexts": [
{
"label": "Natural Life",
"text": "In this fast-paced world, we're always rushing forward, forgetting to pause and listen to our inner voice. Life is not just about the busyness before us, but also the poetry in the distance and the little moments of happiness we discover. May this recording bring you a touch of gentleness and strength, like an afternoon breeze. No matter how the future changes, remember to keep your love for life and embrace every bright tomorrow."
},
{
"label": "Professional Formal",
"text": "Technological progress allows us to transcend the boundaries of time and space, continuing emotions and memories through digitalization. Voice cloning is not only precise code logic, but also a bridge connecting humanity with future intelligence. Through the continuous evolution of deep learning and neural networks, every subtle intonation can be accurately captured. Let us witness together how technology gives voice a more vital expression."
},
{
"label": "Literary Narrative",
"text": "The spring breeze brushes the willow tips, carrying the fragrance of earth and news of blooming flowers. Have you ever anticipated meeting your long-lost self at some street corner? Whether it's hearty laughter or low whispers, each voice is a unique mark of life. Let us record this moment, let memories flow in the sound, becoming an eternal melody."
}
],
"uiLanguages": {
"zh-CN": "Simplified Chinese",
"zh-TW": "Traditional Chinese",
"en-US": "English",
"ja-JP": "Japanese",
"ko-KR": "Korean"
},
"uiLanguagesShort": {
"zh-CN": "ZH-CN",
"zh-TW": "ZH-TW",
"en-US": "EN",
"ja-JP": "JA",
"ko-KR": "KO"
}
}

View File

@@ -0,0 +1,42 @@
{
"http": {
"400": "リクエストパラメータエラー",
"401": "認証されていません。ログインしてください",
"403": "アクセスが禁止されています",
"404": "リクエストされたリソースが存在しません",
"500": "サーバー内部エラー",
"502": "ゲートウェイエラー",
"503": "サービスが一時的に利用できません",
"default": "リクエストに失敗しました。後でもう一度お試しください"
},
"fieldNames": {
"username": "ユーザー名",
"password": "パスワード",
"text": "テキスト",
"language": "言語",
"speaker": "話者",
"instruct": "感情指示",
"name": "名前",
"description": "説明",
"audio_file": "オーディオファイル",
"reference_audio": "参照オーディオ",
"reference_text": "参照テキスト",
"api_key": "APIキー",
"backend": "バックエンドサービス"
},
"validation": {
"required": "{{field}}を入力してください",
"minLength": "{{field}}は少なくとも{{min}}文字必要です",
"maxLength": "{{field}}は{{max}}文字を超えることはできません",
"invalid": "{{field}}の形式が正しくありません",
"notFound": "{{field}}が見つかりません",
"alreadyExists": "{{field}}は既に存在します",
"uploadFailed": "{{field}}のアップロードに失敗しました",
"fileTooLarge": "ファイルサイズは{{size}}MBを超えることはできません",
"invalidFileType": "サポートされていないファイルタイプです"
},
"networkError": "ネットワーク接続に失敗しました。ネットワークを確認してください",
"unknownError": "不明なエラー",
"operationFailed": "操作に失敗しました",
"tryAgain": "もう一度お試しください"
}

View File

@@ -0,0 +1,25 @@
import common from './common.json'
import nav from './nav.json'
import auth from './auth.json'
import tts from './tts.json'
import voice from './voice.json'
import job from './job.json'
import settings from './settings.json'
import user from './user.json'
import errors from './errors.json'
import constants from './constants.json'
import onboarding from './onboarding.json'
export default {
common,
nav,
auth,
tts,
voice,
job,
settings,
user,
errors,
constants,
onboarding,
}

View File

@@ -0,0 +1,55 @@
{
"jobHistory": "ジョブ履歴",
"jobList": "ジョブリスト",
"jobDetails": "ジョブ詳細",
"jobId": "ジョブID",
"status": "ステータス",
"createdAt": "作成日時",
"completedAt": "完了日時",
"duration": "処理時間",
"statusPending": "待機中",
"statusProcessing": "処理中",
"statusCompleted": "完了",
"statusFailed": "失敗",
"noJobs": "ジョブがありません",
"viewJob": "ジョブを表示",
"deleteJob": "ジョブを削除",
"deleteJobConfirm": "このジョブを削除してもよろしいですか?",
"jobDeleted": "ジョブを削除しました",
"refreshJobs": "ジョブを更新",
"inputText": "入力テキスト",
"parameters": "パラメータ",
"result": "結果",
"errorMessage": "エラーメッセージ",
"downloadResult": "結果をダウンロード",
"retryJob": "再試行",
"cancelJob": "ジョブをキャンセル",
"historyTitle": "履歴",
"historyCount": "{{count}}件の記録",
"retry": "再試行",
"noHistory": "履歴がありません",
"historyDescription": "音声生成後、記録がここに表示されます",
"detailsDescription": "ジョブの詳細パラメータと生成結果を表示",
"basicInfo": "基本情報",
"speaker": "話者: ",
"language": "言語: ",
"autoDetect": "自動検出",
"fastMode": "高速モード: ",
"useCache": "キャッシュ使用: ",
"synthesisText": "合成テキスト",
"notSet": "未設定",
"voiceDescription": "音声説明",
"emotionGuidance": "感情ガイダンス",
"referenceText": "参照テキスト",
"notProvided": "提供なし",
"advancedParameters": "詳細パラメータ",
"maxNewTokens": "最大生成長: ",
"temperature": "Temperature: ",
"topK": "Top K: ",
"topP": "Top P: ",
"repetitionPenalty": "繰り返しペナルティ: ",
"audioPlayback": "音声再生",
"typeCustomVoice": "カスタム音声",
"typeVoiceDesign": "音声デザイン",
"typeVoiceClone": "音声クローン"
}

View File

@@ -0,0 +1,12 @@
{
"home": "ホーム",
"settings": "設定",
"userManagement": "ユーザー管理",
"logout": "ログアウト",
"login": "ログイン",
"toggleTheme": "テーマ切替",
"changeLanguage": "言語変更",
"customVoiceTab": "カスタム",
"voiceDesignTab": "デザイン",
"voiceCloneTab": "クローン"
}

View File

@@ -0,0 +1,25 @@
{
"welcome": "Qwen3 TTSへようこそ",
"configureApiKey": "Aliyun APIキーを設定",
"selectBackendDescription": "TTSバックエンドモードを選択してください。後で設定で変更できます",
"enterApiKeyDescription": "Aliyun APIキーを入力してください。システムがその有効性を検証します",
"localModel": "ローカルモデル",
"localModelDescription": "無料でローカルQwen3-TTSモデルを使用",
"localModelNoPermission": "ローカルモデルの権限がありません。管理者にお問い合わせください",
"aliyunApi": "Aliyun API",
"aliyunApiRecommended": "(推奨)",
"aliyunApiDescription": "APIキーの設定が必要。従量課金制",
"skipConfig": "設定をスキップ",
"nextStep": "次へ",
"back": "戻る",
"verifying": "検証中...",
"verifyAndComplete": "検証して完了",
"apiKey": "APIキー",
"howToGetApiKey": "APIキーの取得方法",
"skipSuccess": "設定をスキップしました。デフォルトでローカルモードを使用します",
"operationFailed": "操作に失敗しました。再試行してください",
"configComplete": "設定が完了しました。デフォルトでローカルモードを使用します",
"configCompleteAliyun": "設定が完了しました。デフォルトでAliyunモードを使用します",
"saveFailed": "設定の保存に失敗しました。再試行してください",
"verifyFailed": "APIキーの検証に失敗しました。確認して再試行してください"
}

View File

@@ -0,0 +1,61 @@
{
"settings": "設定",
"generalSettings": "一般設定",
"backendSettings": "バックエンド設定",
"apiSettings": "API設定",
"preferencesSaved": "設定を保存しました",
"preferencesSaveFailed": "設定の保存に失敗しました",
"defaultBackend": "デフォルトバックエンド",
"local": "ローカルモデル",
"aliyun": "Aliyun API",
"aliyunApiKey": "Aliyun APIキー",
"apiKeyPlaceholder": "APIキーを入力してください",
"apiKeyDescription": "Aliyun TTSサービスの認証に使用",
"saveApiKey": "キーを保存",
"apiKeySaved": "APIキーを保存しました",
"apiKeySaveFailed": "APIキーの保存に失敗しました",
"showApiKey": "キーを表示",
"hideApiKey": "キーを非表示",
"testConnection": "接続テスト",
"connectionSuccess": "接続成功",
"connectionFailed": "接続失敗",
"language": "表示言語",
"languageDescription": "インターフェース言語を選択",
"theme": "テーマ",
"themeLight": "ライト",
"themeDark": "ダーク",
"themeSystem": "システム設定",
"title": "設定",
"description": "アカウント設定と環境設定を管理",
"backendPreference": "バックエンド設定",
"backendPreferenceDescription": "デフォルトのTTSバックエンドモードを選択",
"localModel": "ローカルモデル",
"localModelDescription": "無料でローカルQwen3-TTSモデルを使用",
"localModelNoPermission": "管理者にローカルモデルの使用権限をお問い合わせください",
"aliyunApi": "Aliyun API",
"aliyunApiDescription": "Aliyun TTSサービスを使用",
"switchedToLocal": "ローカルモードに切り替えました",
"switchedToAliyun": "Aliyunモードに切り替えました",
"saveFailed": "保存に失敗しました。再試行してください",
"apiKeyUpdated": "APIキーを更新し、検証しました",
"apiKeyVerifyFailed": "APIキーの検証に失敗しました",
"verifyFailed": "検証に失敗しました",
"currentStatus": "現在のステータス:",
"configured": "設定済みで有効",
"notConfigured": "未設定",
"apiKey": "APIキー",
"updating": "更新中...",
"addKey": "キーを追加",
"updateKey": "キーを更新",
"verifyKey": "キーを検証",
"deleteKey": "キーを削除",
"deleteKeyConfirm": "Aliyun APIキーを削除してもよろしいですか削除後は自動的にローカルモードに切り替わります。",
"keyDeleted": "APIキーを削除しました。ローカルモードに切り替えました",
"deleteFailed": "削除に失敗しました",
"accountInfo": "アカウント情報",
"accountInfoDescription": "アカウントの基本情報",
"email": "メールアドレス",
"changePassword": "パスワード変更",
"passwordChangeSuccess": "パスワードを変更しました",
"passwordChangeFailed": "パスワードの変更に失敗しました"
}

View File

@@ -0,0 +1,80 @@
{
"customVoice": "カスタム音声",
"voiceDesign": "音声デザイン",
"voiceClone": "音声クローン",
"text": "テキスト",
"textPlaceholder": "合成するテキストを入力してください...",
"language": "言語",
"speaker": "話者",
"instruct": "感情指示",
"instructPlaceholder": "例:とても嬉しい、少し悲しい...",
"customSpeaker": "カスタム話者",
"customSpeakerPlaceholder": "例Vivian、Alice...",
"presetInstructs": "プリセット感情",
"generate": "音声生成",
"generating": "生成中...",
"generationSuccess": "音声の生成に成功しました",
"generationFailed": "音声の生成に失敗しました",
"audioPlayer": "オーディオプレーヤー",
"noAudio": "オーディオがありません",
"downloadAudio": "オーディオをダウンロード",
"playAudio": "再生",
"pauseAudio": "一時停止",
"backend": "バックエンドサービス",
"localBackend": "ローカルモデル",
"aliyunBackend": "Alibaba Cloud API",
"backendSwitched": "バックエンドを切り替えました",
"backendError": "バックエンドサービスエラー",
"languageLabel": "言語",
"speakerLabel": "話者",
"speakerPlaceholder": "話者を選択",
"textLabel": "合成テキスト",
"instructLabel": "感情ガイダンス(オプション)",
"instructPlaceholderDesign": "音声デザインのプリセットガイダンスを使用",
"instructPlaceholderDefault": "例:優しく思いやりのある、ゆっくりとしたペース、温かみのある",
"advancedOptions": "詳細オプション",
"advancedOptionsTitle": "詳細パラメータ設定",
"advancedOptionsDescription": "生成パラメータを調整して、オーディオ品質と生成長を制御します",
"creating": "作成中...",
"taskCreated": "タスクを作成しました",
"taskCreateFailed": "タスクの作成に失敗しました",
"loadDataFailed": "データの読み込みに失敗しました",
"myVoiceDesigns": "マイ音声デザイン",
"builtinSpeakers": "組み込み話者",
"designDescriptionLabel": "音声説明",
"designDescriptionPlaceholder": "例:成熟した男性、低くて磁性的、権威的",
"saveDesignButton": "音声デザインを保存",
"saveDesignTitle": "音声デザインを保存",
"saveDesignDescription": "現在の音声デザインに名前を付けて保存し、今後すばやく使用できるようにします",
"designNameLabel": "デザイン名",
"designNamePlaceholder": "例:磁性的な男性の声",
"preparing": "準備中...",
"designSaved": "音声デザインを保存しました",
"clonePrepared": "音声クローンの準備が完了しました",
"clonePrepareFailed": "クローンの準備に失敗しましたが、デザインは保存されました",
"saveFailed": "保存に失敗しました",
"fillDesignDescription": "音声説明を入力してください",
"fillDesignName": "デザイン名を入力してください",
"advancedParams": {
"maxNewTokens": {
"label": "最大生成長",
"description": "生成されるオーディオの最大長を制御します。値が大きいほど長いオーディオを生成できますが、処理時間も増加します"
},
"temperature": {
"label": "温度",
"description": "生成のランダム性を制御します。値が高いほど多様な出力、低いほど安定した一貫性のある出力になります"
},
"topK": {
"label": "Top K",
"description": "サンプリング時に確率が最も高いK個の候補のみを考慮します。値が小さいほど確定的、大きいほど多様になります"
},
"topP": {
"label": "Top P (ニュークリアスサンプリング)",
"description": "累積確率の閾値。累積確率がPに達する候補からサンプリングします。出力の多様性を制御します"
},
"repetitionPenalty": {
"label": "繰り返しペナルティ",
"description": "繰り返しコンテンツの生成を抑制します。値が大きいほど繰り返しを避けますが、過度に大きいと自然さに影響する可能性があります"
}
}
}

View File

@@ -0,0 +1,59 @@
{
"userManagement": "ユーザー管理",
"userList": "ユーザーリスト",
"userId": "ユーザーID",
"username": "ユーザー名",
"role": "ロール",
"createdAt": "作成日時",
"lastLogin": "最終ログイン",
"actions": "操作",
"addUser": "ユーザーを追加",
"editUser": "ユーザーを編集",
"deleteUser": "ユーザーを削除",
"deleteUserConfirm": "ユーザー {{username}} を削除してもよろしいですか?",
"userDeleted": "ユーザーを削除しました",
"userAdded": "ユーザーを追加しました",
"userUpdated": "ユーザーを更新しました",
"userOperationFailed": "ユーザー操作に失敗しました",
"roleAdmin": "管理者",
"roleUser": "一般ユーザー",
"password": "パスワード",
"newPassword": "新しいパスワード",
"confirmPassword": "パスワード確認",
"passwordMismatch": "パスワードが一致しません",
"changePassword": "パスワード変更",
"passwordChanged": "パスワードを変更しました",
"noUsers": "ユーザーがいません",
"searchUsers": "ユーザーを検索",
"filterByRole": "ロールで絞り込み",
"allRoles": "すべてのロール",
"createUser": "ユーザーを作成",
"loadUsersFailed": "ユーザーリストの読み込みに失敗しました",
"userUpdateSuccess": "ユーザーを更新しました",
"userCreateSuccess": "ユーザーを作成しました",
"operationFailed": "操作に失敗しました",
"userDeleteSuccess": "ユーザーを削除しました",
"deleteFailed": "削除に失敗しました",
"createUserDialog": "ユーザーを作成",
"editUserDialog": "ユーザーを編集",
"createUserDescription": "新しいユーザーを作成し、基本情報を設定",
"editUserDescription": "ユーザー情報と権限設定を変更",
"email": "メールアドレス",
"passwordOptional": "パスワード (空欄の場合は変更なし)",
"isActive": "アクティブ状態",
"isSuperuser": "スーパー管理者",
"canUseLocalModel": "ローカルモデル権限",
"canUseLocalModelDescription": "ユーザーにローカルTTSモデルの使用を許可",
"saving": "保存中...",
"active": "アクティブ",
"inactive": "非アクティブ",
"superuser": "スーパー管理者",
"normalUser": "一般ユーザー",
"localModelPermission": "ローカルモデル",
"noPermission": "なし",
"validation": {
"usernameMinLength": "ユーザー名は3文字以上である必要があります",
"usernameMaxLength": "ユーザー名は20文字以下である必要があります",
"emailInvalid": "有効なメールアドレスを入力してください"
}
}

View File

@@ -0,0 +1,59 @@
{
"voiceDesign": "音声デザイン",
"voiceClone": "音声クローン",
"designName": "音声名",
"designNamePlaceholder": "音声名を入力してください",
"designDescription": "音声説明",
"designDescriptionPlaceholder": "音声の特徴を説明してください...",
"referenceAudio": "参照オーディオ",
"uploadReference": "参照オーディオをアップロード",
"referenceText": "参照テキスト",
"referenceTextPlaceholder": "参照オーディオのテキスト内容を入力してください...",
"cloneName": "クローン名",
"cloneNamePlaceholder": "クローン音声名を入力してください",
"cloneDescription": "クローン説明",
"cloneDescriptionPlaceholder": "クローン音声を説明してください...",
"uploadAudio": "オーディオをアップロード",
"audioFile": "オーディオファイル",
"audioText": "オーディオテキスト",
"audioTextPlaceholder": "オーディオに対応するテキストを入力してください...",
"saveVoice": "音声を保存",
"savingVoice": "保存中...",
"voiceSaved": "音声を保存しました",
"voiceSaveFailed": "音声の保存に失敗しました",
"deleteVoice": "音声を削除",
"deleteVoiceConfirm": "この音声を削除してもよろしいですか?",
"voiceDeleted": "音声を削除しました",
"voiceList": "音声リスト",
"noVoices": "音声がありません",
"selectVoice": "音声を選択",
"voiceDetails": "音声詳細",
"createdAt": "作成日時",
"updatedAt": "更新日時",
"step1Title": "オーディオ素材",
"step2Title": "合成設定",
"uploadTab": "オーディオをアップロード",
"recordTab": "オンライン録音",
"refAudioLabel": "参照オーディオファイル",
"refTextLabel": "参照トランスクリプト(オプション、精度向上)",
"refTextPlaceholder": "参照オーディオに対応するテキスト内容...",
"nextStep": "次へ",
"prevStep": "前へ",
"readPrompt": "次のいずれかの段落を読んでください:",
"currentRefText": "現在の参照テキスト",
"currentRefTextPlaceholder": "選択したテキストがここに表示されます...",
"languageOptional": "言語(オプション)",
"fastMode": "高速モード",
"useCache": "キャッシュを使用",
"uploadAudioFile": "オーディオをアップロード",
"recordOnline": "オンライン録音",
"validationFailed": "ファイル検証に失敗しました",
"validating": "検証中...",
"selectAudioFile": "オーディオファイルを選択",
"seconds": "秒",
"recordingValidationFailed": "録音検証に失敗しました",
"browserNotSupported": "お使いのブラウザは録音機能をサポートしていません",
"recordingComplete": "録音完了",
"releaseToFinish": "離して完了",
"holdToRecord": "長押しで録音"
}