feat(i18n): add Japanese localization (#9955)

This commit is contained in:
Cui Yuxuan
2026-09-07 22:21:48 +08:00
committed by GitHub
parent 1651ef245e
commit ec848fc2c3
54 changed files with 6409 additions and 29 deletions
+16
View File
@@ -0,0 +1,16 @@
## AstrBot へようこそ
🌟 AstrBot をご利用いただきありがとうございます!
AstrBot は、個人チャットやグループチャット向けのエージェント型 AI アシスタントです。複数の IM プラットフォームと豊富な組み込み機能に対応しています。快適で効率的な体験をお楽しみいただければ幸いです。❤️
重要なお知らせ:
AstrBot は、AGPLv3 ライセンスの下で公開されている**無料のオープンソースソフトウェアプロジェクト**です。ソースコードと関連リソースは、[**公式サイト**](https://astrbot.app)および[**GitHub**](https://github.com/astrbotdevs/astrbot)で公開されています。
現在、AstrBot は**いかなる商用サービスも提供しておらず**、公式チームが名目を問わずユーザーに料金を請求することは**一切ありません**。
AstrBot の利用に際して支払いを求められた場合は、**詐欺の可能性があります**。直ちに返金を求め、メールでご報告ください。
📊 本プロジェクトをご利用になる前に、[エンドユーザー使用許諾契約](https://github.com/AstrBotDevs/AstrBot/blob/master/EULA.md)をよくお読みください。インストールした時点で、そのすべての内容に同意したものとみなされます。
📮 公式メールアドレス:[community@astrbot.app](mailto:community@astrbot.app)
@@ -0,0 +1,6 @@
{
"metadata": {
"display_name": "AstrBot",
"desc": "AstrBot の組み込みプラグインで、基本機能を提供します。"
}
}
@@ -0,0 +1,6 @@
{
"metadata": {
"display_name": "組み込みコマンド",
"desc": "AstrBot の組み込みプラグインで、/reset、/help、/sid などの組み込みコマンドを提供します。"
}
}
+5 -4
View File
@@ -3248,12 +3248,13 @@ CONFIG_METADATA_2 = {
"""
v4.7.0 之后,name, description, hint 等字段已经实现 i18n 国际化。国际化资源文件位于:
Since v4.7.0, fields such as name, description, and hint support i18n.
Their resources are stored in:
- dashboard/src/i18n/locales/en-US/features/config-metadata.json
- dashboard/src/i18n/locales/zh-CN/features/config-metadata.json
- dashboard/src/i18n/locales/<locale>/features/config-metadata.json
如果在此文件中添加了新的配置字段,请务必同步更新上述两个国际化资源文件。
When adding configuration fields here, update this file for every supported
Dashboard locale.
"""
CONFIG_METADATA_3 = {
"ai_group": {
@@ -63,6 +63,16 @@ LINE_I18N_RESOURCES = {
"hint": "Used to verify LINE webhook signatures.",
},
},
"ja-JP": {
"channel_access_token": {
"description": "LINE チャネルアクセストークン",
"hint": "LINE Messaging API のチャネルアクセストークンです。",
},
"channel_secret": {
"description": "LINE チャネルシークレット",
"hint": "LINE Webhook の署名検証に使用します。",
},
},
}
+2 -2
View File
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="en">
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.svg" />
@@ -14,7 +14,7 @@
<!-- VAD (Voice Activity Detection) Libraries -->
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web@1.22.0/dist/ort.wasm.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@ricky0123/vad-web@0.0.29/dist/bundle.min.js"></script>
<title>AstrBot - 仪表盘</title>
<title>AstrBot Dashboard</title>
</head>
<body>
<div id="app"></div>
+10 -3
View File
@@ -11,6 +11,9 @@ const translations = ref<Record<string, any>>({});
*/
export async function initI18n(locale: Locale = 'zh-CN') {
currentLocale.value = locale;
if (typeof document !== 'undefined') {
document.documentElement.lang = locale;
}
// 加载静态翻译数据
loadTranslations(locale);
@@ -85,6 +88,9 @@ export function useI18n() {
const setLocale = async (newLocale: Locale) => {
if (newLocale !== currentLocale.value) {
currentLocale.value = newLocale;
if (typeof document !== 'undefined') {
document.documentElement.lang = newLocale;
}
loadTranslations(newLocale);
// 保存到localStorage
@@ -103,7 +109,7 @@ export function useI18n() {
const locale = computed(() => currentLocale.value);
// 获取可用语言列表
const availableLocales: Locale[] = ['zh-CN', 'en-US', 'ru-RU'];
const availableLocales: Locale[] = ['zh-CN', 'en-US', 'ru-RU', 'ja-JP'];
// 检查是否已加载
const isLoaded = computed(() => Object.keys(translations.value).length > 0);
@@ -159,7 +165,8 @@ export function useLanguageSwitcher() {
const languageOptions = computed(() => [
{ value: 'zh-CN', label: '简体中文', flag: '🇨🇳' },
{ value: 'en-US', label: 'English', flag: '🇺🇸' },
{ value: 'ru-RU', label: 'Русский', flag: '🇷🇺' }
{ value: 'ru-RU', label: 'Русский', flag: '🇷🇺' },
{ value: 'ja-JP', label: '日本語', flag: '🇯🇵' }
]);
const currentLanguage = computed(() => {
@@ -221,7 +228,7 @@ function deepMerge(target: Record<string, any>, source: Record<string, any>) {
export async function setupI18n() {
// 从localStorage获取保存的语言设置
const savedLocale = localStorage.getItem('astrbot-locale') as Locale;
const initialLocale = savedLocale && ['zh-CN', 'en-US', 'ru-RU'].includes(savedLocale)
const initialLocale = savedLocale && ['zh-CN', 'en-US', 'ru-RU', 'ja-JP'].includes(savedLocale)
? savedLocale
: 'zh-CN';
@@ -12,7 +12,9 @@
"chunks": "Chunks",
"sessionConfig": "Session Config",
"initError": "Initialization Failed",
"retry": "Retry"
"retry": "Retry",
"noDescription": "No description",
"switchLegacy": "Switch to legacy knowledge base"
},
"card": {
"edit": "Edit",
@@ -34,7 +36,9 @@
"rerankProviderInfo": "Provider: {id}",
"cancel": "Cancel",
"submit": "Create",
"nameRequired": "Please enter knowledge base name"
"nameRequired": "Please enter knowledge base name",
"nameChangeHint": "If you change the knowledge base name later, update it in the configuration file as well.",
"embeddingLockedHint": "The embedding model cannot be changed after selection. Create a new knowledge base to use a different model."
},
"edit": {
"title": "Edit Knowledge Base",
@@ -0,0 +1,24 @@
{
"create": "作成",
"read": "読み込み",
"update": "更新",
"delete": "削除",
"search": "検索",
"filter": "絞り込み",
"sort": "並べ替え",
"export": "エクスポート",
"import": "インポート",
"backup": "バックアップ",
"restore": "復元",
"copy": "コピー",
"paste": "貼り付け",
"cut": "切り取り",
"undo": "元に戻す",
"redo": "やり直す",
"refresh": "再読み込み",
"submit": "送信",
"reset": "リセット",
"clear": "クリア",
"save": "保存",
"close": "閉じる"
}
@@ -0,0 +1,144 @@
{
"save": "保存",
"cancel": "キャンセル",
"close": "閉じる",
"copy": "コピー",
"copied": "コピーしました",
"copyFailed": "コピーに失敗しました",
"delete": "削除",
"edit": "編集",
"add": "追加",
"confirm": "確認",
"loading": "読み込み中…",
"success": "成功",
"error": "エラー",
"warning": "警告",
"info": "情報",
"name": "名前",
"description": "説明",
"author": "開発者",
"status": "ステータス",
"actions": "操作",
"enable": "有効にする",
"disable": "無効にする",
"enabled": "有効",
"disabled": "無効",
"reload": "再読み込み",
"configure": "設定",
"install": "インストール",
"uninstall": "アンインストール",
"update": "更新",
"language": "言語",
"settings": "設定",
"locale": "ja-JP",
"type": "種類",
"press": "押す",
"longPress": "長押し",
"yes": "はい",
"no": "いいえ",
"imagePreview": "画像プレビュー",
"autoDetect": "自動検出",
"restoreDefault": "デフォルトに戻す",
"dialog": {
"confirmTitle": "操作の確認",
"confirmMessage": "この操作を実行してもよろしいですか?",
"confirmButton": "確認",
"cancelButton": "キャンセル"
},
"restart": {
"waiting": "AstrBot の再起動を待っています…",
"maxRetriesReached": "ステータスの確認回数が上限に達しました。手動で確認してください。"
},
"upgradeRecovery": {
"title": "アップグレードが完了していません",
"description": "WebUI は {dashboardVersion} に更新されていますが、AstrBot Core はまだ {coreVersion} です。通常、アップグレード中にページを更新したことで再起動処理が中断された場合に発生します。再起動しても解決しない場合は、AstrBot のランタイムディレクトリにある data/dist フォルダーを削除してから、AstrBot を再起動してください。",
"hint": "アップグレードを完了するにはバックエンドを再起動してください。再起動後、ページは自動的に更新されます。",
"restartButton": "今すぐバックエンドを再起動",
"laterButton": "後で対応",
"restarting": "バックエンドの再起動を要求しています…",
"waiting": "再起動を開始しました。バックエンドの復旧を待っています…",
"failed": "再起動の要求に失敗しました。AstrBot を手動で再起動してください。"
},
"readme": {
"title": "プラグインのドキュメント",
"buttons": {
"viewOnGithub": "GitHub でリポジトリを表示",
"refresh": "ドキュメントを再読み込み"
},
"loading": "README を読み込んでいます…",
"errors": {
"fetchFailed": "README の取得に失敗しました",
"fetchError": "README の取得中にエラーが発生しました"
},
"empty": {
"title": "このプラグインにはドキュメントのリンクまたは GitHub リポジトリの URL がありません。",
"subtitle": "詳しくはプラグインマーケットを確認するか、プラグインの開発者にお問い合わせください。"
}
},
"changelog": {
"title": "変更履歴",
"loading": "変更履歴を読み込んでいます…",
"empty": {
"title": "このプラグインには変更履歴がありません",
"subtitle": "開発者はプラグインディレクトリに CHANGELOG.md ファイルを追加して、変更履歴を提供できます"
}
},
"editor": {
"fullscreen": "全画面で編集",
"editingTitle": "内容を編集中"
},
"templateList": {
"addEntry": "項目を追加",
"empty": "項目がありません。テンプレートを選択して追加してください",
"missingTemplate": "対応するテンプレートが見つかりません。削除してから追加し直してください。",
"unknownTemplate": "テンプレートが指定されていません"
},
"list": {
"addItemPlaceholder": "新しい項目を入力し、Enter キーで追加",
"addButton": "追加",
"addMore": "さらに追加",
"batchImport": "一括インポート",
"batchImportTitle": "一括インポート",
"batchImportLabel": "1 行に 1 項目",
"batchImportPlaceholder": "例:\n項目 1\n項目 2\n項目 3\n項目 4",
"batchImportHint": "各行が個別の項目として扱われ、空行は自動的に無視されます",
"batchImportButton": "{count} 件をインポート",
"noItems": "項目がありません",
"noItemsHint": "項目がありません。上の入力欄に入力し、Enter キーで追加してください",
"inputPlaceholder": "入力し、Enter キーで追加",
"editTitle": "リスト項目を編集",
"modifyButton": "変更"
},
"itemCard": {
"enabled": "有効",
"disabled": "無効",
"delete": "削除",
"edit": "編集",
"copy": "コピー",
"noData": "データがありません"
},
"objectEditor": {
"dialogTitle": "キーと値のペアを編集",
"noItems": "項目がありません",
"noParams": "パラメーターがありません",
"presets": "プリセット",
"newKeyLabel": "新しいキー",
"valueTypeLabel": "値の型",
"keyExists": "キーはすでに存在します",
"invalidJson": "JSON の形式が正しくありません",
"placeholders": {
"keyName": "キー",
"stringValue": "文字列値",
"numberValue": "数値",
"jsonValue": "JSON"
}
},
"firstNotice": {
"title": "初回のお知らせ",
"loading": "初回のお知らせを読み込んでいます…",
"empty": {
"title": "初回のお知らせはありません",
"subtitle": "FIRST_NOTICE.md が見つからないか、ファイルが空です。"
}
}
}
@@ -0,0 +1,135 @@
{
"logoTitle": "AstrBot WebUI",
"version": {
"hasNewVersion": "AstrBot の新しいバージョンがあります!",
"dashboardHasNewVersion": "WebUI の新しいバージョンがあります!"
},
"buttons": {
"update": "更新",
"account": "アカウント",
"logout": "ログアウト",
"theme": {
"title": "テーマ",
"light": "ライトモード",
"dark": "ダークモード",
"system": "システム設定に従う"
}
},
"updateDialog": {
"title": "AstrBot を更新",
"currentVersion": "現在のバージョン",
"status": {
"checking": "更新を確認しています…",
"switching": "バージョンを切り替えています…",
"updating": "更新しています…"
},
"tabs": {
"release": "😊 正式版"
},
"advancedSettings": "詳細設定",
"releases": "バージョン一覧",
"updateToLatest": "最新バージョンに更新",
"showPreReleases": "プレリリース版を表示",
"preRelease": "プレリリース",
"preReleaseWarning": {
"title": "プレリリース版に関する注意",
"description": "プレリリースと表示されたバージョンには、未知の問題やバグが含まれている可能性があるため、本番環境での使用は推奨されません。問題が見つかった場合は、以下に報告してください:",
"issueLink": "GitHub Issues"
},
"tip": "💡 ヒント:",
"tipContinue": "デフォルトでは、バージョンの切り替え時に対応する WebUI ファイルがダウンロードされます。WebUI のコードはプロジェクトの dashboard ディレクトリにあり、npm を使用して独自にビルドすることもできます。",
"dockerTip": "バージョンの切り替え時に、ボット本体と管理画面の両方の更新を試みます。Docker でデプロイしている場合は、イメージを再取得するか、",
"dockerTipLink": "watchtower",
"dockerTipContinue": "を使用して更新を自動的に監視・取得することもできます。",
"table": {
"tag": "タグ",
"publishDate": "公開日",
"content": "内容",
"sourceUrl": "ソース URL",
"actions": "操作",
"view": "表示",
"switch": "切り替え"
},
"releaseNotes": {
"title": "変更履歴",
"latestLabel": "最新バージョン"
},
"progress": {
"target": "対象バージョン:",
"preparing": "更新を準備しています…",
"dashboard": "WebUI をダウンロード",
"core": "プロジェクトコードをダウンロード",
"dependencies": "依存関係を更新しています…",
"restart": "再起動を準備しています…",
"restarting": "AstrBot を再起動しています",
"completed": "更新が完了しました",
"successReady": "更新に成功しました",
"autoReloadIn": "{seconds} 秒後にページを自動的に再読み込みします",
"reloadNow": "今すぐ再読み込み",
"failed": "更新に失敗しました"
},
"redirectConfirm": {
"title": "公式アップデートガイドを開く",
"message": "GitHub Releases ページを開きます。続行しますか?",
"latestLabel": "最新バージョン",
"targetVersion": "対象バージョン:",
"currentVersion": "現在のバージョン:",
"guideTitle": "ページを開いた後の手順:",
"guideStep1": "OS とアーキテクチャに対応するインストーラーをダウンロードします。",
"guideStep2": "インストール後に AstrBot を再起動します。",
"guideStep3": "Docker を使用している場合は、イメージを更新する方法を優先してください。"
},
"desktopApp": {
"title": "デスクトップアプリを更新",
"message": "AstrBot デスクトップアプリの更新を確認し、アップグレードします。",
"currentVersion": "現在のバージョン:",
"latestVersion": "最新バージョン:",
"checking": "デスクトップアプリの更新を確認しています…",
"hasNewVersion": "新しいバージョンがあります。確認をクリックするとアップグレードできます。",
"isLatest": "最新バージョンです",
"installing": "更新をダウンロードしてインストールしています。完了後、アプリは自動的に再起動します…",
"checkFailed": "更新の確認に失敗しました。しばらくしてからもう一度お試しください。",
"installFailed": "アップグレードに失敗しました。しばらくしてからもう一度お試しください。"
},
"dashboardUpdate": {
"title": "管理画面のみを最新バージョンに更新",
"currentVersion": "現在のバージョン",
"hasNewVersion": "新しいバージョンがあります!",
"isLatest": "最新バージョンです。",
"fallback": "全体の更新に失敗した場合に、WebUI のみを再ダウンロードできます。",
"downloadAndUpdate": "ダウンロードして更新"
}
},
"accountDialog": {
"title": "アカウント設定",
"securityWarning": "セキュリティ上の注意:アカウントを保護するため、パスワードを変更してください",
"securityWarningMd5": "新しいバージョンの AstrBot ではセキュリティが強化されています。パスワードを変更してください。",
"securityWarningUpgrade": "旧形式で保存されたパスワードが検出されました。セキュリティのアップグレードを完了するには、パスワードを変更してください。",
"form": {
"currentPassword": "現在のパスワード",
"newPassword": "新しいパスワード",
"confirmPassword": "新しいパスワードを確認",
"newUsername": "新しいユーザー名(任意)",
"passwordHint": "8 文字以上で、大文字、小文字、数字を含めてください",
"confirmPasswordHint": "確認のため、新しいパスワードをもう一度入力してください",
"usernameHint": "現在のユーザー名を変更しない場合は空欄にしてください",
"defaultCredentials": "デフォルトのユーザー名は astrbot です。初期パスワードは初回起動時に自動生成され、コンソールに表示されます。"
},
"validation": {
"passwordRequired": "パスワードを入力してください",
"passwordMinLength": "パスワードは 8 文字以上にしてください",
"passwordUppercase": "パスワードには大文字を 1 文字以上含めてください",
"passwordLowercase": "パスワードには小文字を 1 文字以上含めてください",
"passwordDigit": "パスワードには数字を 1 文字以上含めてください",
"passwordMatch": "パスワードが一致しません",
"usernameMinLength": "ユーザー名は 3 文字以上にしてください"
},
"actions": {
"save": "変更を保存",
"cancel": "キャンセル"
},
"messages": {
"updateFailed": "変更に失敗しました。もう一度お試しください"
}
}
}
@@ -0,0 +1,57 @@
{
"welcome": "ようこそ",
"dashboard": "ダッシュボード",
"platforms": "ボット",
"providers": "モデルプロバイダー",
"commands": "コマンド管理",
"persona": "ペルソナ設定",
"data": "データとログ",
"dataTabs": {
"statistics": "統計",
"conversations": "会話",
"logs": "ログ",
"trace": "トレース"
},
"subagent": "サブエージェント編成",
"toolUse": "MCP",
"extension": "プラグイン",
"extensionTabs": {
"installed": "プラグイン",
"market": "プラグインマーケット",
"mcp": "MCP",
"skills": "スキル",
"components": "ハンドラー管理"
},
"config": "設定ファイル",
"chat": "チャット",
"cron": "スケジュールタスク",
"conversation": "会話データ",
"sessionManagement": "カスタムルール",
"console": "プラットフォームログ",
"trace": "トレース",
"alkaid": "Alkaid",
"knowledgeBase": "ナレッジベース",
"about": "概要",
"settings": "設定",
"changelog": "変更履歴",
"documentation": "公式ドキュメント",
"faq": "FAQ",
"github": "GitHub",
"drag": "ドラッグ",
"groups": {
"more": "その他の機能"
},
"changelogDialog": {
"title": "変更履歴",
"loading": "読み込み中…",
"error": "読み込みに失敗しました",
"notFound": "このバージョンの変更履歴が見つかりません",
"selectVersion": "バージョンを選択",
"current": "現在"
},
"configTabs": {
"normal": "一般設定",
"system": "システム設定"
},
"pluginWebui": "プラグインページ"
}
@@ -0,0 +1,149 @@
{
"knowledgeBaseSelector": {
"notSelected": "未選択",
"buttonText": "ナレッジベースを選択…",
"dialogTitle": "ナレッジベースを選択",
"loading": "読み込み中…",
"noKnowledgeBases": "利用可能なナレッジベースがありません",
"createKnowledgeBase": "ナレッジベースを作成",
"selectedCount": "{count} 件のナレッジベースを選択中",
"confirmSelection": "選択を確定",
"cancelSelection": "キャンセル",
"noDescription": "説明なし",
"documentCount": "{count} 件のドキュメント",
"chunkCount": "{count} 件のチャンク"
},
"pluginSetSelector": {
"title": "プラグイン",
"subtitle": "現在の設定ファイルで使用できるプラグインを選択します。",
"preset": "プリセット",
"searchPlaceholder": "プラグインを検索",
"selectAll": "すべて選択",
"noSearchResults": "一致するプラグインがありません",
"notSelected": "有効なプラグインはありません",
"allPlugins": "すべてのプラグインを有効化 (*)",
"selectedCount": "{count} 件のプラグインを選択中",
"buttonText": "プラグインセットを選択…",
"dialogTitle": "プラグインセットを選択",
"loading": "読み込み中…",
"enableAll": "すべてのプラグインを有効化",
"enableNone": "すべてのプラグインを無効化",
"customSelect": "個別に選択",
"noPlugins": "利用可能なプラグインがありません",
"confirmSelection": "選択を確定",
"cancelSelection": "キャンセル",
"noDescription": "説明なし",
"notActivated": "未有効化",
"note": "*システムプラグインと、プラグインページで無効になっているプラグインは表示されません。",
"selectedPluginsLabel": "選択したプラグイン:",
"allPluginsLabel": "すべてのプラグイン"
},
"providerSelector": {
"notSelected": "未選択",
"defaultModel": "デフォルトモデル",
"model": "モデル",
"searchPlaceholder": "モデルを検索",
"buttonText": "プロバイダーを選択…",
"dialogTitle": "プロバイダーを選択",
"loading": "読み込み中…",
"noProviders": "利用可能なプロバイダーがありません",
"confirmSelection": "選択を確定",
"cancelSelection": "キャンセル",
"clearSelection": "選択しない",
"clearSelectionSubtitle": "現在の選択を解除",
"unknownType": "不明な種類",
"createProvider": "プロバイダーを作成",
"manageProviders": "プロバイダー管理",
"selectProviderPool": "プロバイダープールを選択…",
"selectedModelCount": "{count} 件のモデルを選択中",
"selectedCount": "{count} 件のプロバイダーを選択中"
},
"personaSelector": {
"notSelected": "未選択",
"defaultPersona": "デフォルトのペルソナ",
"buttonText": "ペルソナを選択…",
"dialogTitle": "ペルソナを選択",
"noDescription": "説明なし",
"noPersonas": "利用可能なペルソナがありません",
"createPersona": "新しいペルソナを作成",
"cancelSelection": "キャンセル",
"confirmSelection": "選択を確定",
"selectPersonaPool": "ペルソナプールを選択…",
"rootFolder": "すべてのペルソナ",
"emptyFolder": "このフォルダーは空です"
},
"personaQuickPreview": {
"title": "ペルソナの機能",
"titleWithName": "{name} のペルソナ機能",
"editHint": "選択内容はこのペルソナに即時保存され、このペルソナを使用するすべての設定に反映されます。",
"loading": "読み込み中…",
"saving": "保存中…",
"saved": "保存しました",
"saveFailed": "保存に失敗しました:{message}",
"unknownError": "不明なエラー",
"noPersonaSelected": "ペルソナが選択されていません",
"personaNotFound": "ペルソナの詳細が見つかりません",
"defaultPersonaReadonly": "デフォルトのペルソナでは、利用可能なすべての機能が常に使用されます。機能を個別に選択するには、カスタムペルソナを作成するか選択してください。",
"systemPromptLabel": "システムプロンプト",
"toolsLabel": "ツール",
"mcpToolsLabel": "MCP ツール",
"pluginToolsLabel": "プラグインツール",
"skillsLabel": "スキル",
"configureTools": "ツールを設定",
"configureSkills": "スキルを設定",
"toolDialogTitle": "{name} のツールを設定",
"toolDialogHint": "このペルソナが使用できる関数ツールを選択してください。",
"selectAllTools": "すべてのツールを選択",
"toolCount": "{selected}/{total} 件のツールを選択中",
"skillDialogTitle": "{name} のスキルを設定",
"skillDialogHint": "このペルソナが使用できるスキルを選択してください。",
"selectAllSkills": "すべてのスキルを選択",
"skillCount": "{selected}/{total} 件のスキルを選択中",
"pluginSource": "プラグイン",
"localSource": "ローカル",
"presetSource": "プリセット",
"localAndSandboxSource": "ローカル + サンドボックス",
"unknownSource": "不明なソース",
"originLabel": "ソース",
"originNameLabel": "ソース名",
"toolInactive": "無効",
"skillInactive": "無効",
"toolInactiveTooltip": "このツールは無効です。プラグイン → ハンドラー管理 → 関数ツールで再度有効にしてください。",
"allTools": "すべてのツールを利用可能",
"allToolsWithCount": "すべてのツールを利用可能({count})",
"noTools": "ツールが設定されていません",
"noToolsAvailable": "利用可能なツールがありません",
"noMcpTools": "利用可能な MCP ツールがありません",
"noPluginTools": "利用可能なプラグインツールがありません",
"allSkills": "すべてのスキルを利用可能",
"allSkillsWithCount": "すべてのスキルを利用可能({count})",
"noSkills": "スキルが設定されていません"
},
"t2iTemplateEditor": {
"buttonText": "長文の画像化テンプレートをカスタマイズ",
"dialogTitle": "長文を画像としてレンダリングする HTML テンプレートをカスタマイズ",
"newTemplateNameLabel": "新しいテンプレート名を入力",
"nameRequired": "名前を入力してください",
"selectTemplateLabel": "テンプレートを選択",
"applied": "適用済み",
"apply": "適用",
"templateEditor": "テンプレートエディター",
"new": "新規作成",
"resetBase": "base をリセット",
"delete": "削除",
"save": "保存",
"livePreview": "ライブプレビュー(実際の表示と異なる場合があります)",
"refreshPreview": "プレビューを更新",
"previewText": "これはテンプレートの出力を確認するためのサンプルテキストです。\n\n複数行のテキストやさまざまな書式を含めることができます。",
"syntaxHint": "jinja2 構文をサポートしています。使用可能な変数:text | safe(レンダリングするテキスト)、version(AstrBot のバージョン)。プレビュー用のテスト内容が読み込まれない場合や表示が正しくない場合は、「base をリセット」をクリックしてデフォルトのテンプレートに戻してください。",
"saveAndApply": "現在のテンプレートを保存して適用",
"confirmReset": "リセットの確認",
"confirmResetMessage": "'base' テンプレートをデフォルトの内容に戻してもよろしいですか?エディター内の未保存の変更はすべて失われます。この操作は元に戻せません。",
"confirmResetButton": "リセットを実行",
"confirmDelete": "削除の確認",
"confirmDeleteMessage": "テンプレート '{name}' を削除してもよろしいですか?この操作は元に戻せません。",
"confirmDeleteButton": "削除を実行",
"confirmAction": "操作の確認",
"confirmApplyMessage": "'{name}' の変更を保存し、使用中のテンプレートとして設定してもよろしいですか?"
}
}
@@ -0,0 +1,22 @@
{
"loading": "読み込み中",
"success": "成功",
"error": "エラー",
"warning": "警告",
"info": "情報",
"pending": "待機中",
"processing": "処理中",
"completed": "完了",
"failed": "失敗",
"cancelled": "キャンセル済み",
"timeout": "タイムアウト",
"connecting": "接続中",
"connected": "接続済み",
"disconnected": "切断済み",
"online": "オンライン",
"offline": "オフライン",
"active": "アクティブ",
"inactive": "非アクティブ",
"ready": "準備完了",
"busy": "処理中"
}
@@ -0,0 +1,17 @@
{
"hero": {
"title": "AstrBot",
"subtitle": "AstrBot は、複数のプラットフォームと大規模言語モデルに対応したオープンソースのチャットボット開発フレームワークです。",
"starButton": "このプロジェクトに Star を付ける 🌟",
"issueButton": "Issue を送信"
},
"contributors": {
"title": "コントリビューター",
"description": "本プロジェクトは、多くのオープンソースコミュニティメンバーによって共同でメンテナンスされています。すべてのコントリビューターの貢献に感謝します。",
"viewLink": "AstrBot のコントリビューターを見る"
},
"stats": {
"title": "グローバルデプロイ",
"license": "AstrBot は AGPL v3 ライセンスの下でオープンソースとして公開されています"
}
}
@@ -0,0 +1,44 @@
{
"title": "Alkaid ラボ",
"subtitle": "最先端の AI 機能を探索",
"comingSoon": "この先は、また今度探索しましょう。",
"page": {
"title": "The Alkaid Project.",
"subtitle": "AstrBot Alpha プロジェクト",
"navigation": {
"knowledgeBase": "ナレッジベース(プラグイン)",
"longTermMemory": "長期記憶レイヤー",
"other": "…"
}
},
"features": {
"knowledgeBase": "ナレッジベース",
"longTermMemory": "長期記憶",
"advancedChat": "高度なチャット",
"multiModal": "マルチモーダル対話"
},
"status": {
"experimental": "実験的",
"beta": "ベータ版",
"stable": "安定版",
"deprecated": "非推奨"
},
"sigma": {
"subtitle": "AstrBot 実験プロジェクト",
"visualization": "可視化",
"filterUserId": "ユーザー ID で絞り込む",
"filter": "絞り込む",
"resetFilter": "絞り込みをリセット",
"refreshGraph": "グラフを再読み込み",
"nodeDetails": "ノード詳細",
"id": "ID",
"type": "種類",
"name": "名前",
"userId": "ユーザー ID",
"timestamp": "タイムスタンプ",
"graphStats": "グラフ統計",
"nodeCount": "ノード数",
"edgeCount": "エッジ数",
"inDevelopment": "開発中"
}
}
@@ -0,0 +1,155 @@
{
"title": "ナレッジベース",
"subtitle": "ナレッジベースの内容を管理・検索",
"documents": {
"title": "ドキュメント一覧",
"name": "ドキュメント名",
"size": "サイズ",
"uploadTime": "アップロード日時",
"status": "ステータス",
"actions": "操作"
},
"management": {
"delete": "削除",
"preview": "プレビュー",
"download": "ダウンロード",
"reindex": "再インデックス化"
},
"notInstalled": {
"title": "ナレッジベースプラグインがまだインストールされていません",
"install": "今すぐインストール"
},
"empty": {
"title": "ナレッジベースがありません。作成してみましょう!🙂",
"create": "ナレッジベースを作成"
},
"list": {
"title": "ナレッジベース一覧",
"create": "ナレッジベースを作成",
"config": "設定",
"checkUpdate": "プラグインの更新を確認",
"updatePlugin": "プラグインを {version} に更新",
"knowledgeCount": "件のナレッジ",
"tips": "ヒント:チャットページで /kb コマンドを使用すると、使い方を確認できます。"
},
"createDialog": {
"title": "新しいナレッジベースを作成",
"nameLabel": "ナレッジベース名",
"descriptionLabel": "説明",
"descriptionPlaceholder": "ナレッジベースの簡単な説明…",
"embeddingModelLabel": "埋め込みモデル(Embedding Model)",
"rerankModelLabel": "リランキングモデル(Rerank Model)",
"providerInfo": "プロバイダー ID:{id}、埋め込みモデルの次元数:{dimensions}",
"rerankProviderInfo": "プロバイダー ID:{id}",
"tips": "ヒント:ナレッジベースの埋め込みモデルを選択した後は、そのプロバイダーのモデルやベクトル次元情報を変更しないでください。変更すると、ナレッジベースの再現率(リコール率)が大幅に低下したり、エラーが発生したりする可能性があります。",
"cancel": "キャンセル",
"create": "作成"
},
"emojiPicker": {
"title": "絵文字を選択",
"close": "閉じる",
"categories": {
"emotions": "スマイリーと感情",
"animals": "動物と自然",
"food": "食べ物と飲み物",
"activities": "アクティビティとオブジェクト",
"travel": "旅行と場所",
"symbols": "記号と旗"
}
},
"contentDialog": {
"title": "ナレッジベース管理",
"embeddingModel": "埋め込みモデル",
"vectorDimension": "ベクトル次元",
"usage": "使用方法:チャットページで「/kb use {name}」と入力",
"tabs": {
"upload": "ファイルをアップロード",
"search": "内容を検索",
"fromURL": "URL からインポート"
}
},
"upload": {
"title": "ナレッジベースにファイルをアップロード",
"subtitle": "txt、pdf、epub、word、excel などの各種形式に対応",
"dropzone": "ここにファイルをドラッグ&ドロップするか、クリックしてアップロード",
"chunkSettings": {
"title": "チャンク設定",
"tooltip": "チャンクサイズは各テキストブロックの大きさを、オーバーラップ長は隣接するテキストブロック間の重なりを決定します。\n小さいチャンクほど精度は高くなりますが数が増えます。適切なオーバーラップを設定すると検索精度を高められます。",
"chunkSizeLabel": "チャンクサイズ",
"chunkSizeHint": "各テキストブロックのサイズを指定します。空欄の場合はデフォルト値を使用します。",
"overlapLabel": "オーバーラップ長",
"overlapHint": "隣接するテキストブロック間の重なりを指定します。空欄の場合はデフォルト値を使用します。"
},
"upload": "ファイルをアップロード",
"uploading": "アップロード中…"
},
"search": {
"queryLabel": "ナレッジベースの内容を検索",
"queryPlaceholder": "キーワードを入力してナレッジベースの内容を検索…",
"resultCountLabel": "結果件数",
"searching": "検索中…",
"resultsTitle": "検索結果",
"relevance": "関連度",
"noResults": "一致する内容が見つかりませんでした"
},
"deleteDialog": {
"title": "削除の確認",
"confirmText": "ナレッジベース {name} を削除してもよろしいですか?",
"warning": "この操作は元に戻せません。ナレッジベースの内容はすべて完全に削除されます。",
"cancel": "キャンセル",
"delete": "削除"
},
"messages": {
"pluginNotAvailable": "プラグインがインストールされていないか、利用できません",
"pluginNotActivated": "astrbot_plugin_knowledge_base プラグインが有効になっていません。プラグイン管理ページで有効にしてから AstrBot を再起動してください。",
"checkPluginFailed": "プラグインの確認に失敗しました",
"installFailed": "インストールに失敗しました",
"installPluginFailed": "プラグインのインストールに失敗しました",
"getKnowledgeBaseListFailed": "ナレッジベース一覧の取得に失敗しました",
"knowledgeBaseCreated": "ナレッジベースを作成しました",
"createFailed": "作成に失敗しました",
"createKnowledgeBaseFailed": "ナレッジベースの作成に失敗しました",
"pleaseEnterKnowledgeBaseName": "ナレッジベース名を入力してください",
"pleaseSelectFile": "先にファイルを選択してください",
"operationSuccess": "操作が完了しました:{message}",
"uploadFailed": "アップロードに失敗しました",
"fileUploadFailed": "ファイルのアップロードに失敗しました",
"pleaseEnterSearchContent": "検索内容を入力してください",
"noMatchingContent": "一致する内容が見つかりませんでした",
"searchFailed": "検索に失敗しました",
"searchKnowledgeBaseFailed": "ナレッジベースの検索に失敗しました",
"deleteTargetNotExists": "削除対象が存在しません",
"knowledgeBaseDeleted": "ナレッジベースを削除しました",
"deleteFailed": "削除に失敗しました",
"deleteKnowledgeBaseFailed": "ナレッジベースの削除に失敗しました",
"getEmbeddingModelListFailed": "埋め込みモデル一覧の取得に失敗しました",
"updateAvailable": "新しいバージョンがあります: {current} -> {latest}",
"pluginUpToDate": "プラグインは最新です",
"pluginNotFoundInMarket": "プラグインマーケットにこのプラグインが見つかりませんでした",
"checkUpdateFailed": "更新の確認に失敗しました",
"updateSuccess": "プラグインを更新しました",
"updateFailed": "更新に失敗しました",
"updatePluginFailed": "プラグインの更新に失敗しました"
},
"importFromUrl": {
"title": "URL からインポート",
"urlLabel": "Web ページの URL",
"urlPlaceholder": "ナレッジを抽出する Web ページの URL を入力してください",
"optionsTitle": "インポートオプション",
"tooltip": "これらのオプションでは、URL の内容からテキストを抽出・処理する方法を指定します。\n空欄の場合はプラグインのデフォルト設定を使用します。\nLLM によるテキスト修復と要約を有効にすると、処理に時間がかかる場合があります。",
"useLlmRepairLabel": "LLM テキスト修復を有効化",
"useClusteringSummaryLabel": "クラスタリング要約を有効化",
"repairLlmProviderIdLabel": "テキスト修復モデル",
"summarizeLlmProviderIdLabel": "要約モデル",
"embeddingProviderIdLabel": "埋め込みモデル",
"chunkSizeLabel": "チャンクサイズ",
"chunkOverlapLabel": "チャンクのオーバーラップ",
"startImport": "インポートを開始",
"importing": "インポート中…",
"importSuccess": "インポートしました",
"importFailed": "インポートに失敗しました",
"uploadingChunks": "内容を抽出しました。チャンクをアップロードしています…",
"preRequisite": "ヒント:この機能を使用する前に、プラグインマーケットで astrbot_plugin_url_2_knowledge_base をインストールし、プラグインのドキュメントに従って Playwright をインストールしてください。",
"allChunksUploaded": "すべてのチャンクをアップロードしました"
}
}
@@ -0,0 +1,97 @@
{
"title": "長期記憶",
"subtitle": "AI アシスタントの長期記憶を管理",
"memories": {
"title": "記憶一覧",
"content": "記憶内容",
"importance": "重要度",
"createTime": "作成日時",
"lastAccess": "最終アクセス",
"category": "カテゴリ"
},
"categories": {
"personal": "個人情報",
"preferences": "ユーザーの好み",
"conversations": "会話履歴",
"facts": "事実情報",
"skills": "スキル・知識"
},
"importance": {
"high": "高",
"medium": "中",
"low": "低"
},
"actions": {
"view": "詳細を表示",
"edit": "編集",
"delete": "削除",
"pin": "固定",
"unpin": "固定を解除"
},
"filters": {
"all": "すべて",
"category": "カテゴリ別",
"importance": "重要度別",
"dateRange": "期間別",
"title": "絞り込み",
"userIdLabel": "ユーザー ID で絞り込む",
"filterButton": "絞り込む",
"resetButton": "絞り込みをリセット",
"refreshButton": "グラフを再読み込み"
},
"search": {
"title": "記憶を検索",
"userIdLabel": "ユーザー ID",
"queryLabel": "キーワードを入力",
"searchButton": "検索",
"resultsTitle": "検索結果",
"noResults": "関連する記憶が見つかりませんでした",
"similarity": "関連度",
"noTextContent": "テキスト内容なし"
},
"addMemory": {
"title": "記憶データを追加",
"textLabel": "テキスト内容を入力",
"userIdLabel": "ユーザー ID",
"summarizeLabel": "要約する",
"addButton": "データを追加"
},
"nodeDetails": {
"title": "ノード詳細",
"id": "ID",
"type": "種類",
"name": "名前",
"userId": "ユーザー ID",
"timestamp": "タイムスタンプ"
},
"graphStats": {
"title": "グラフ統計",
"nodeCount": "ノード数",
"edgeCount": "エッジ数"
},
"factDialog": {
"title": "記憶情報",
"id": "ID",
"docId": "ドキュメント ID",
"createdAt": "作成日時",
"updatedAt": "更新日時",
"metadata": "メタデータ",
"metadataKey": "キー",
"metadataValue": "値",
"loading": "読み込み中…",
"close": "閉じる",
"noValue": "なし",
"unknown": "不明"
},
"messages": {
"searchQueryRequired": "検索キーワードを入力してください",
"searchSuccess": "関連する記憶が {count} 件見つかりました",
"searchNoResults": "関連する記憶が見つかりませんでした",
"searchError": "検索に失敗しました",
"addSuccess": "記憶データを追加しました",
"addError": "記憶データの追加に失敗しました",
"factDetailsError": "記憶の詳細の取得に失敗しました",
"metadataParseError": "メタデータを解析できません",
"relationNoMemoryData": "この関係には関連する記憶データがありません"
}
}
@@ -0,0 +1,80 @@
{
"login": "ログイン",
"username": "ユーザー名",
"password": "パスワード",
"defaultHint": "初回ログインの場合は、ログに表示された初期パスワードを確認してください。",
"totp": {
"code": "認証コード",
"verify": "認証",
"trustDevice": "このデバイスを 30 日間信頼する"
},
"recovery": {
"title": "リカバリーコードでログイン",
"subtitle": "認証アプリを使用できない場合は、リカバリーコードでログインできます。",
"code": "リカバリーコード",
"submit": "リカバリーコードでログイン",
"useRecoveryCode": "TOTP を使用できませんか?",
"backToLogin": "ログインに戻る",
"savedWarning": "リカバリーコードを紛失すると、通常の方法ではアカウントへのアクセスを復旧できません。",
"continue": "続行",
"acknowledge": "リカバリーコードを保存しました",
"totpDisableWarning": "リカバリーコードでログインすると、二要素認証が無効になります。"
},
"setup": {
"title": "アカウント設定",
"subtitle": "AstrBot の管理に使用するアカウントを作成します。",
"username": "新しいユーザー名",
"password": "新しいパスワード",
"confirmPassword": "新しいパスワードを確認",
"passwordHint": "8 文字以上で、大文字、小文字、数字をそれぞれ含めてください。",
"submit": "設定を完了",
"totp": {
"code": "認証コード",
"qrAlt": "TOTP QR コード",
"title": "TOTP 設定を完了",
"subtitle": "認証アプリで QR コードをスキャンし、二要素認証の設定を完了してください。",
"step2Hint": "認証アプリ(Google Authenticator、Authy など)でこの QR コードをスキャンし、認証コードを入力してください。",
"verify": "認証して完了",
"verifyError": "認証に失敗しました。認証アプリに表示されている最新の認証コードを入力してください。",
"disableError": "TOTP を無効にできませんでした。もう一度お試しください。",
"back": "戻る"
},
"validation": {
"usernameRequired": "ユーザー名を入力してください。",
"usernameMinLength": "ユーザー名は 3 文字以上で入力してください。",
"passwordRequired": "パスワードを入力してください。",
"passwordMinLength": "パスワードは 8 文字以上で入力してください。",
"passwordUppercase": "パスワードには大文字を 1 文字以上含めてください。",
"passwordLowercase": "パスワードには小文字を 1 文字以上含めてください。",
"passwordDigit": "パスワードには数字を 1 文字以上含めてください。",
"confirmPasswordRequired": "パスワードをもう一度入力してください。",
"passwordMatch": "パスワードが一致しません。"
}
},
"logo": {
"title": "AstrBot WebUI",
"totpTitle": "二要素認証",
"subtitle": "ようこそ"
},
"versions": {
"webui": "WebUI",
"astrbotRuntime": "AstrBot",
"astrbotCode": "AstrBot(Code)",
"mismatchTooltip": "バージョンが一致しません",
"dialogTitle": "バージョン状態の確認が必要です",
"webuiMismatchTitle": "WebUI と現在の AstrBot のバージョンが一致しません",
"webuiMismatchMessage": "現在の WebUI は、この AstrBot バージョン向けにビルドされていない可能性があり、一部のページや API が正常に動作しないことがあります。まず AstrBot を手動で再起動してください。解消しない場合は、実行ディレクトリ内の data/dist を削除して再起動すると、AstrBot が対応する WebUI を再ダウンロードします。",
"runtimeMismatchTitle": "実行中の AstrBot とコードのバージョンが一致しません",
"runtimeMismatchMessage": "コードは更新されていますが、現在のプロセスは古いバージョンで実行されています。AstrBot を手動で再起動すると、新しいコードが読み込まれます。",
"faq": "FAQ を見る",
"close": "閉じる"
},
"theme": {
"light": "ライトモード",
"dark": "ダークモード",
"system": "システム設定に従う",
"switchToDark": "ダークテーマに切り替える",
"switchToLight": "ライトテーマに切り替える",
"title": "テーマ"
}
}
@@ -0,0 +1,4 @@
{
"messageCount": "メッセージ数",
"time": "時刻"
}
@@ -0,0 +1,219 @@
{
"title": "チャットしよう!",
"subtitle": "AI アシスタントと会話",
"input": {
"placeholder": "何でも聞いてください",
"projectPlaceholder": "次に何をしますか?",
"send": "送信",
"clear": "クリア",
"upload": "ファイルをアップロード",
"voice": "音声入力",
"recordingPrompt": "録音中です。お話しください…",
"chatPrompt": "チャットしよう!",
"dropToUpload": "ドロップしてファイルをアップロード",
"stopGenerating": "生成を停止"
},
"message": {
"user": "ユーザー",
"assistant": "アシスタント",
"system": "システム",
"error": "エラーメッセージ",
"loading": "考え中…"
},
"voice": {
"start": "録音を開始",
"stop": "録音を停止",
"recording": "新しい録音",
"processing": "処理中…",
"error": "録音に失敗しました",
"listening": "音声を検出しています…",
"speaking": "発話中",
"startRecording": "音声入力を開始",
"liveMode": "リアルタイム会話"
},
"welcome": {
"title": "今日は何を話しますか?",
"subtitle": "あなたの AI 会話アシスタント",
"quickActions": "クイック操作",
"examples": "質問例"
},
"actions": {
"copy": "コピー",
"regenerate": "再生成",
"retry": "再試行",
"retryWithModel": "別のモデルを使用",
"noAvailableModels": "利用可能なモデルがありません",
"like": "高評価",
"dislike": "低評価",
"share": "共有",
"newChat": "新しいチャット",
"deleteChat": "この会話を削除",
"editTitle": "タイトルを編集",
"fullscreen": "全画面モード",
"exitFullscreen": "全画面を終了",
"reply": "引用して返信",
"providerConfig": "モデル設定",
"toolsUsed": "使用したツール",
"toolCallUsed": "{name} ツールを使用しました",
"pythonCodeAnalysis": "Python コード分析を使用しました"
},
"ipython": {
"output": "出力"
},
"toolStatus": {
"done": "完了",
"running": "実行中"
},
"thread": {
"title": "分岐",
"askInThread": "新しい分岐で質問",
"count": "{count} 件の分岐",
"createFailed": "分岐の作成に失敗しました",
"delete": "分岐を削除",
"confirmDelete": "この分岐を削除しますか?この操作は元に戻せません。",
"placeholder": "この内容についてさらに質問…"
},
"conversation": {
"title": "会話",
"newConversation": "新しい会話",
"noHistory": "会話履歴がありません",
"systemStatus": "システム状態",
"llmService": "LLM サービス",
"speechToText": "音声認識",
"editDisplayName": "セッション名を編集",
"displayName": "セッション名",
"displayNameUpdated": "セッション名を更新しました",
"displayNameUpdateFailed": "セッション名の更新に失敗しました",
"confirmDelete": "「{name}」を削除しますか?この操作は元に戻せません。"
},
"modes": {
"darkMode": "ダークモードに切り替え",
"lightMode": "ライトモードに切り替え"
},
"shortcuts": {
"help": "ヘルプを表示",
"voiceRecord": "音声を録音",
"pasteImage": "画像を貼り付け",
"sendKey": {
"title": "送信ショートカット",
"enterToSend": "Enter で送信",
"shiftEnterToSend": "Shift+Enter で送信"
}
},
"streaming": {
"enabled": "ストリーミング応答を有効にしました",
"disabled": "ストリーミング応答を無効にしました",
"on": "ストリーミング",
"off": "通常"
},
"transport": {
"title": "通信方式",
"sse": "SSE",
"websocket": "WebSocket"
},
"config": {
"title": "設定"
},
"reasoning": {
"thinking": "思考プロセス",
"summarySeparator": "、",
"thinkSummary": "思考 {count} 回",
"toolSummary": "ツール使用 {count} 回",
"think": "思考",
"toolUsed": "ツールを使用"
},
"reply": {
"replyTo": "引用",
"notFound": "メッセージが見つかりません"
},
"project": {
"title": "プロジェクト",
"create": "プロジェクトを作成",
"edit": "プロジェクトを編集",
"name": "プロジェクト名",
"emoji": "アイコン(Emoji)",
"description": "プロジェクトの説明(任意)",
"workspace": {
"type": "ワークスペース",
"session": "セッションごとに分離",
"project": "プロジェクト共有ワークスペース",
"custom": "カスタムパス",
"path": "ワークスペースのパス"
},
"loadingSessions": "会話を読み込み中…",
"noSessions": "このプロジェクトには会話がありません",
"noProjects": "プロジェクトがありません",
"confirmDelete": "プロジェクト「{title}」を削除しますか?プロジェクト内の会話は削除されません。"
},
"workspaceFiles": {
"title": "ワークスペースのファイル",
"open": "ワークスペースのファイルを開く",
"close": "ワークスペースのファイルを閉じる",
"refresh": "ファイルツリーを再読み込み",
"filter": "ファイルを絞り込み…",
"clearFilter": "ファイルの絞り込みを解除",
"empty": "ワークスペースにファイルがありません",
"noMatches": "一致するファイルがありません",
"loadFailed": "ワークスペースのファイルを読み込めませんでした",
"previewFailed": "ファイルを読み込めませんでした",
"tooLarge": "ファイルが大きすぎるためプレビューできません",
"download": "ファイルをダウンロード",
"downloadFailed": "ファイルのダウンロードに失敗しました",
"dialogPreview": "拡大プレビューを開く",
"closePreview": "ファイルプレビューを閉じる",
"closeDialogPreview": "拡大プレビューを閉じる"
},
"time": {
"today": "今日",
"yesterday": "昨日"
},
"stats": {
"tokens": "トークン",
"inputTokens": "入力(その他)",
"outputTokens": "出力トークン",
"cachedTokens": "入力(キャッシュ)",
"duration": "所要時間",
"ttft": "最初のトークンまでの時間"
},
"tokenUsage": {
"tooltip": "{used} / {limit} トークン({percent}%)"
},
"refs": {
"title": "参照",
"sources": "出典"
},
"connection": {
"title": "接続状態のお知らせ",
"message": "チャット接続を再確立する必要があります。",
"reasons": "次の原因が考えられます:",
"reasonWindowResize": "チャットウィンドウのサイズを切り替えた(正常な動作)",
"reasonMultipleTabs": "別のタブでチャットページを開いた",
"reasonNetworkIssue": "ネットワーク接続が一時的に切断された",
"notice": "注意:メッセージを確実に受信するため、同時に維持できるチャット接続は 1 件のみです。複数のタブでチャットを使用している場合は、1 ページだけ残してください。",
"understand": "了解しました",
"status": {
"reconnecting": "再接続中…",
"reconnected": "チャット接続を再確立しました",
"failed": "接続に失敗しました。ページを再読み込みしてください"
}
},
"commandSuggestion": {
"navigate": "移動",
"select": "決定",
"close": "閉じる"
},
"errors": {
"sendMessageFailed": "メッセージの送信に失敗しました。もう一度お試しください",
"createSessionFailed": "セッションの作成に失敗しました。ページを再読み込みしてください"
},
"batch": {
"selected": "{count} 件を選択中",
"confirmDelete": "{count} 件の会話を削除しますか?この操作は元に戻せません。",
"selectAll": "すべて選択",
"deselectAll": "すべて選択解除",
"delete": "削除",
"exit": "終了",
"partialFailure": "{total} 件の会話のうち {failed} 件を削除できませんでした",
"requestFailed": "会話の削除に失敗しました。もう一度お試しください。"
}
}
@@ -0,0 +1,97 @@
{
"title": "コマンド管理",
"summary": {
"total": "表示中のコマンド数",
"disabled": "無効",
"conflicts": "競合あり"
},
"conflictAlert": {
"title": "コマンドの競合を検出しました",
"description": "現在 {count} 組のコマンドが競合しています。競合するコマンドは複数のプラグインを同時に実行するため、意図しない動作が発生する可能性があります。",
"hint": "「名前を変更」ボタンをクリックして競合するコマンドの名前を変更し、競合を解消してください。"
},
"table": {
"headers": {
"command": "コマンド",
"type": "種類",
"plugin": "所属プラグイン",
"description": "説明",
"permission": "権限",
"status": "状態",
"actions": "操作"
}
},
"type": {
"command": "コマンド",
"group": "コマンドグループ",
"subCommand": "サブコマンド"
},
"status": {
"enabled": "有効",
"disabled": "無効",
"pluginDisabled": "プラグイン無効",
"conflict": "競合あり"
},
"permission": {
"everyone": "すべてのユーザー",
"admin": "管理者"
},
"tooltips": {
"enable": "コマンドを有効にする",
"disable": "コマンドを無効にする",
"rename": "コマンド名を変更する",
"viewDetails": "詳細を見る",
"pluginInactive": "先に所属プラグインを有効にしてください"
},
"dialogs": {
"rename": {
"title": "コマンド名を変更",
"newName": "新しいコマンド名",
"aliases": "エイリアスを管理",
"addAlias": "エイリアスを追加",
"cancel": "キャンセル",
"confirm": "確定"
},
"details": {
"title": "コマンド詳細",
"type": "コマンドの種類",
"handler": "ハンドラー関数",
"module": "モジュールパス",
"originalCommand": "元のコマンド",
"effectiveCommand": "実行コマンド",
"parentGroup": "所属コマンドグループ",
"subCommands": "サブコマンド一覧",
"aliases": "エイリアス",
"permission": "必要な権限",
"conflictStatus": "競合状態"
}
},
"messages": {
"toggleSuccess": "コマンドの状態を更新しました",
"toggleFailed": "コマンドの状態を更新できませんでした",
"renameSuccess": "コマンド名を変更しました",
"renameFailed": "名前を変更できませんでした",
"loadFailed": "コマンド一覧を読み込めませんでした",
"updateSuccess": "更新しました",
"updateFailed": "更新できませんでした"
},
"search": {
"placeholder": "コマンドを検索…"
},
"empty": {
"noCommands": "コマンドはありません",
"noCommandsDesc": "現在の絞り込み条件に一致するコマンドはありません"
},
"filters": {
"all": "すべて",
"enabled": "有効",
"disabled": "無効",
"conflict": "競合あり",
"byPlugin": "プラグインで絞り込む",
"byType": "種類で絞り込む",
"byPermission": "権限で絞り込む",
"byStatus": "状態で絞り込む",
"showSystemPlugins": "システムプラグインのコマンドを表示",
"systemPluginConflictHint": "システムプラグインに関する競合があります。非表示にするには、先に競合を解消してください"
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,203 @@
{
"title": "設定ファイル",
"subtitle": "システム設定を管理します。",
"editor": {
"visual": "ビジュアル編集",
"code": "コード編集",
"revertCode": "変更前のコードに戻す",
"applyConfig": "この設定を適用",
"applyTip": "`この設定を適用` をクリックすると、設定が一時保存されてビジュアル編集に反映されます。保存するには、右下の保存ボタンをクリックしてください。"
},
"actions": {
"save": "設定を保存",
"delete": "この項目を削除",
"add": "追加",
"reset": "デフォルトに戻す",
"export": "設定をエクスポート",
"import": "設定をインポート",
"validate": "設定を検証"
},
"help": {
"documentation": "公式ドキュメント",
"support": "サポートコミュニティ",
"helpText": "設定について不明な点がある場合は、{documentation} または {support} をご覧ください。",
"helpPrefix": "設定について不明な点がある場合は、",
"helpMiddle": "または",
"helpSuffix": "をご覧ください。"
},
"messages": {
"configApplied": "設定を適用しました。保存するには、右下の保存ボタンをクリックしてください。",
"configApplyError": "設定を適用できませんでした。JSON の形式が正しくありません。",
"unsavedChangesNotice": "まだ保存されていません。右下のボタンをクリックして保存してください。",
"saveSuccess": "設定を保存しました。",
"saveError": "設定を保存できませんでした。",
"loadError": "設定を読み込めませんでした。",
"deleteSuccess": "削除しました。",
"deleteError": "削除できませんでした。",
"updateSuccess": "更新しました。",
"updateError": "更新できませんでした。"
},
"sections": {
"general": "一般設定",
"advanced": "詳細設定",
"security": "セキュリティ設定",
"appearance": "外観設定",
"notification": "通知設定",
"moreConfig": "その他の設定"
},
"general": {
"botName": "ボット名",
"language": "インターフェース言語",
"timezone": "タイムゾーン",
"autoSave": "自動保存",
"debugMode": "デバッグモード"
},
"advanced": {
"logLevel": "ログレベル",
"maxConnections": "最大接続数",
"timeout": "タイムアウト",
"retryAttempts": "再試行回数",
"cacheSize": "キャッシュサイズ"
},
"security": {
"apiKey": "API キー",
"allowedHosts": "許可するホスト",
"rateLimit": "レート制限",
"encryption": "暗号化設定"
},
"aiSettings": {
"title": "AI",
"enable": "AI を有効化",
"more": "その他の操作",
"changeRunner": "実行方式を変更",
"localSettingsTitle": "AstrBot 組み込み AI",
"settingsSuffix": "設定",
"tabs": {
"model": "モデル",
"persona": "ペルソナ",
"capabilities": "機能",
"advanced": "詳細設定"
},
"groups": {
"model": "モデル",
"modelHint": "組み込み AI で使用する会話モデルと再試行ポリシーを選択します。",
"execution": "実行設定",
"executionHint": "ツール呼び出しループと実行プロセスを設定します。",
"media": "画像と音声",
"mediaHint": "画像認識、音声認識、音声合成を設定します。",
"behavior": "メッセージ処理",
"behaviorHint": "これらの設定は、現在の設定ファイル内のすべての実行方式に適用されます。"
},
"common": {
"title": "共通設定",
"subtitle": "これらの設定は実行方式を切り替えても変更されません。"
},
"disabled": {
"title": "AI は無効です",
"subtitle": "モデルを必要とするメッセージを処理するには、AI を有効にしてください。"
},
"runnerDialog": {
"title": "実行方式を変更",
"subtitle": "外部 AI アプリケーションに接続する場合にのみ変更してください。ほとんどのユーザーには組み込み AI が適しています。",
"warningPrefix": "切り替えると、新しい実行方式のデフォルト設定が使用されます。現在の実行方式の設定は",
"warningEmphasis": "引き継がれません",
"warningSuffix": "。",
"confirm": "この方式を使用"
},
"runners": {
"local": {
"title": "組み込み AI",
"summary": "モデル、ペルソナ、ナレッジベース、ツールなど、AstrBot の AI 機能を設定します。",
"description": "モデル、ペルソナ、ナレッジベース、ツールに対応した AstrBot 組み込み AI を使用します。"
},
"dify": {
"title": "Dify",
"summary": "現在、AI 会話は Dify アプリケーションによって処理されています。",
"description": "Dify アプリケーションに接続し、アクセス設定を行います。"
},
"coze": {
"title": "Coze",
"summary": "現在、AI 会話は Coze Bot によって処理されています。",
"description": "Coze Bot に接続し、アクセス設定を行います。"
},
"dashscope": {
"title": "Alibaba Cloud Model Studio",
"summary": "現在、AI 会話は Alibaba Cloud Model Studio アプリケーションによって処理されています。",
"description": "Alibaba Cloud Model Studio アプリケーションに接続し、アクセス設定を行います。"
},
"deerflow": {
"title": "DeerFlow",
"summary": "現在、AI 会話は DeerFlow によって処理されています。",
"description": "DeerFlow サービスに接続し、実行設定を行います。"
}
}
},
"configSelection": {
"selectConfig": "設定ファイルを選択",
"defaultConfig": "デフォルト設定ファイル",
"search": "設定ファイルを検索",
"noResults": "一致する設定ファイルがありません",
"normalConfig": "一般",
"systemConfig": "システム"
},
"search": {
"placeholder": "設定項目を検索(フィールド名/説明/ヒント)",
"noResult": "一致する設定項目が見つかりません"
},
"configManagement": {
"title": "設定ファイル管理",
"description": "AstrBot では、ボットごとに個別の設定ファイルを使用できます。デフォルトでは `default` 設定が使用されます。",
"newConfig": "設定ファイルを新規作成",
"copyConfig": "設定ファイルをコピー",
"editConfig": "設定ファイルを編集",
"manageConfigs": "設定ファイルを管理…",
"configName": "名前",
"fillConfigName": "設定ファイル名を入力",
"confirmDelete": "設定ファイル「{name}」を削除しますか?この操作は元に戻せません。",
"pleaseEnterName": "設定名を入力してください。",
"nameExists": "同じ名前の設定ファイルがすでに存在します。別の名前を使用してください。",
"createFailed": "設定ファイルを新規作成できませんでした。",
"copyFailed": "設定ファイルをコピーできませんでした。",
"deleteFailed": "設定ファイルを削除できませんでした。",
"updateFailed": "設定ファイルを更新できませんでした。"
},
"buttons": {
"cancel": "キャンセル",
"create": "作成",
"update": "更新"
},
"codeEditor": {
"title": "設定ファイルを編集"
},
"fileUpload": {
"button": "ファイルを管理",
"dialogTitle": "アップロード済みファイル",
"dropzone": "新しいファイルをアップロード",
"allowedTypes": "許可される形式:{types}",
"empty": "アップロード済みのファイルはありません",
"statusMissing": "ファイルが見つかりません",
"statusUnconfigured": "設定に追加されていません",
"uploadSuccess": "{count} 個のファイルをアップロードしました。",
"uploadFailed": "アップロードできませんでした。",
"loadFailed": "ファイル一覧を取得できませんでした。",
"fileTooLarge": "ファイルが大きすぎます(上限 {max} MB):{name}",
"deleteSuccess": "ファイルを削除しました。",
"deleteFailed": "削除できませんでした。",
"addToConfig": "設定に追加しました。",
"fileCount": "ファイル:{count}",
"done": "完了"
},
"unsavedChangesWarning": {
"dialogTitle": "未保存の変更",
"leavePage": "現在の設定に未保存の変更があります。移動する前に保存しますか?",
"switchConfig": "設定ファイルを切り替えると、現在の未保存の変更は失われます。先に保存しますか?",
"options": {
"save": "保存",
"saveAndSwitch": "保存して切り替える",
"discardAndSwitch": "変更を破棄して切り替える",
"closeCard": "ポップアップを閉じる",
"confirm": "確定",
"cancel": "キャンセル"
}
}
}
@@ -0,0 +1,28 @@
{
"title": "プラットフォームログ",
"autoScroll": {
"label": "自動スクロール",
"enabled": "自動スクロールを有効にしました",
"disabled": "自動スクロールを無効にしました"
},
"hideUserChat": {
"label": "ユーザーの会話を除外",
"enabled": "ユーザーの会話を除外しました",
"disabled": "ユーザーの会話を除外"
},
"pipInstall": {
"button": "pip パッケージをインストール",
"dialogTitle": "pip パッケージをインストール",
"packageLabel": "*パッケージ名(例:llmtuner)",
"mirrorLabel": "PyPI リポジトリ URL を強制指定(任意)",
"mirrorHint": "PyPI リポジトリ URL の強制指定 > 設定項目 `PyPI リポジトリアドレス`",
"cancelButton": "キャンセル",
"installButton": "インストール",
"installSuccess": "インストールしました。",
"installFailed": "インストールできませんでした。",
"requestFailed": "リクエストに失敗しました。"
},
"debugHint": {
"text": "Debug ログは「設定ファイル → システム → コンソールログレベル」で有効にできます"
}
}
@@ -0,0 +1,159 @@
{
"title": "会話管理",
"subtitle": "ユーザーの会話履歴を管理・確認",
"filters": {
"title": "絞り込み条件",
"platform": "ボット ID",
"type": "種類",
"search": "検索キーワード",
"reset": "リセット"
},
"history": {
"title": "会話履歴",
"refresh": "再読み込み"
},
"batch": {
"deleteSelected": "選択項目を削除({count})",
"exportSelected": "選択項目をエクスポート({count})"
},
"pagination": {
"itemsPerPage": "1 ページあたり",
"showingItems": "{start}~{end} 件を表示(全 {total} 件)"
},
"table": {
"headers": {
"title": "タイトル",
"platform": "ボット ID",
"type": "メッセージの種類",
"cid": "会話 ID",
"umo": "メッセージ送信元(UMO)",
"sessionId": "セッション ID",
"createdAt": "作成日時",
"updatedAt": "更新日時",
"actions": "操作"
},
"umoDisplay": {
"parsed": "解析済み",
"raw": "UMO"
}
},
"actions": {
"view": "表示",
"edit": "編集",
"delete": "削除"
},
"messageTypes": {
"group": "グループチャット",
"friend": "個別チャット",
"unknown": "不明"
},
"status": {
"noTitle": "無題の会話",
"unknown": "不明",
"noData": "会話履歴がありません",
"emptyContent": "会話内容が空です",
"audioNotSupported": "お使いのブラウザーは音声再生に対応していません。"
},
"dialogs": {
"view": {
"title": "会話詳細",
"editMode": "会話を編集",
"previewMode": "プレビューモード",
"saveChanges": "変更を保存",
"close": "閉じる",
"confirmClose": "保存していない変更があります。閉じてもよろしいですか?"
},
"edit": {
"title": "会話情報を編集",
"titleLabel": "会話タイトル",
"titlePlaceholder": "会話タイトルを入力",
"cancel": "キャンセル",
"save": "保存"
},
"delete": {
"title": "削除の確認",
"message": "会話 {title} を削除してもよろしいですか?この操作は元に戻せません。",
"cancel": "キャンセル",
"confirm": "削除"
},
"batchDelete": {
"title": "一括削除の確認",
"message": "選択した {count} 件の会話を削除してもよろしいですか?この操作は元に戻せません。",
"andMore": "ほか {count} 件",
"cancel": "キャンセル",
"confirm": "一括削除",
"warning": "警告:この操作は元に戻せません。"
}
},
"messages": {
"fetchError": "会話一覧の取得に失敗しました",
"saveSuccess": "保存しました",
"saveError": "保存に失敗しました",
"deleteSuccess": "削除しました",
"deleteError": "削除に失敗しました",
"historyError": "会話履歴の取得に失敗しました",
"historySaveSuccess": "会話履歴を保存しました",
"historySaveError": "会話履歴の保存に失敗しました",
"invalidJson": "JSON 形式が無効です",
"noItemSelected": "削除する会話を先に選択してください",
"batchDeleteSuccess": "{count} 件の会話を削除しました",
"batchDeleteError": "一括削除に失敗しました",
"batchDeletePartial": "削除完了:成功 {deleted} 件、失敗 {failed} 件",
"exportSuccess": "エクスポートしました",
"exportError": "エクスポートに失敗しました",
"noItemSelectedForExport": "エクスポートする会話を先に選択してください",
"copySuccess": "コピーしました",
"copyError": "コピーに失敗しました"
},
"workspace": {
"legacy": "旧バージョンに戻る",
"newVersion": "新バージョンを使用",
"filters": {
"title": "絞り込み",
"keyword": "検索キーワード",
"keywordPlaceholder": "タイトルまたはメッセージ内容を検索",
"robots": "ボット ID",
"robotEmpty": "会話履歴のあるボットがありません",
"types": "会話の種類",
"umo": "UMO",
"umoPlaceholder": "完全または一部の UMO を入力",
"sort": "並び順",
"reset": "絞り込みをクリア",
"close": "絞り込みを閉じる",
"done": "完了",
"updatedDesc": "更新日時が新しい順",
"createdDesc": "作成日時が新しい順",
"updatedAsc": "更新日時が古い順",
"createdAsc": "作成日時が古い順"
},
"list": {
"title": "会話",
"total": "全 {count} 件",
"sessionTotal": "全 {count} セッション",
"selected": "{count} 件を選択中",
"groupBySession": "セッションごとにグループ化",
"conversationCount": "{count} 件の会話",
"selectPage": "現在のページを選択",
"empty": "会話がありません",
"filteredEmpty": "絞り込み条件に一致する会話がありません",
"previous": "前のページ",
"next": "次のページ",
"page": "{page} / {total} ページ"
},
"preview": {
"title": "会話プレビュー",
"close": "プレビューを閉じる",
"loading": "会話を読み込み中",
"empty": "この会話にはまだメッセージがありません",
"copyUmo": "UMO をコピー",
"rawData": "生データ",
"copyRawData": "生データをコピー"
},
"actions": {
"editTitle": "タイトルを編集",
"export": "エクスポート",
"delete": "削除",
"refresh": "再読み込み"
}
}
}
@@ -0,0 +1,173 @@
{
"header": {
"eyebrow": "自動化",
"live": "リアルタイム同期"
},
"page": {
"title": "スケジュールタスク",
"beta": "実験的機能",
"subtitle": "指定時刻にタスクを自動実行し、完了後に結果を対象の会話へ配信します。",
"proactive": {
"link": "対応メッセージプラットフォーム",
"supported": "結果の自動配信に対応している設定済みプラットフォームは次のとおりです",
"unsupported": "自動メッセージに対応するプラットフォームがありません。プラットフォーム設定で有効にしてください。"
}
},
"actions": {
"create": "新規作成",
"edit": "編集",
"refresh": "再読み込み",
"delete": "削除",
"cancel": "キャンセル",
"close": "閉じる",
"more": "その他の操作",
"runNow": "今すぐ実行",
"save": "保存",
"submit": "作成"
},
"platformDialog": {
"title": "対応メッセージプラットフォーム",
"description": "自動メッセージ配信に対応しているのは次のプラットフォームのみです。スケジュールタスクの完了後、これらのプラットフォーム上の対象会話にのみ結果を配信できます。"
},
"card": {
"onceAt": "1 回のみ · {time}",
"runAt": "実行時刻:{time}",
"nextRun": "次回実行:{time}",
"dailyAt": "毎日 {time}",
"weeklyAt": "毎週{day} {time}",
"monthlyAt": "毎月 {day} 日 {time}",
"everyMinutes": "{count} 分ごと",
"everyHours": "{count} 時間ごと",
"everyDays": "{count} 日ごと",
"customCron": "カスタム · {cron}",
"noDeliveryTarget": "配信先が未設定です"
},
"filters": {
"search": "タスク名と内容を検索",
"umo": "配信先で絞り込み",
"noUmos": "UMO がありません",
"noDeliveryTarget": "配信先が未設定です",
"noMatches": "条件に一致するスケジュールタスクがありません。"
},
"overview": {
"totalTasks": "タスク総数",
"totalTasksNote": "登録済みのスケジュールタスク",
"enabledTasks": "有効なタスク",
"enabledTasksNote": "スケジュールどおりに実行されるタスク",
"oneOffTasks": "1 回限りのタスク",
"recurringTasksNote": "繰り返しタスク {count} 件",
"proactivePlatforms": "自動配信プラットフォーム",
"proactivePlatformsNote": "自動メッセージが有効なプラットフォーム数"
},
"section": {
"registered": {
"title": "タスク一覧",
"subtitle": "登録済みタスク、実行時刻、有効状態をまとめて確認します"
},
"delivery": {
"title": "配信状態",
"subtitle": "スケジュールタスクの実行結果は、自動メッセージに対応するプラットフォームから返信されます。",
"support": "自動配信",
"available": "利用可能",
"unavailable": "利用不可",
"enabledPlatforms": "有効なプラットフォーム"
},
"quickCreate": {
"title": "クイック作成",
"runMode": "タスクモード",
"target": "対象"
},
"platforms": {
"title": "対応プラットフォーム"
}
},
"table": {
"title": "登録済みタスク",
"subtitle": "Cron、セッション、直近の実行履歴、有効状態を確認できます",
"empty": "タスクがありません。",
"headers": {
"name": "名前",
"type": "種類",
"cron": "Cron",
"session": "セッション ID",
"nextRun": "次回実行",
"lastRun": "前回実行",
"note": "説明",
"actions": "操作"
},
"type": {
"once": "1 回のみ",
"recurring": "繰り返し",
"activeAgent": "アクティブエージェント",
"workflow": "ワークフロー",
"unknown": "{type}"
},
"timezoneLocal": "ローカルタイムゾーン",
"notAvailable": "—"
},
"form": {
"title": "タスクを新規作成",
"editTitle": "タスクを編集",
"chatHint": "ここで追加しなくても、チャットから AstrBot にスケジュールタスクの作成を依頼できます。",
"runOnce": "1 回限りのタスク",
"name": "タスク名 *",
"note": "タスク要件 *",
"scheduleMode": "実行時刻 *",
"scheduleModes": {
"once": "1 回のみ",
"interval": "間隔",
"daily": "毎日",
"weekly": "毎週",
"monthly": "毎月",
"cron": "カスタム"
},
"intervalEvery": "間隔 *",
"intervalUnit": "単位 *",
"intervalUnits": {
"minutes": "分",
"hours": "時間",
"days": "日"
},
"dailyTime": "時刻 *",
"weeklyDay": "曜日 *",
"weeklyTime": "時刻 *",
"monthlyDay": "日付 *",
"monthlyTime": "時刻 *",
"weekdays": {
"sunday": "日曜日",
"monday": "月曜日",
"tuesday": "火曜日",
"wednesday": "水曜日",
"thursday": "木曜日",
"friday": "金曜日",
"saturday": "土曜日"
},
"cron": "Cron 式 *",
"cronPlaceholder": "0 9 * * *",
"runAt": "実行時刻 *",
"session": "配信先(任意)",
"noUmos": "利用可能なセッションがありません",
"timezone": "タイムゾーン(任意、例:Asia/Shanghai)",
"enabled": "有効"
},
"messages": {
"loadFailed": "タスクの読み込みに失敗しました",
"updateSuccess": "更新しました",
"updateFailed": "更新に失敗しました",
"deleteSuccess": "削除しました",
"deleteFailed": "削除に失敗しました",
"nameRequired": "タスク名を入力してください",
"sessionRequired": "配信先を選択してください",
"noteRequired": "タスク要件を入力してください",
"cronRequired": "Cron 式を入力してください",
"runAtRequired": "実行時刻を選択してください",
"intervalRequired": "有効な間隔を入力してください",
"dailyTimeRequired": "毎日の実行時刻を選択してください",
"weeklyTimeRequired": "毎週の実行曜日と時刻を選択してください",
"monthlyTimeRequired": "毎月の実行日と時刻を選択してください",
"createSuccess": "作成しました",
"createFailed": "作成に失敗しました",
"runStarted": "実行を開始しました",
"runFailed": "実行に失敗しました"
}
}
@@ -0,0 +1,65 @@
{
"title": "ダッシュボード",
"subtitle": "リアルタイム監視と統計",
"lastUpdate": "最終更新",
"status": {
"loading": "読み込み中…",
"dataError": "データを取得できませんでした",
"noticeError": "お知らせを取得できませんでした",
"online": "オンライン",
"uptime": "稼働時間",
"memoryUsage": "メモリ使用量"
},
"stats": {
"totalMessage": {
"title": "メッセージ総数",
"subtitle": "すべてのプラットフォームから送信されたメッセージの合計"
},
"onlinePlatform": {
"title": "メッセージプラットフォーム",
"subtitle": "接続中のメッセージプラットフォーム数"
},
"runningTime": {
"title": "稼働時間",
"subtitle": "システムの稼働時間",
"format": "{hours}時間 {minutes}分 {seconds}秒"
},
"memoryUsage": {
"title": "メモリ使用量",
"subtitle": "システムメモリの使用状況",
"cpuLoad": "CPU 負荷",
"status": {
"good": "良好",
"normal": "正常",
"high": "高負荷"
}
}
},
"charts": {
"messageTrend": {
"title": "メッセージ傾向分析",
"subtitle": "メッセージ数の推移を時系列で確認します",
"totalMessages": "メッセージ総数",
"dailyAverage": "1 日平均",
"growthRate": "増加率",
"timeLabel": "時刻",
"messageCount": "メッセージ数",
"timeRanges": {
"1day": "過去 1 日",
"3days": "過去 3 日",
"1week": "過去 7 日",
"1month": "過去 30 日"
}
},
"platformStat": {
"title": "プラットフォーム別メッセージ統計",
"subtitle": "プラットフォーム別のメッセージ数分布",
"total": "合計",
"noData": "プラットフォームデータはありません",
"messageUnit": "件",
"platformCount": "プラットフォーム数",
"mostActive": "最多使用",
"totalPercentage": "総メッセージに占める割合"
}
}
}
@@ -0,0 +1,482 @@
{
"title": "プラグイン管理",
"subtitle": "システムプラグインの管理と設定",
"tabs": {
"installedPlugins": "プラグイン",
"market": "プラグインマーケット",
"installedMcpServers": "MCP",
"skills": "スキル",
"handlersOperation": "ハンドラー管理"
},
"titles": {
"installedAstrBotPlugins": "インストール済み"
},
"failedPlugins": {
"title": "読み込みに失敗したプラグイン({count})",
"hint": "これらのプラグインは読み込みに失敗しました。再読み込みするか、直接削除できます。",
"columns": {
"plugin": "プラグイン",
"error": "エラー"
}
},
"search": {
"placeholder": "プラグインを検索…",
"marketPlaceholder": "マーケットのプラグインを検索…"
},
"filters": {
"all": "すべて"
},
"views": {
"card": "カード表示",
"list": "リスト表示"
},
"buttons": {
"showSystemPlugins": "システムプラグインを表示",
"hideSystemPlugins": "システムプラグインを非表示",
"install": "インストール",
"uninstall": "削除",
"update": "更新",
"reload": "再読み込み",
"enable": "有効化",
"disable": "無効化",
"load": "プラグインを有効化",
"stop": "プラグインを無効化",
"configure": "設定",
"viewInfo": "ハンドラー",
"viewDocs": "ドキュメント",
"viewRepo": "リポジトリ",
"openPages": "Pages",
"openPage": "開く",
"openWebui": "プラグイン UI を開く",
"close": "閉じる",
"save": "保存",
"saveAndClose": "保存して閉じる",
"cancel": "キャンセル",
"next": "次へ",
"actions": "操作",
"back": "戻る",
"selectFile": "ファイルを選択",
"refresh": "再読み込み",
"updateAll": "すべてのプラグインを更新",
"pin": "上部に固定",
"unpin": "固定を解除",
"deleteSource": "ソースを削除",
"reshuffle": "もう一度シャッフル"
},
"status": {
"enabled": "有効",
"disabled": "無効",
"loaded": "有効",
"stopped": "無効",
"system": "システム",
"loading": "読み込み中…",
"installed": "インストール済み",
"preset": "プリセット",
"unknown": "不明",
"unsupported": "非対応"
},
"tooltips": {
"enable": "クリックして有効化",
"disable": "クリックして無効化",
"reload": "再読み込み",
"configure": "設定",
"viewInfo": "ハンドラー",
"viewDocs": "ドキュメント",
"update": "更新",
"uninstall": "プラグインを削除"
},
"table": {
"headers": {
"name": "名前",
"description": "説明",
"version": "バージョン",
"author": "開発者",
"status": "状態",
"actions": "操作",
"stars": "Star 数",
"lastUpdate": "最終更新",
"tags": "タグ",
"eventType": "イベントタイプ",
"specificType": "詳細タイプ",
"trigger": "トリガー"
}
},
"empty": {
"noPlugins": "プラグインがありません",
"noPluginsDesc": "プラグインをインストールするか、検索条件を変更してください"
},
"detail": {
"contents": "プラグインハンドラー",
"noContents": "ハンドラーがありません",
"notFound": "プラグインが見つかりません",
"docsTitle": "ドキュメント",
"docsEmpty": "ドキュメントはありません",
"changelogTitle": "変更履歴",
"changelogEmpty": "変更履歴はありません",
"subCommandsCount": "{count} 件のサブコマンド",
"handlerGroups": {
"page": "ページ",
"skill": "スキル",
"command": "コマンド / コマンドグループ",
"llm_tool": "LLM ツール",
"listener": "イベントリスナー",
"hook": "フック",
"commands": "コマンド / コマンドグループ",
"hooks": "フック",
"functionTools": "関数ツール",
"eventListeners": "イベントリスナー"
},
"info": {
"title": "情報",
"version": "バージョン",
"author": "開発者",
"category": "カテゴリ",
"stars": "Star 数",
"updatedAt": "更新日時",
"tags": "タグ",
"astrbotVersion": "AstrBot バージョン要件",
"supportPlatforms": "対応プラットフォーム",
"authorWebsite": "開発者のウェブサイト",
"repository": "リポジトリ"
}
},
"market": {
"recommended": "🥳 おすすめ",
"allPlugins": "📦 すべてのプラグイン",
"category": "カテゴリ",
"categories": {
"all": "すべて",
"ai_tools": "AI ツール",
"entertainment": "エンターテインメント",
"productivity": "生産性",
"integrations": "外部連携",
"utilities": "ユーティリティ",
"other": "その他"
},
"showFullName": "正式名称",
"devDocs": "プラグイン開発ドキュメント",
"submitRepo": "プラグインリポジトリを登録",
"customSource": "カスタムプラグインソース",
"source": "プラグインソース",
"availableSources": "利用可能なソース",
"sourceManagement": "プラグインソース管理",
"addSource": "プラグインソースを追加",
"sourceName": "ソース名",
"sourceUrl": "ソース URL",
"defaultSource": "デフォルトのプラグインソース",
"removeSource": "プラグインソースを削除",
"confirmRemoveSource": "このプラグインソースを削除しますか?",
"sourceAdded": "プラグインソースを追加しました",
"sourceRemoved": "プラグインソースを削除しました",
"sourceError": "操作に失敗しました",
"selectSource": "プラグインソースを選択",
"currentSource": "現在のプラグインソース",
"editSource": "プラグインソースを編集",
"sourceUpdated": "プラグインソースを更新しました",
"defaultOfficialSource": "デフォルトの公式ソース",
"sourceExists": "このプラグインソースはすでに存在します",
"sourceResolved": "プラグインソースを利用できます",
"installPlugin": "プラグインをインストール",
"randomPlugins": "🎲 ランダムプラグイン",
"sourceSafetyWarning": "デフォルトのプラグインソースであっても、プラグインの安定性と安全性を完全には保証できません。使用前に十分確認してください。"
},
"sort": {
"by": "並べ替え",
"default": "デフォルト順",
"installTime": "最終変更日時",
"name": "名前",
"stars": "Star 数",
"downloads": "ダウンロード数",
"author": "開発者名",
"updated": "更新日時",
"updateStatus": "更新状態",
"ascending": "昇順",
"descending": "降順"
},
"tags": {
"danger": "危険"
},
"dialogs": {
"error": {
"title": "エラー情報",
"checkConsole": "詳細はプラットフォームログを確認してください"
},
"config": {
"title": "プラグイン設定",
"noConfig": "このプラグインには追加の設定項目がありません",
"coreSettings": {
"logLevel": "ログレベル",
"logLevelHint": "このプラグインのログ出力にのみ影響します。再起動は不要で、すぐに反映されます",
"followGlobal": "グローバル設定に従う"
}
},
"loading": {
"title": "読み込み中…",
"logs": "ログ"
},
"uninstall": {
"title": "プラグインを削除",
"message": "現在のプラグインを削除しますか?",
"deleteConfig": "プラグイン設定ファイルも削除する",
"deleteData": "プラグインの永続データも削除する",
"configHint": "設定ファイルは data/config ディレクトリにあります",
"dataHint": "data/plugin_data、plugins_data ディレクトリ内のデータと、データベース内のプラグインの KV データを削除します"
},
"install": {
"title": "プラグインをインストール",
"fromFile": "ファイルからインストール",
"fromUrl": "URL からインストール",
"supportPlatformsCount": "{count} 個のプラットフォームに対応",
"sectionTitle": "インストール",
"downloadSource": "次の場所からプラグインパッケージをインストールします:",
"repositorySecurityWarning": "AstrBot は、コードリポジトリからダウンロードしたプラグインの安全性を保証できません。信頼できる配布元であることを確認してからインストールしてください。"
},
"update": {
"title": "プラグインを更新",
"sectionTitle": "更新",
"downloadSource": "次の場所から更新パッケージをインストールします:",
"confirm": "更新する"
},
"danger_warning": {
"title": "警告",
"message": "このプラグインには安全でないコードや機能が含まれている可能性があり、システムの異常やデータ損失などを引き起こすおそれがあります。インストールを続行しますか?",
"confirm": "続行",
"cancel": "キャンセル"
},
"versionSupport": {
"title": "バージョン互換性の警告",
"message": "このプラグインが指定する AstrBot のバージョン範囲は、現在のバージョンと一致しません。警告を無視してインストールを続行できますが、正常に動作しない可能性があります。",
"confirm": "警告を無視してインストール",
"cancel": "インストールをキャンセル"
},
"forceUpdate": {
"title": "新しいバージョンが見つかりません",
"message": "このプラグインの新しいバージョンは検出されませんでした。強制的に再インストールしますか?リモートリポジトリから最新のコードを取得します。",
"confirm": "強制更新"
},
"updateAllConfirm": {
"title": "すべてのプラグインを更新",
"message": "{count} 個のプラグインをすべて更新しますか?この操作には時間がかかる場合があります。",
"confirm": "すべて更新"
},
"sourceBinding": {
"title": "プラグインソースを変更",
"selectTitle": "プラグインのインストール元を選択",
"noCandidates": "設定済みのプラグインソースに一致するレコードがなく、このプラグインには利用可能なリポジトリ URL もありません。",
"repoOption": "リポジトリ URL を直接使用",
"repoOptionId": "repo 経由で再インストール",
"installDestination": "インストール先",
"confirm": "このプラグインソースを使用",
"confirmAndContinue": "使用して続行"
}
},
"messages": {
"uninstalling": "削除中",
"refreshing": "プラグイン一覧を再読み込み中…",
"refreshSuccess": "プラグイン一覧を再読み込みしました",
"refreshFailed": "プラグイン一覧の再読み込み中にエラーが発生しました",
"operationFailed": "操作に失敗しました",
"logLevelUpdated": "ログレベルを更新し、すぐに反映しました",
"reloadSuccess": "再読み込みに成功しました",
"reloadFailed": "再読み込みに失敗しました",
"updateSuccess": "更新しました",
"addSuccess": "追加しました",
"saveSuccess": "保存しました",
"deleteSuccess": "削除しました",
"installing": "ファイルからプラグインをインストール中",
"installingFromUrl": "URL からプラグインをインストール中…",
"installFailed": "プラグインのインストールに失敗しました:",
"getMarketDataFailed": "プラグインマーケットのデータ取得に失敗しました:",
"hasUpdate": "新しいバージョンがあります:",
"confirmDelete": "プラグインを削除しますか?",
"fillUrlOrFile": "プラグインの URL を入力するか、プラグインファイルをアップロードしてください",
"dontFillBoth": "プラグインの URL 入力とファイルのアップロードを同時に行わないでください",
"supportedFormats": ".zip 形式のプラグインファイルに対応しています",
"updateAllSuccess": "更新可能なプラグインをすべて更新しました",
"updateAllFailed": "{total} 個中 {failed} 個のプラグインを更新できませんでした:",
"noUpdatesAvailable": "現在、更新可能なプラグインはありません",
"updateDisabled": "このプラグインには利用可能なインストール元またはリポジトリ URL がないため、更新や再インストールはできません",
"changeSourceDisabled": "このプラグインには利用可能なリポジトリ URL がないため、プラグインソースを変更できません",
"fillSourceUrl": "プラグインソースの URL を入力してください",
"fillSourceName": "プラグインソース名を入力してください",
"resolveSourceFirst": "先にプラグインソースの URL を解析して検証してください",
"sourceResolveFailed": "プラグインソースの解析に失敗しました",
"invalidUrl": "有効な URL を入力してください",
"invalidRepositoryUrl": "有効な Git リポジトリの URL を入力してください",
"enterJsonUrl": "プラグイン一覧の JSON データを返す URL を入力してください",
"pluginNotFound": "プラグインが見つかりません",
"pluginDisabled": "このプラグインは無効です。ページにアクセスする前に有効化してください。",
"pluginPageNotFound": "プラグインページが見つかりません",
"pluginPageLoadFailed": "プラグインページの読み込みに失敗しました",
"missingMarketPluginId": "有効なプラグイン識別子がないため、このプラグインマーケットのソースからインストールできません",
"sourceBindSuccess": "プラグインソースを更新しました",
"validatingPlugin": "プラグインを検証中…",
"pluginValidateSuccess": "プラグインの検証に成功しました",
"pluginValidateFailed": "プラグインの検証に失敗しました"
},
"upload": {
"fromFile": "ファイルからインストール",
"fromUrl": "URL からインストール",
"selectFile": "ファイルを選択",
"enterUrl": "プラグインリポジトリの URL を入力"
},
"skills": {
"modeLocal": "ローカルスキル",
"modeNeo": "Neo スキル",
"actions": "操作",
"enable": "スキルを有効化",
"disable": "スキルを無効化",
"upload": "スキルをアップロード",
"refresh": "再読み込み",
"empty": "スキルがありません",
"emptyHint": "スキルの圧縮ファイルをアップロードしてください",
"uploadDialogTitle": "スキルをアップロード",
"uploadHint": "複数の zip スキルパッケージを一括アップロードでき、ドラッグ&ドロップにも対応しています。システムがディレクトリ構造を自動検証し、ファイルごとの結果を表示します。",
"structureRequirement": "圧縮ファイル内に複数の skills フォルダーを含められます。",
"abilityMultiple": "複数の zip ファイルを一度にアップロード",
"abilityValidate": "`SKILL.md` を自動検証",
"abilitySkip": "重複ファイルを自動的にスキップ",
"selectFile": "ファイルを選択",
"selectFiles": "ファイルを選択(複数選択可)",
"dropzoneTitle": "複数の zip ファイルをここにドラッグ&ドロップ",
"dropzoneAction": "またはクリックしてフォルダーから複数のファイルを選択",
"dropzoneHint": "一括アップロードに対応し、ディレクトリ構造を自動的に検証します",
"fileListTitle": "処理待ちのファイル",
"fileListEmpty": "ファイルを選択すると、検証結果とアップロード状態がここに表示されます",
"uploading": "アップロード中…",
"batchResultTitle": "一括アップロード結果",
"batchResultSummary": "全 {total} ファイル中 {success} ファイルのアップロードに成功",
"batchSuccessList": "アップロード成功",
"batchFailedList": "アップロード失敗",
"confirm": "OK",
"confirmUpload": "アップロードを開始",
"cancel": "キャンセル",
"statusWaiting": "アップロード待ち",
"statusUploading": "アップロード中",
"statusSuccess": "アップロード済み",
"statusError": "検証失敗",
"statusSkipped": "スキップ済み",
"summaryTotal": "全 {count} ファイル",
"summaryReady": "処理待ち {count}",
"summarySuccess": "成功 {count}",
"summaryFailed": "失敗 {count}",
"summarySkipped": "スキップ {count}",
"validationReady": "アップロード待ちです。アップロード時にディレクトリ構造を自動検証します",
"validationZipOnly": "zip 形式のスキルパッケージのみ対応しています",
"validationDuplicate": "同名のファイルが一覧にあるため、スキップしました",
"validationUploading": "検証してアップロード中…",
"validationUploadFailed": "アップロードに失敗しました。もう一度お試しください",
"validationUploadedAs": "{name} としてインストールしました",
"validationNoResult": "検証結果を受信できませんでした。プラットフォームログを確認してください",
"noDescription": "説明なし",
"path": "パス",
"uploadSuccess": "アップロードに成功しました",
"uploadFailed": "アップロードに失敗しました",
"download": "ダウンロード",
"downloadSuccess": "ダウンロードに成功しました",
"downloadFailed": "ダウンロードに失敗しました",
"loadFailed": "スキルの読み込みに失敗しました",
"updateSuccess": "更新に成功しました",
"updateFailed": "更新に失敗しました",
"deleteTitle": "削除の確認",
"deleteMessage": "このスキルを削除しますか?",
"deleteSuccess": "削除に成功しました",
"deleteFailed": "削除に失敗しました",
"select": "選択",
"selectSkill": "スキル {name} を選択",
"selectAll": "すべて選択",
"clearSelection": "選択を解除",
"deleteSelected": "選択したスキルを削除({count})",
"batchDeleteTitle": "選択したスキルを削除",
"batchDeleteMessage": "選択した {count} 件のスキルを削除しますか?この操作は元に戻せません。",
"batchDeleteConfirm": "{count} 件を削除",
"batchDeleteSuccess": "{count} 件のスキルを削除しました",
"batchDeletePartial": "{succeeded} 件を削除しました。{failed} 件の削除に失敗しました",
"neoSkillKey": "skill_key で絞り込む",
"neoStatus": "候補ステータス",
"neoStage": "リリース段階",
"neoFilterHint": "候補とリリース記録を絞り込む",
"neoAll": "すべて",
"neoCandidates": "Neo 候補",
"neoReleases": "Neo リリース",
"neoLoadFailed": "Neo スキルデータの読み込みに失敗しました",
"neoPass": "承認",
"neoReject": "却下",
"neoEvaluateSuccess": "評価を更新しました",
"neoEvaluateFailed": "評価の更新に失敗しました",
"neoPromoteSuccess": "公開に成功しました",
"neoPromoteFailed": "公開に失敗しました",
"neoRollback": "ロールバック",
"neoRollbackSuccess": "ロールバックに成功しました",
"neoRollbackFailed": "ロールバックに失敗しました",
"neoDeactivate": "無効化",
"neoDeactivateSuccess": "無効化に成功しました",
"neoDeactivateFailed": "無効化に失敗しました",
"neoSync": "同期",
"neoSyncSuccess": "同期に成功しました",
"neoSyncFailed": "同期に失敗しました",
"neoDelete": "削除",
"neoDeleteSuccess": "削除に成功しました",
"neoDeleteFailed": "削除に失敗しました",
"neoPayloadTitle": "Neo Payload の詳細",
"neoPayloadFailed": "Payload の読み込みに失敗しました",
"runtimeNoneWarning": "Computer Use の実行環境が「None」に設定されています。実行環境が有効になっていないため、エージェントがスキルを正しく実行できない可能性があります。",
"runtimeHint": "設定の「Computer Use」で実行環境を「local」または「sandbox」に設定すると、AstrBot が提供されたスキルを正常に使用できます。ワークスペーススキルは現在このページに表示されません。",
"neoRuntimeRequired": "Neo スキルは、実行環境が sandbox で、サンドボックスドライバーが shipyard_neo の場合にのみ利用できます。",
"sourceLocalOnly": "ローカルスキル",
"sourceSandboxOnly": "サンドボックスのプリセットスキル",
"sourceBoth": "ローカル + サンドボックス",
"sourcePlugin": "プラグイン:{plugin}",
"sandboxDiscoveryPending": "サンドボックスのプリセットスキルはまだ検出されていません。少なくとも一度サンドボックスセッションを起動してから確認してください。",
"sandboxPresetReadonly": "サンドボックスのプリセットスキルはここでは読み取り専用です。ローカルスキルのページから削除、有効化、無効化することはできません。",
"pluginReadonly": "プラグインが提供するスキルは、そのプラグインによって管理されます。ローカルスキルのページから削除またはダウンロードすることはできません。",
"pluginDisabled": "プラグインは無効です",
"openEditor": "表示 / 編集",
"editorTitle": "スキルを編集",
"editorLoadFailed": "スキルファイルの読み込みに失敗しました",
"editorSaveFailed": "スキルファイルの保存に失敗しました",
"editorSaveSuccess": "保存に成功しました",
"saveFile": "ファイルを保存",
"readonly": "読み取り専用",
"unsaved": "未保存",
"noFileSelected": "ファイルが選択されていません",
"discardChanges": "現在のファイルには未保存の変更があります。破棄しますか?"
},
"card": {
"actions": {
"pluginConfig": "プラグイン設定",
"uninstallPlugin": "プラグインを削除",
"reloadPlugin": "プラグインを再読み込み",
"togglePlugin": "プラグイン",
"viewHandlers": "ハンドラーを表示",
"updateTo": "更新先",
"reinstall": "再インストール",
"changeSource": "プラグインソースを変更"
},
"status": {
"hasUpdate": "新しいバージョンがあります",
"disabled": "このプラグインは無効です",
"handlersCount": "件のハンドラー",
"supportPlatform": "対応プラットフォーム",
"supportPlatformsCount": "{count} 個のプラットフォームに対応",
"astrbotVersion": "AstrBot バージョン要件"
},
"alt": {
"logo": "ロゴ",
"extensionIcon": "拡張機能アイコン"
},
"errors": {
"confirmNotRegistered": "$confirm が正しく登録されていません"
}
},
"conflicts": {
"title": "コマンドの競合を検出しました",
"message": "一部のコマンドが正常に動作しなくなる可能性があります。[コマンド管理]パネルで対処することをおすすめします。",
"pairs": "組のコマンド競合",
"goToManage": "管理画面へ",
"later": "後で対応"
},
"pluginChangelog": {
"menuTitle": "変更履歴を表示"
}
}
@@ -0,0 +1,125 @@
{
"title": "ナレッジベース詳細",
"backToList": "一覧に戻る",
"breadcrumb": {
"list": "ナレッジベース"
},
"states": {
"loadError": "ナレッジベース詳細の読み込みに失敗しました",
"retry": "再試行"
},
"tabs": {
"overview": "概要",
"documents": "ドキュメント管理",
"retrieval": "ナレッジベース検索",
"sessions": "使用中のセッション",
"settings": "設定"
},
"overview": {
"title": "基本情報",
"name": "名前",
"description": "説明",
"emoji": "アイコン",
"createdAt": "作成日時",
"updatedAt": "更新日時",
"stats": "統計情報",
"docCount": "ドキュメント数",
"chunkCount": "チャンク数",
"embeddingModel": "埋め込みモデル",
"rerankModel": "リランキングモデル",
"notSet": "未設定"
},
"documents": {
"title": "ドキュメント一覧",
"upload": "ドキュメントをアップロード",
"empty": "ドキュメントがありません",
"name": "ドキュメント名",
"type": "種類",
"size": "サイズ",
"chunks": "チャンク数",
"createdAt": "アップロード日時",
"actions": "操作",
"view": "表示",
"delete": "削除",
"deleteConfirm": "ドキュメント「{name}」を削除してもよろしいですか?",
"deleteWarning": "ドキュメントとそのすべてのチャンクが削除されます。この操作は元に戻せません。",
"uploading": "アップロード中…",
"uploadSuccess": "ドキュメントをアップロードしました",
"uploadFailed": "ドキュメントのアップロードに失敗しました",
"deleteSuccess": "ドキュメントを削除しました",
"deleteFailed": "ドキュメントの削除に失敗しました"
},
"upload": {
"title": "ドキュメントをアップロード",
"selectFile": "ファイルを選択",
"dropzone": "ここにファイルをドラッグ&ドロップするか、クリックして選択",
"supportedFormats": "対応形式:.txt, .md, .markdown, .rst, .adoc, .pdf, .docx, .epub, .xls, .xlsx",
"maxSize": "最大ファイルサイズ:128 MB",
"chunkSettings": "チャンク設定",
"batchSettings": "バッチ処理設定",
"cleaningSettings": "クリーニング設定",
"enableCleaning": "コンテンツのクリーニングを有効化",
"cleaningProvider": "クリーニングサービスのプロバイダー",
"cleaningProviderHint": "抽出した Web ページの内容をクリーニング・要約する LLM プロバイダーを選択します。",
"chunkSize": "チャンクサイズ",
"chunkSizeHint": "チャンクあたりの文字数(デフォルト: 512)",
"chunkOverlap": "チャンクのオーバーラップ",
"chunkOverlapHint": "隣接するチャンク間で重複させる文字数(デフォルト: 50)",
"batchSize": "バッチサイズ",
"batchSizeHint": "バッチごとに処理するチャンク数(デフォルト: 32)",
"tasksLimit": "同時実行タスク数の上限",
"tasksLimitHint": "同時に実行するアップロードタスクの最大数(デフォルト: 3)",
"maxRetries": "最大再試行回数",
"maxRetriesHint": "アップロードに失敗したタスクの再試行回数(デフォルト: 3)",
"cancel": "キャンセル",
"submit": "アップロード",
"fileRequired": "アップロードするファイルを選択してください",
"fileUpload": "ファイルをアップロード",
"fromUrl": "URL から",
"urlPlaceholder": "内容を抽出する Web ページの URL を入力してください",
"urlRequired": "URL を入力してください",
"urlHint": "対象 URL から主要な内容を自動的に抽出し、ドキュメントとして登録します。現在は {supported} ページに対応しています。対象の Web ページでクローラーによるアクセスが許可されていることを確認してください。",
"beta": "ベータ版"
},
"retrieval": {
"title": "ナレッジベース検索",
"subtitle": "密ベクトル検索と疎ベクトル検索でナレッジベースの内容をテスト",
"query": "検索クエリ",
"queryPlaceholder": "検索する内容を入力…",
"search": "検索",
"searching": "検索中…",
"results": "検索結果",
"noResults": "関連する内容が見つかりませんでした",
"tryDifferentQuery": "別の検索語をお試しください",
"settings": "検索設定",
"topK": "返す結果の件数",
"topKHint": "返す検索結果の最大件数",
"enableRerank": "リランキングを有効化",
"enableRerankHint": "リランキングモデルを使用して検索品質を向上します",
"score": "関連度スコア",
"document": "ドキュメント",
"chunk": "チャンク #{index}",
"content": "内容",
"charCount": "{count} 文字",
"searchSuccess": "検索が完了し、{count} 件の結果が見つかりました",
"searchFailed": "検索に失敗しました",
"queryRequired": "検索クエリを入力してください"
},
"settings": {
"title": "ナレッジベース設定",
"basic": "基本設定",
"retrieval": "検索設定",
"chunkSize": "チャンクサイズ",
"chunkOverlap": "チャンクのオーバーラップ",
"topKDense": "密ベクトル検索件数",
"topKSparse": "疎ベクトル検索件数",
"topMFinal": "最終結果件数",
"enableRerank": "リランキングを有効化",
"embeddingProvider": "埋め込みモデルのプロバイダー",
"rerankProvider": "リランキングモデルのプロバイダー",
"save": "設定を保存",
"saveSuccess": "設定を保存しました",
"saveFailed": "設定の保存に失敗しました",
"tips": "ヒント:検索設定を変更すると、以降のナレッジベース検索結果に影響します。"
}
}
@@ -0,0 +1,60 @@
{
"title": "ドキュメント詳細",
"backToKB": "ナレッジベースに戻る",
"states": {
"loadError": "ドキュメント詳細の読み込みに失敗しました",
"chunksLoadError": "チャンク一覧の読み込みに失敗しました",
"retry": "再試行"
},
"info": {
"title": "ドキュメント情報",
"name": "ドキュメント名",
"type": "ファイル形式",
"size": "ファイルサイズ",
"chunkCount": "チャンク数",
"createdAt": "アップロード日時"
},
"chunks": {
"title": "チャンク一覧",
"empty": "チャンクがありません",
"index": "番号",
"content": "内容",
"charCount": "文字数",
"actions": "操作",
"view": "表示",
"edit": "編集",
"delete": "削除",
"preview": "プレビュー",
"search": "チャンクを検索",
"searchPlaceholder": "キーワードを入力してチャンクの内容を検索…",
"showing": "表示範囲:",
"deleteConfirm": "このチャンクを削除してもよろしいですか?",
"deleteSuccess": "チャンクを削除しました",
"deleteFailed": "チャンクの削除に失敗しました"
},
"edit": {
"title": "チャンクを編集",
"content": "チャンクの内容",
"cancel": "キャンセル",
"save": "保存",
"saveSuccess": "チャンクを保存しました",
"saveFailed": "チャンクの保存に失敗しました"
},
"delete": {
"title": "チャンクを削除",
"confirmText": "このチャンクを削除してもよろしいですか?",
"warning": "削除後は元に戻せず、ナレッジベースの検索結果に影響する可能性があります。",
"cancel": "キャンセル",
"confirm": "削除",
"deleteSuccess": "チャンクを削除しました",
"deleteFailed": "チャンクの削除に失敗しました"
},
"view": {
"title": "チャンク詳細",
"index": "番号",
"content": "内容",
"charCount": "文字数",
"vecDocId": "ベクトル ID",
"close": "閉じる"
}
}
@@ -0,0 +1,73 @@
{
"title": "ナレッジベース管理",
"subtitle": "ナレッジベースの内容を一元管理・検索",
"list": {
"title": "ナレッジベース",
"subtitle": "すべてのナレッジベースを管理",
"create": "ナレッジベースを作成",
"refresh": "一覧を再読み込み",
"empty": "ナレッジベースがありません",
"loading": "読み込み中…",
"documents": "ドキュメント",
"chunks": "チャンク",
"sessionConfig": "セッション設定",
"initError": "初期化に失敗しました",
"retry": "再試行",
"noDescription": "説明なし",
"switchLegacy": "旧版のナレッジベースに切り替える"
},
"card": {
"edit": "編集",
"delete": "削除",
"open": "開く",
"docCount": "{count} 件のドキュメント",
"chunkCount": "{count} 件のチャンク"
},
"create": {
"title": "ナレッジベースを作成",
"nameLabel": "ナレッジベース名",
"namePlaceholder": "ナレッジベース名を入力",
"descriptionLabel": "説明",
"descriptionPlaceholder": "このナレッジベースの用途を簡潔に説明…",
"emojiLabel": "アイコン",
"embeddingModelLabel": "埋め込みモデル(Embedding Model)",
"rerankModelLabel": "リランキングモデル(Rerank Model、省略可)",
"providerInfo": "プロバイダー:{id}、次元数:{dimensions}",
"rerankProviderInfo": "プロバイダー:{id}",
"cancel": "キャンセル",
"submit": "作成",
"nameRequired": "ナレッジベース名を入力してください",
"nameChangeHint": "後からナレッジベース名を変更する場合は、設定ファイル側も更新してください。",
"embeddingLockedHint": "埋め込みモデルは選択後に変更できません。別のモデルを使用する場合は、新しいナレッジベースを作成してください。"
},
"edit": {
"title": "ナレッジベースを編集",
"submit": "保存"
},
"delete": {
"title": "ナレッジベースを削除",
"confirmText": "ナレッジベース「{name}」を削除してもよろしいですか?",
"warning": "この操作は元に戻せません。すべてのドキュメント、チャンク、関連設定が完全に削除されます。",
"cancel": "キャンセル",
"confirm": "削除"
},
"emoji": {
"title": "アイコンを選択",
"close": "閉じる",
"categories": {
"books": "書籍とドキュメント",
"emotions": "表情と感情",
"objects": "物とツール",
"symbols": "記号と標識"
}
},
"messages": {
"createSuccess": "ナレッジベースを作成しました",
"createFailed": "作成に失敗しました",
"updateSuccess": "ナレッジベースを更新しました",
"updateFailed": "更新に失敗しました",
"deleteSuccess": "ナレッジベースを削除しました",
"deleteFailed": "削除に失敗しました",
"loadError": "ナレッジベース一覧の読み込みに失敗しました"
}
}
@@ -0,0 +1,160 @@
{
"page": {
"description": "ペルソナ設定を管理"
},
"buttons": {
"create": "ペルソナを作成",
"createFirst": "最初のペルソナを作成",
"edit": "編集",
"delete": "削除",
"cancel": "キャンセル",
"save": "保存",
"move": "移動",
"addDialogPair": "会話ペアを追加",
"export": "エクスポート",
"import": "ペルソナをインポート",
"more": "その他の操作"
},
"labels": {
"presetDialogs": "プリセット会話({count} 組)",
"createdAt": "作成日時",
"updatedAt": "更新日時"
},
"form": {
"personaId": "ペルソナ ID",
"systemPrompt": "システムプロンプト",
"customErrorMessage": "カスタムエラー応答メッセージ(省略可)",
"customErrorMessageHelp": "このペルソナの LLM リクエストが失敗した場合(接続失敗など)、このエラー応答を優先して送信します。空欄の場合はデフォルトのエラーメッセージを送信します。",
"presetDialogs": "プリセット会話",
"presetDialogsHelp": "ボットが役割設定をより深く理解できるように、プリセット会話を追加します。",
"userMessage": "ユーザーメッセージ",
"assistantMessage": "AI の応答",
"capabilities": "ペルソナの能力",
"capabilitiesHelp": "ソースごとに、このペルソナで利用できるツールとスキルを選択します。歯車ボタンをクリックすると、個別の能力を選択できます。",
"tools": "ツール / MCP ツールの選択",
"toolsHelp": "このペルソナで利用できる外部ツールを選択します。外部ツールを使用すると、AI は検索、計算、情報取得などを通じて外部環境とやり取りできます。",
"toolsSelection": "ツール選択の操作",
"selectAllTools": "すべてのツールを選択",
"clearAllTools": "選択をクリア",
"allSelected": "すべて選択済み",
"mcpServersQuickSelect": "MCP サーバーのクイック選択",
"searchTools": "ツールを検索",
"selectedTools": "選択済みのツール",
"builtinToolDisabledHint": "現在、ここでは組み込みツールを有効または無効にできません。設定ファイルで各ツールに対応する設定項目を有効または無効にしてください。",
"noToolsAvailable": "利用可能なツールがありません",
"noToolsFound": "一致するツールが見つかりませんでした",
"loadingTools": "ツールを読み込み中…",
"allToolsAvailable": "利用可能なすべてのツールを使用",
"noToolsSelected": "ツールが選択されていません",
"skills": "スキルの選択",
"skillsHelp": "このペルソナで利用できるスキルを選択します。スキルは AI に再利用可能な手順とガイドラインを提供します。",
"skillsAllAvailable": "デフォルトですべてのスキルを使用",
"skillsSelectSpecific": "指定したスキルを選択",
"searchSkills": "スキルを検索",
"selectedSkills": "選択済みのスキル",
"noSkillsAvailable": "利用可能なスキルがありません",
"noSkillsFound": "一致するスキルが見つかりませんでした",
"loadingSkills": "スキルを読み込み中…",
"allSkillsAvailable": "利用可能なすべてのスキルを使用",
"noSkillsSelected": "スキルが選択されていません",
"skillsRuntimeNoneWarning": "Computer Use の実行環境が「none」に設定されています。実行環境が無効なため、エージェントがスキルを正しく実行できない可能性があります。",
"createInFolder": "「{folder}」に作成します",
"rootFolder": "すべてのペルソナ"
},
"dialog": {
"create": {
"title": "新しいペルソナを作成"
},
"edit": {
"title": "ペルソナを編集"
}
},
"empty": {
"title": "ペルソナが設定されていません",
"description": "ペルソナを作成してみましょう!",
"folderEmpty": "このフォルダーは空です",
"folderEmptyDescription": "新しいペルソナまたはフォルダーを作成して始めましょう"
},
"validation": {
"required": "この項目は必須です",
"minLength": "{min} 文字以上で入力してください",
"alphanumeric": "英字、数字、アンダースコア、ハイフンのみ使用できます",
"dialogRequired": "{type} は空にできません",
"personaIdExists": "このペルソナ名はすでに存在します"
},
"messages": {
"loadError": "ペルソナ一覧の読み込みに失敗しました",
"saveSuccess": "保存しました",
"saveError": "保存に失敗しました",
"deleteConfirm": "ペルソナ「{id}」を削除してもよろしいですか?この操作は元に戻せません。",
"deleteSuccess": "削除しました",
"deleteError": "削除に失敗しました",
"exportConfirm": "エクスポートにはシステムプロンプトとプリセット会話のみが含まれ、ツールとスキルの設定は含まれません。続行しますか?",
"exportSuccess": "エクスポートしました",
"exportError": "エクスポートに失敗しました:{error}",
"importSuccess": "ペルソナをインポートしました。ツールとスキルは手動で設定してください。",
"importError": "インポートに失敗しました:{error}",
"importFormatError": "ファイル形式が正しくありません。有効なペルソナのエクスポートファイルを選択してください",
"importMissingPrompt": "ファイルの内容が不完全で、システムプロンプトがありません",
"importIdExists": "ペルソナ名がすでに存在するため、「{id}」に変更しました"
},
"persona": {
"personasTitle": "ペルソナ",
"toolsCount": "個のツール",
"skillsCount": "個のスキル",
"contextMenu": {
"moveTo": "移動先…"
},
"messages": {
"moveSuccess": "ペルソナを移動しました",
"moveError": "ペルソナの移動に失敗しました"
}
},
"folder": {
"sidebarTitle": "フォルダー",
"rootFolder": "ルート",
"foldersTitle": "フォルダー",
"noFolders": "フォルダーがありません",
"createButton": "フォルダーを作成",
"searchPlaceholder": "フォルダーを検索…",
"form": {
"name": "フォルダー名",
"description": "説明(省略可)"
},
"validation": {
"nameRequired": "フォルダー名を入力してください"
},
"contextMenu": {
"open": "開く",
"rename": "名前を変更",
"moveTo": "移動先…",
"delete": "削除"
},
"createDialog": {
"title": "新しいフォルダーを作成",
"createButton": "作成"
},
"renameDialog": {
"title": "フォルダー名を変更"
},
"deleteDialog": {
"title": "フォルダーを削除",
"message": "フォルダー「{name}」を削除してもよろしいですか?",
"warning": "フォルダー内のすべてのペルソナはルートフォルダーに移動されます。"
},
"messages": {
"createSuccess": "フォルダーを作成しました",
"createError": "フォルダーの作成に失敗しました",
"renameSuccess": "フォルダー名を変更しました",
"renameError": "フォルダー名の変更に失敗しました",
"deleteSuccess": "フォルダーを削除しました",
"deleteError": "フォルダーの削除に失敗しました"
}
},
"moveDialog": {
"title": "フォルダーに移動",
"description": "「{name}」の移動先フォルダーを選択してください",
"success": "移動しました",
"error": "移動に失敗しました"
}
}
@@ -0,0 +1,258 @@
{
"title": "ボット",
"subtitle": "プラットフォームアダプターのインスタンスを管理し、さまざまなメッセージプラットフォームに接続します",
"adapters": "プラットフォームアダプター",
"addAdapter": "ボットを作成",
"emptyText": "プラットフォームアダプターがありません。「ボットを作成」をクリックして追加してください",
"workspace": {
"listTitle": "ボット",
"selectHint": "設定するボットを選択してください",
"empty": "ボットがありません。作成すると設定を開始できます。",
"enabled": "ボットを有効化",
"disabled": "無効",
"delete": "ボットを削除",
"save": "変更を保存",
"configTitle": "接続設定",
"configDescription": "ボットとメッセージプラットフォームの接続方法を設定します。",
"routes": {
"title": "会話設定",
"description": "会話ごとに異なる設定ファイルを使用できます。個別に紐付けられていない会話には、以下のデフォルト設定が適用されます。",
"loadFailed": "会話設定を読み込めませんでした。接続設定は引き続き編集できますが、今回は会話設定を変更しません。",
"defaultTitle": "このボットのデフォルト設定",
"defaultDescription": "個別に設定されていないすべての会話に適用されます。",
"systemDefault": "システムデフォルト設定(default)",
"bindTitle": "特定の会話に使用する設定を選択",
"bindDescription": "既存の会話を選択し、使用する設定ファイルを指定してください。",
"sessionLabel": "会話を選択",
"configLabel": "設定ファイル",
"bind": "紐付けを追加",
"noSessions": "会話がありません。先に対応するメッセージプラットフォームでこのボットと一度会話してください。",
"boundTitle": "紐付け済みの会話",
"boundCount": "{count} 件",
"remove": "紐付けを解除",
"noBindings": "個別に紐付けられた会話はありません。すべての会話にデフォルト設定が適用されます。",
"advanced": "高度なルーティングルール",
"advancedDescription": "UMO pattern を使用して複数の会話を一括で照合します。ルールは上から順に照合され、AstrBot の会話ソース形式に詳しいユーザー向けです。",
"patternLabel": "UMO pattern",
"patternPlaceholder": "例:bot-id:GroupMessage:*",
"addPattern": "ルールを追加",
"patternRequired": "UMO pattern を入力してください",
"patternInvalid": "形式は「プラットフォーム:メッセージタイプ:会話 ID」である必要があります",
"patternPlatformMismatch": "ルールのプラットフォーム部分は現在のボット ID と一致する必要があります",
"duplicatePattern": "重複する設定ルートがあります。確認してから再試行してください。",
"sessionTypes": {
"group": "グループチャット",
"friend": "ダイレクトメッセージ",
"other": "会話"
}
}
},
"viewWebhook": "Webhook URL を表示",
"webhookCopied": "Webhook URL をクリップボードにコピーしました",
"webhookCopyFailed": "コピーに失敗しました。手動でコピーしてください",
"webhookDialog": {
"title": "Webhook コールバック URL",
"description": "コールバック URL は以下のとおりです。インターネットからアクセスできることを確認してください。ログでもコールバック URL を確認できます。「設定 → 一般」にある「外部からアクセス可能なコールバック API アドレス」の設定を推奨します。",
"close": "閉じる"
},
"details": {
"adapterType": "アダプタータイプ",
"token": "Token",
"description": "説明"
},
"dialog": {
"add": "追加",
"edit": "編集",
"adapter": "ボット",
"refresh": "再読み込み",
"cancel": "キャンセル",
"save": "保存",
"addPlatform": "ボットを作成",
"connectTitle": "{name} に接続",
"viewTutorial": "接続チュートリアルを表示",
"noTemplates": "プラットフォームテンプレートがありません",
"idConflict": {
"title": "ID 競合の警告",
"message": "ID「{id}」の重複が検出されました。新しい ID を使用してください。",
"confirm": "OK"
},
"securityWarning": {
"title": "セキュリティに関する注意",
"aiocqhttpTokenMissing": "接続のセキュリティを強化するため、ws_reverse_token の設定を強く推奨します。トークンを設定しない場合、セキュリティ上のリスクが生じる可能性があります。",
"learnMore": "詳細を見る"
},
"invalidPlatformId": "プラットフォーム ID に ':' または '!' を含めることはできません。"
},
"createDialog": {
"step1Title": "メッセージプラットフォームのカテゴリを選択",
"step1Hint": "ボットをどこに接続しますか?例:QQ、WeCom、Feishu、Discord、Telegram など。",
"platformTypeLabel": "メッセージプラットフォームのカテゴリ",
"platformTooltips": {
"qq_official": "QQ 公式ボットプラットフォームです。プライベートチャットと QQ グループへの追加(グループオーナー権限のみ必要)に対応し、QQ 内で Markdown をレンダリングできます。QR コードをスキャンして簡単に作成できます。",
"qq_official_webhook": "QQ 公式ボットプラットフォームです。プライベートチャットと QQ グループへの追加(グループオーナー権限のみ必要)に対応し、QQ 内で Markdown をレンダリングできます。QR コードをスキャンして簡単に作成できます。この Webhook 方式では環境にパブリック IP アドレスが必要なため、上記の WebSocket 方式を推奨します。",
"aiocqhttp": "広く利用されているインスタントメッセージングプロトコルです。NapCat などのサードパーティサービスを介してインスタントメッセージングアプリに接続できます。",
"weixin_oc": "WeChat が公式に提供するボット接続方式です。プライベートチャットのみに対応し、QR コードをスキャンして簡単に作成できます。"
},
"configFileTitle": "設定ファイル",
"optional": "任意",
"configHint": "ボットをどのように設定しますか?設定ファイルには、チャットモデル、ペルソナ、ナレッジベース、プラグインの適用範囲など、さまざまなボット設定が含まれます。",
"configDefaultHint": "デフォルトでは設定ファイル「default」を使用します。後から設定することもできます。",
"useExistingConfig": "既存の設定ファイルを使用",
"selectConfigLabel": "設定ファイルを選択",
"createNewConfig": "新しい設定ファイルを作成",
"newConfigNameLabel": "新しい設定ファイル名",
"newConfigTitle": "新しい設定ファイルを使用",
"newConfigLoadFailed": "デフォルト設定テンプレートを読み込めませんでした",
"addRouteRule": "ルーティングルールを追加",
"viewMode": "表示",
"editMode": "編集",
"noRouteRules": "このプラットフォームにはルーティングルールがありません。デフォルト設定ファイルが使用されます",
"sessionIdPlaceholder": "セッション ID または *",
"routeSource": {
"selectPlaceholder": "セッションソースを選択",
"noData": "このボットには、まだ統合済みのメッセージ送信元がありません。対応するメッセージプラットフォームでこのボットと一度会話すると、ここに表示されます。",
"switchToKnown": "既存のソースから選択する方式に切り替え",
"switchToManual": "手動入力に切り替え"
},
"allSessions": "すべてのセッション",
"configMissing": "設定ファイルが見つかりません",
"routeHint": "メッセージ送信時、セッションソースに基づき、上から順に最初に一致した設定ファイルが使用されます。すべてに一致させるには * を使用します。セッション ID を取得するには /sid コマンドを使用します。どれにも一致しない場合はデフォルト設定ファイルが使用されます。",
"warningContinue": "警告を無視して作成を続行",
"warningEditAgain": "再編集",
"configDrawerTitle": "設定ファイル管理",
"configDrawerIdLabel": "ID",
"configTableHeaders": {
"configId": "このインスタンスに関連付けられた設定ファイル ID",
"scope": "このインスタンスでの適用範囲"
},
"routeTableHeaders": {
"source": "メッセージセッションソース(メッセージタイプ:セッション ID)",
"config": "使用する設定ファイル",
"actions": "操作"
},
"messageTypeOptions": {
"all": "すべてのメッセージ",
"group": "グループメッセージ(GroupMessage)",
"friend": "ダイレクトメッセージ(FriendMessage)"
},
"messageTypeLabels": {
"all": "すべてのメッセージ",
"group": "グループメッセージ",
"friend": "ダイレクトメッセージ"
}
},
"messages": {
"updateSuccess": "更新しました",
"addSuccess": "追加しました",
"deleteSuccess": "削除しました",
"statusUpdateSuccess": "ステータスを更新しました",
"deleteConfirm": "プラットフォームアダプターを削除してもよろしいですか",
"configNotFoundOpenConfig": "対象の設定ファイルが見つかりません。確認できるよう設定ページを開きました。",
"updateMissingPlatformId": "プラットフォーム ID がないため、更新に失敗しました。",
"platformUpdateFailed": "プラットフォームの更新に失敗しました。",
"addSuccessWithConfig": "プラットフォームを追加し、設定ファイルに保存しました",
"configIdMissing": "設定ファイル ID を取得できません。",
"routingUpdateFailed": "ルーティングテーブルの更新に失敗しました: {message}",
"createConfigFailed": "新しい設定ファイルの作成に失敗しました: {message}",
"platformIdMissing": "プラットフォーム ID を取得できません。",
"routingSaveFailed": "ルーティングテーブルの保存に失敗しました: {message}"
},
"status": {
"enabled": "有効",
"disabled": "無効",
"connecting": "接続中",
"connected": "接続済み",
"disconnected": "切断済み",
"error": "エラー"
},
"runtimeStatus": {
"running": "実行中",
"error": "エラーが発生しました",
"pending": "起動待ち",
"stopped": "停止済み",
"unknown": "不明",
"errors": "件のエラー"
},
"platformQr": {
"title": "QR コードログイン",
"show": "QR コードを表示",
"status": "QR コードのステータス",
"waiting": "QR コードを待機中",
"close": "閉じる"
},
"registrationAction": {
"lark": {
"title": "QR コードで作成",
"show": "QR コードで作成",
"scanTitle": "スマートフォン版 Feishu で QR コードをスキャンしてください",
"feishu": "Feishu 中国版",
"lark": "Lark グローバル版"
},
"weixinOc": {
"title": "個人 WeChat の QR コードログイン",
"scanTitle": "スマートフォン版 WeChat で QR コードをスキャンしてください",
"created": "ログインしました",
"status": {
"idle": "未開始",
"starting": "QR コードを取得中",
"pending": "スキャンと確認を待機中",
"created": "ログインしました。下の保存ボタンを忘れずにクリックしてください!",
"denied": "ユーザーがキャンセルしました",
"expired": "有効期限が切れました",
"error": "ログインに失敗しました"
}
},
"dingtalk": {
"title": "DingTalk の QR コードで作成",
"scanTitle": "スマートフォン版 DingTalk で QR コードをスキャンしてください",
"created": "作成しました"
},
"qqOfficial": {
"title": "QQ 公式ボットを QR コードで紐付け",
"scanTitle": "スマートフォン版 QQ で QR コードをスキャンしてください",
"created": "紐付けました",
"status": {
"idle": "未開始",
"starting": "QR コードを取得中",
"pending": "スキャンと確認を待機中",
"created": "紐付けました。下の保存ボタンを忘れずにクリックしてください!",
"denied": "ユーザーがキャンセルしました",
"expired": "有効期限が切れました",
"error": "紐付けに失敗しました"
}
},
"start": "作成を開始",
"created": "作成しました",
"startFailed": "QR コードによる作成を開始できませんでした",
"pollFailed": "QR コードによる作成ステータスを取得できませんでした",
"platformIdLabel": "ボット ID",
"platformIdRequired": "ボット ID は必須です",
"platformIdInvalid": "ボット ID にスペース、':' または '!' を含めることはできません",
"mode": {
"title": "作成方法を選択",
"scan": "QR コードで簡単に作成",
"manual": "手動で作成",
"larkManual": "手動で作成(企業のセルフホスト型 Feishu プラットフォームに対応)"
},
"scanTitle": "スマートフォン版 Feishu で QR コードをスキャンしてください",
"status": {
"idle": "未開始",
"starting": "開始中",
"pending": "スキャンと確認を待機中",
"slow_down": "ポーリング間隔を延長中",
"created": "作成しました。下の保存ボタンを忘れずにクリックしてください!",
"denied": "ユーザーがキャンセルしました",
"expired": "有効期限が切れました",
"error": "作成に失敗しました"
}
},
"errorDialog": {
"title": "エラー詳細",
"platformId": "プラットフォーム ID",
"errorCount": "エラー数",
"lastError": "最新のエラー",
"occurredAt": "発生日時",
"traceback": "スタックトレース",
"close": "閉じる"
}
}
@@ -0,0 +1,167 @@
{
"title": "モデルプロバイダー",
"subtitle": "「チャット」で会話モデルを設定できます。「Agent Runner」では、Dify、Coze、Alibaba Cloud Bailian アプリケーションなどのサードパーティーサービスと連携できます。",
"providers": {
"title": "モデルプロバイダー",
"settings": "設定",
"addProvider": "モデルプロバイダーを追加",
"deleteProvider": "モデルプロバイダーを削除",
"selectHint": "モデルプロバイダーを選択してください",
"providerType": "プロバイダータイプ",
"tabs": {
"all": "すべて",
"chatCompletion": "チャット",
"speechToText": "音声認識",
"textToSpeech": "音声合成",
"embedding": "埋め込み",
"rerank": "リランキング"
},
"empty": {
"all": "モデルプロバイダーがありません。「モデルプロバイダーを追加」をクリックして追加してください",
"typed": "{type}タイプのモデルプロバイダーがありません。「モデルプロバイダーを追加」をクリックして追加してください"
},
"description": {
"openai": "OpenAI API と互換性のあるすべてのモデルプロバイダーにも対応しています。",
"kimi_code": "Kimi Code の会話モデルを設定します。",
"vllm_rerank": "Jina AI、Cohere、PPIO などのプロバイダーにも対応しています。",
"default": ""
}
},
"availability": {
"title": "モデルプロバイダーの可用性",
"subtitle": "モデルとの対話をテストして可用性を確認します。API 利用料金が発生する場合があります。",
"refresh": "可用性を再確認",
"noData": "「可用性を再確認」ボタンをクリックして、モデルプロバイダーの可用性を取得してください。",
"available": "利用可能",
"unavailable": "利用不可",
"pending": "確認中…",
"errorMessage": "エラー情報",
"test": "テスト"
},
"logs": {
"title": "サービスログ",
"expand": "展開",
"collapse": "折りたたむ"
},
"dialogs": {
"addProvider": {
"title": "モデルプロバイダー",
"tabs": {
"basic": "チャット",
"speechToText": "音声認識",
"textToSpeech": "音声合成",
"embedding": "埋め込み",
"rerank": "リランキング"
},
"noTemplates": "このタイプのプロバイダーテンプレートはありません"
},
"config": {
"addTitle": "追加",
"editTitle": "編集",
"provider": "モデルプロバイダー",
"cancel": "キャンセル",
"save": "保存"
},
"settings": {
"title": "モデルプロバイダー設定",
"sessionSeparation": {
"title": "プロバイダーのセッション分離を有効にする",
"description": "セッションごとに、テキスト生成、TTS、STT などのモデルプロバイダーを個別に選択できます。"
},
"close": "閉じる"
}
},
"messages": {
"success": {
"update": "更新しました",
"add": "追加しました",
"delete": "削除しました",
"statusUpdate": "ステータスを更新しました",
"sessionSeparation": "セッション分離設定を更新しました"
},
"error": {
"sessionSeparation": "セッション分離設定の取得に失敗しました",
"fetchStatus": "モデルプロバイダーのステータス取得に失敗しました",
"testError": "{id} のテストに失敗しました: {error}"
},
"confirm": {
"delete": "モデルプロバイダー {id} を削除してもよろしいですか?"
}
},
"providerTypes": {
"title": "プロバイダータイプ"
},
"providerSources": {
"title": "プロバイダーソース",
"add": "追加",
"delete": "プロバイダーソースを削除",
"empty": "プロバイダーソースがありません",
"selectHint": "プロバイダーソースを選択してください",
"selectCreated": "作成済みのプロバイダーソースを選択",
"save": "設定を保存",
"saveAndFetchModels": "保存してモデルを取得",
"fetchModels": "モデル一覧を取得",
"getApiKey": "API Key を取得",
"saveSuccess": "プロバイダーソースを保存しました",
"saveError": "プロバイダーソースの保存に失敗しました",
"deleteConfirm": "プロバイダーソース {id} を削除してもよろしいですか?関連するすべてのモデル設定も削除されます。",
"deleteSuccess": "プロバイダーソースを削除しました",
"deleteError": "プロバイダーソースの削除に失敗しました",
"enabled": "有効",
"disabled": "無効",
"advancedConfig": "詳細設定…",
"fields": {
"name": "名前",
"apiKey": "API Key",
"baseUrl": "Base URL"
},
"hints": {
"id": "プロバイダーソースの一意な ID(プロバイダー ID ではありません)",
"key": "認証用の API Key",
"apiBase": "カスタム API エンドポイント URL",
"proxy": "HTTP/HTTPS プロキシアドレス(例: http://127.0.0.1:7890)。このプロバイダーの API リクエストにのみ適用され、Docker の内部ネットワーク通信には影響しません。"
},
"labels": {
"proxy": "プロキシアドレス"
}
},
"models": {
"title": "モデル",
"available": "利用可能なモデル",
"configured": "設定済みのモデル",
"empty": "設定済みのモデルがありません。上の「モデル一覧を取得」をクリックして追加してください",
"noModelsFound": "利用可能なモデルが見つかりません",
"fetchError": "モデル一覧の取得に失敗しました",
"addSuccess": "モデル {model} を追加しました",
"deleteConfirm": "モデル {id} を削除してもよろしいですか?",
"deleteSuccess": "モデルを削除しました",
"deleteError": "モデルの削除に失敗しました",
"testSuccess": "モデル {id} のテストに成功しました",
"testSuccessWithLatency": "モデル {id} のテストに成功しました。レイテンシー:{latency} ms",
"testError": "モデルのテストに失敗しました",
"searchPlaceholder": "モデルまたは ID を検索",
"manualAddButton": "カスタムモデル",
"manualDialogTitle": "カスタムモデルを追加",
"manualDialogModelLabel": "モデル ID(例:gpt-4.1-mini)",
"manualDialogPreviewLabel": "表示用 ID(自動生成)",
"manualDialogPreviewHint": "生成ルール:sourceId/modelId",
"manualModelRequired": "モデル ID を入力してください",
"manualModelExists": "このモデルはすでに存在します",
"configure": "設定",
"testButton": "モデルをテスト",
"metadata": {
"image": "画像入力",
"audio": "音声入力",
"toolUse": "ツール使用",
"reasoning": "推論",
"context": "{tokens} トークンのコンテキストウィンドウ",
"available": "モデルのメタデータによると、{capability} に対応しています",
"enabled": "{capability} が有効です",
"supportedDisabled": "モデルのメタデータによると {capability} に対応していますが、現在のプロバイダーではこの機能が有効になっていません。"
},
"tooltips": {
"providerId": "プロバイダー ID",
"modelId": "モデル ID"
}
}
}
@@ -0,0 +1,158 @@
{
"title": "カスタムルール",
"subtitle": "特定のセッションに、グローバル設定より優先されるカスタムルールを設定します。",
"buttons": {
"refresh": "再読み込み",
"edit": "編集",
"editRule": "ルールを編集",
"deleteAllRules": "すべてのルールを削除",
"addRule": "ルールを追加",
"save": "保存",
"cancel": "キャンセル",
"delete": "削除",
"clear": "クリア",
"next": "次へ",
"editCustomName": "メモを編集",
"batchDelete": "一括削除"
},
"customRules": {
"title": "カスタムルール",
"rulesCount": "件のルール",
"hasRules": "設定済み",
"noRules": "カスタムルールがありません",
"noRulesDesc": "「ルールを追加」をクリックして、特定のセッションにカスタムルールを設定します",
"serviceConfig": "サービス設定",
"pluginConfig": "プラグイン設定",
"kbConfig": "ナレッジベース設定",
"providerConfig": "モデル設定",
"configured": "設定済み",
"noCustomName": "メモ未設定"
},
"quickEditName": {
"title": "メモ名を編集"
},
"search": {
"placeholder": "セッションを検索…"
},
"table": {
"headers": {
"umoInfo": "メッセージ送信元(UMO)",
"rulesOverview": "ルール概要",
"actions": "操作"
}
},
"persona": {
"none": "設定ファイルに従う"
},
"provider": {
"followConfig": "設定ファイルに従う"
},
"addRule": {
"title": "カスタムルールを追加",
"description": "メッセージ送信元(UMO)を選択してカスタムルールを設定します。カスタムルールは、その送信元が属する設定ファイルのグローバルルールより優先されます。/sid コマンドで送信元の UMO 情報を確認できます。",
"selectUmo": "セッションを選択",
"noUmos": "利用可能なセッションがありません"
},
"ruleEditor": {
"title": "カスタムルールを編集",
"description": "このセッションにカスタムルールを設定します。これらのルールはグローバル設定より優先されます。",
"serviceConfig": {
"title": "サービス設定",
"sessionEnabled": "このメッセージ送信元からのメッセージ処理を有効化",
"llmEnabled": "LLM を有効化",
"ttsEnabled": "TTS を有効化",
"customName": "メッセージ送信元の表示名"
},
"providerConfig": {
"title": "モデル設定",
"chatProvider": "チャットモデル",
"sttProvider": "音声認識モデル",
"ttsProvider": "音声合成モデル"
},
"personaConfig": {
"title": "ペルソナ設定",
"selectPersona": "ペルソナを選択",
"hint": "ペルソナ設定を適用すると、この送信元のすべての会話で選択したペルソナが強制的に使用されます。"
},
"pluginConfig": {
"title": "プラグイン設定",
"disabledPlugins": "無効にするプラグイン",
"hint": "このセッションで無効にするプラグインを選択します。選択していないプラグインは有効なままです。"
},
"kbConfig": {
"title": "ナレッジベース設定",
"selectKbs": "ナレッジベースを選択",
"topK": "返す結果の件数(Top K)",
"enableRerank": "リランキングを有効化"
}
},
"deleteConfirm": {
"title": "削除の確認",
"message": "このセッションのすべてのカスタムルールを削除してもよろしいですか?削除後はグローバル設定が使用されます。"
},
"batchDeleteConfirm": {
"title": "一括削除の確認",
"message": "選択した {count} 件のルールを削除してもよろしいですか?削除後はグローバル設定が使用されます。"
},
"batchOperations": {
"title": "一括操作",
"hint": "セッション設定をまとめてすばやく変更",
"scope": "適用範囲",
"scopeSelected": "選択したセッション",
"scopeAll": "すべてのセッション",
"scopeGroup": "すべてのグループチャット",
"scopePrivate": "すべての個別チャット",
"llmStatus": "LLM ステータス",
"ttsStatus": "TTS ステータス",
"chatProvider": "チャットモデル",
"ttsProvider": "TTS モデル",
"apply": "変更を適用"
},
"groups": {
"title": "グループ管理",
"count": "{count} グループ",
"addToGroup": "グループに追加",
"create": "グループを作成",
"edit": "グループを編集",
"name": "グループ名",
"sessionsCount": "{count} セッション",
"empty": "グループがありません。「グループを作成」をクリックして作成してください",
"availableSessions": "選択可能なセッション({count})",
"selectedSessions": "選択済みのセッション({count})",
"searchPlaceholder": "検索…",
"noMatch": "一致する項目がありません",
"noMembers": "メンバーがいません",
"customGroupDivider": "── カスタムグループ ──",
"customGroupOption": "📁 {name}({count})",
"groupOption": "{name}({count} セッション)",
"deleteConfirm": "グループ \"{name}\" を削除してもよろしいですか?"
},
"status": {
"enabled": "有効",
"disabled": "無効"
},
"messages": {
"refreshSuccess": "データを再読み込みしました",
"loadError": "データの読み込みに失敗しました",
"saveSuccess": "保存しました",
"saveError": "保存に失敗しました",
"clearSuccess": "クリアしました",
"clearError": "クリアに失敗しました",
"deleteSuccess": "削除しました",
"deleteError": "削除に失敗しました",
"noChanges": "保存する変更はありません",
"batchDeleteSuccess": "一括削除しました",
"batchDeleteError": "一括削除に失敗しました",
"selectSessionsFirst": "操作するセッションを先に選択してください",
"selectAtLeastOneConfig": "変更する設定を 1 つ以上選択してください",
"batchUpdateSuccess": "一括更新しました",
"partialUpdateFailed": "一部の更新に失敗しました",
"batchUpdateError": "一括更新に失敗しました",
"groupNameRequired": "グループ名を入力してください",
"saveGroupError": "グループの保存に失敗しました",
"deleteGroupError": "グループの削除に失敗しました",
"selectSessionsToAddFirst": "追加するセッションを先に選択してください",
"addToGroupSuccess": "{count} 件のセッションをグループに追加しました",
"addToGroupError": "追加に失敗しました"
}
}
@@ -0,0 +1,307 @@
{
"page": {
"title": "設定"
},
"sections": {
"general": {
"title": "一般"
},
"appearance": {
"title": "外観"
},
"network": {
"title": "ネットワーク"
},
"security": {
"title": "セキュリティ"
},
"maintenance": {
"title": "メンテナンス"
},
"openapi": {
"title": "OpenAPI"
},
"resources": {
"title": "概要"
}
},
"resources": {
"changelog": {
"subtitle": "現在および過去のバージョンの変更内容を確認します。"
},
"documentation": {
"subtitle": "AstrBot の公式ドキュメントを開きます。"
},
"faq": {
"subtitle": "よくある質問とトラブルシューティングを確認します。"
},
"github": {
"subtitle": "AstrBot の GitHub リポジトリを開きます。"
}
},
"systemConfig": {
"restartRequired": "システム設定を保存しました。一部の設定は AstrBot の再起動後に反映されます。",
"groups": {
"runtime": {
"title": "基本動作",
"subtitle": "タイムゾーンと外部から到達可能なコールバック URL。"
},
"network": {
"title": "プロキシと依存パッケージの取得元",
"subtitle": "実行時プロキシ、Python 依存パッケージのインストール設定、PyPI ミラー。"
},
"webuiSecurity": {
"title": "WebUI セキュリティ",
"subtitle": "HTTPS、信頼済みプロキシヘッダー、ログイン回数制限、TOTP。"
},
"logs": {
"title": "ログ",
"subtitle": "コンソールログ、ファイルログ、Trace ファイルログ。"
},
"tempStorage": {
"title": "キャッシュ",
"subtitle": "一時ディレクトリを自動消去するしきい値。"
},
"t2iRendering": {
"title": "長文の画像化",
"subtitle": "長文を画像としてレンダリングする際の方式、エンドポイント、カスタムテンプレート。"
}
},
"timePreview": {
"label": "AstrBot の現在時刻"
},
"messages": {
"loadFailed": "システム設定の読み込みに失敗しました",
"saveSuccess": "システム設定を保存しました",
"saveFailed": "システム設定の保存に失敗しました"
}
},
"network": {
"title": "ネットワーク",
"githubProxy": {
"title": "GitHub プロキシアドレス",
"subtitle": "プラグインのダウンロードや AstrBot の更新に使用する GitHub プロキシアドレスを設定します。中国本土のネットワーク環境で有効です。カスタム入力は即時反映されます。各アドレスの安定性は保証されません。プラグインやプロジェクトの更新時にエラーが発生した場合は、まずプロキシアドレスが正常に利用できるか確認してください。",
"label": "GitHub プロキシアドレスを選択"
},
"proxySelector": {
"title": "GitHub プロキシ",
"noProxy": "GitHub プロキシを使用しない",
"useProxy": "GitHub プロキシを使用",
"testConnection": "接続をテスト",
"available": "利用可能",
"unavailable": "利用不可",
"custom": "カスタム"
}
},
"theme": {
"title": "テーマ",
"subtitle": "テーマのメインカラーとアクセントカラーを設定します。データはブラウザー内に保存されます。",
"customize": {
"title": "テーマカラー",
"primary": "メインカラー",
"secondary": "アクセントカラー",
"reset": "既定に戻す"
}
},
"system": {
"title": "システム",
"restart": {
"title": "再起動",
"subtitle": "AstrBot を再起動",
"confirm": "AstrBot を再起動しますか?再起動中は WebUI が一時的に利用できなくなります。",
"button": "再起動"
},
"backup": {
"title": "データのバックアップと復元",
"subtitle": "AstrBot のすべてのデータをエクスポートまたはインポートして、新しいサーバーへ移行できます。",
"button": "バックアップ管理"
},
"cleanup": {
"title": "ログとキャッシュの消去",
"subtitle": "ログとキャッシュの使用量を確認し、まとめて消去します。",
"refresh": "使用量を再読み込み",
"clean": "消去",
"cleanAll": "すべて消去",
"panel": {
"title": "消去の詳細",
"subtitle": "現在の使用量:{size}"
},
"fileCount": "{count} ファイル",
"confirm": "{target}を消去しますか?",
"targetNames": {
"cache": "キャッシュ",
"logs": "ログ",
"all": "ログとキャッシュ"
},
"targets": {
"cache": {
"title": "キャッシュ",
"subtitle": "一時ファイル、プラグインマーケットのキャッシュ、スキルのキャッシュを削除します。",
"button": "キャッシュを消去"
},
"logs": {
"title": "ログ",
"subtitle": "過去のログを削除し、現在書き込み中のログファイルを空にします。",
"button": "ログを消去"
}
},
"messages": {
"statusFailed": "ストレージ使用量の読み込みに失敗しました",
"cleanupSuccess": "{count} ファイルを消去し、{size} を解放しました",
"cleanupFailed": "消去に失敗しました"
}
}
},
"sidebar": {
"title": "サイドバー",
"customize": {
"title": "サイドバーをカスタマイズ",
"subtitle": "ドラッグしてモジュールを並べ替えるか、「その他の機能」グループへ移動またはグループから取り出します。設定はブラウザー内にのみ保存されます。",
"reset": "既定に戻す",
"mainItems": "メインモジュール",
"moreItems": "その他の機能"
}
},
"backup": {
"dialog": {
"title": "バックアップ管理"
},
"tabs": {
"export": "バックアップをエクスポート",
"import": "バックアップをインポート",
"list": "バックアップ一覧"
},
"export": {
"title": "バックアップを作成",
"description": "データベース、ナレッジベース、設定、添付ファイル、スキルを含むすべてのデータを ZIP バックアップファイルとしてエクスポートします。",
"includes": "バックアップ内容:メインデータベース、ナレッジベース(メタデータ+ベクトルインデックス+ドキュメント)、設定ファイル、添付ファイル、スキル",
"button": "エクスポートを開始",
"processing": "エクスポート中…",
"wait": "データをパッケージ化しています。しばらくお待ちください…",
"completed": "エクスポートが完了しました",
"download": "バックアップをダウンロード",
"another": "新しいバックアップを作成",
"failed": "エクスポートに失敗しました",
"retry": "再試行"
},
"import": {
"title": "バックアップをインポート",
"warning": "⚠️ インポートすると既存のデータが削除され、バックアップの内容で上書きされます。現在のデータを必ずバックアップしてください。",
"selectFile": "バックアップファイルを選択(.zip)",
"uploadAndCheck": "アップロードして確認",
"uploading": "アップロード中…",
"uploadWait": "バックアップファイルをアップロードしています。しばらくお待ちください…",
"uploadInit": "アップロードを初期化中…",
"uploadingChunks": "分割データをアップロード中…",
"uploadComplete": "アップロードが完了しました。ファイルを結合中…",
"checking": "バックアップファイルを確認中…",
"invalidBackup": "無効なバックアップファイル",
"backupContents": "バックアップ内容",
"tables": "テーブル",
"knowledgeBases": "ナレッジベース",
"configFiles": "設定ファイル",
"confirmImport": "インポートを確認",
"button": "インポートを開始",
"processing": "インポート中…",
"wait": "データを復元しています。しばらくお待ちください…",
"completed": "インポートが完了しました",
"restartRequired": "データをインポートしました。すべての変更を反映するため、AstrBot をすぐに再起動することを推奨します。",
"restartNow": "今すぐ再起動",
"failed": "インポートに失敗しました",
"retry": "再試行",
"version": {
"backupVersion": "バックアップのバージョン",
"currentVersion": "現在のバージョン",
"backupTime": "バックアップ日時",
"matchTitle": "✅ バージョン一致",
"matchMessage": "インポートすると、以下を含む既存のすべてのデータが削除され、バックアップの内容で上書きされます:\n• メインデータベース(会話履歴、設定など)\n• ナレッジベース\n• プラグインとプラグインデータ\n• 設定ファイル\n• スキル\n\nこの操作は元に戻せません。続行しますか?",
"minorDiffTitle": "⚠️ バージョン差異の警告",
"minorDiffMessage": "マイナーバージョンが異なっていても通常はインポートできますが、データ構造が一部異なる可能性があります。\nインポートすると既存のすべてのデータが削除され、バックアップの内容で上書きされます。\n\n続行しますか?",
"majorDiffTitle": "⛔ インポートできません",
"majorDiffMessage": "メジャーバージョンが異なります。メジャーバージョンをまたぐインポートはデータ破損の原因となる可能性があります。\n同じメジャーバージョンの AstrBot を使用してください。"
}
},
"list": {
"empty": "バックアップファイルがありません",
"refresh": "一覧を再読み込み",
"confirmDelete": "このバックアップファイルを削除しますか?この操作は元に戻せません。",
"uploaded": "アップロード済み",
"restore": "このバックアップを復元",
"rename": "名前を変更",
"renameTitle": "バックアップファイル名を変更",
"newName": "新しいファイル名",
"renameHint": "ファイル名には英字、数字、アンダースコア、ハイフン、ピリオドのみ使用できます",
"renameRequired": "ファイル名を入力してください",
"renameInvalidChars": "ファイル名に使用できない文字が含まれています",
"renameFailed": "名前の変更に失敗しました",
"ftpHint": "大きなバックアップファイルは、FTP/SFTP などを使用して data/backups ディレクトリへ直接アップロードすることもできます"
}
},
"apiKey": {
"title": "API キー",
"manageTitle": "開発者アクセスキー",
"subtitle": "外部の開発者が公開 HTTP API を呼び出すための API キーを作成します。",
"name": "キー名",
"expiresInDays": "有効期限",
"expiryOptions": {
"day1": "1 日",
"day7": "7 日",
"day30": "30 日",
"day90": "90 日",
"permanent": "無期限"
},
"permanentWarning": "無期限の API キーは高いリスクがあります。安全に保管し、必要な場合にのみ使用してください。",
"scopes": "権限範囲",
"sensitiveSubscope": "機密サブ権限",
"chatAdminWarning": "chat:admin を付与すると、この API キーは設定済みの管理者 ID を使用して管理者操作を実行できます。完全に信頼できる呼び出し元にのみ付与してください。",
"createConfirm": "次の権限を持つ API キーを作成しますか?\n\n{scopes}",
"sensitiveCreateConfirm": "次の高リスク権限を持つ API キーを作成しようとしています:\n\n{scopes}\n\nこの API キーの所持者が管理者権限を取得する可能性があります。続行しますか?",
"scopeDescriptions": {
"bot": "ボットとプラットフォームの設定を読み取り、管理します。",
"provider": "モデルプロバイダーを読み取り、管理します。",
"persona": "ペルソナを読み取り、管理します。",
"im": "インスタントメッセージング関連の API にアクセスします。",
"config": "システム設定とプロファイル設定を読み取り、管理します。bot と provider の権限も含まれます。",
"editAdmin": "admins_id の変更を許可します。ユーザーに管理者権限が付与される可能性があります。",
"chat": "セッションの作成、メッセージの送信、ChatUI プロジェクトの管理を行います。",
"chatAdmin": "username に設定済みの管理者 ID の使用を許可し、対応する管理者権限を付与します。",
"data": "統計情報と実行データにアクセスします。",
"file": "API ファイルをアップロードし、アクセスします。",
"plugin": "プラグインを読み取り、管理します。",
"mcp": "MCP サーバーを読み取り、管理します。",
"skill": "スキルを読み取り、管理します。"
},
"create": "API キーを作成",
"revoke": "無効化",
"delete": "削除",
"copy": "コピー",
"docsLink": "ドキュメントを開く",
"plaintextHint": "このキーを今すぐ保存してください。平文は二度と表示されません。",
"empty": "API キーがありません",
"status": {
"active": "有効",
"inactive": "無効"
},
"table": {
"name": "名前",
"prefix": "プレフィックス",
"scopes": "権限",
"status": "状態",
"lastUsed": "最終使用日時",
"createdAt": "作成日時",
"actions": "操作"
},
"messages": {
"loadFailed": "API キーの読み込みに失敗しました",
"scopeRequired": "権限を 1 つ以上選択してください",
"createSuccess": "API キーを作成しました",
"createFailed": "API キーの作成に失敗しました",
"revokeSuccess": "API キーを無効化しました",
"revokeFailed": "API キーの無効化に失敗しました",
"deleteSuccess": "API キーを削除しました",
"deleteFailed": "API キーの削除に失敗しました",
"copySuccess": "API キーをコピーしました",
"copyFailed": "API キーのコピーに失敗しました"
}
}
}
@@ -0,0 +1,98 @@
{
"header": {
"eyebrow": "ダッシュボード",
"title": "システム統計",
"subtitle": "プラットフォーム、メッセージ、モデル呼び出しを一元的に表示します。",
"notUpdated": "未更新"
},
"ranges": {
"oneDay": "1 日",
"threeDays": "3 日",
"oneWeek": "1 週間"
},
"rangeLabels": {
"oneDay": "直近 1 日",
"threeDays": "直近 3 日",
"oneWeek": "直近 1 週間"
},
"overviewCards": {
"platformCount": {
"label": "プラットフォームインスタンス数",
"note": "設定済みで現在稼働中のプラットフォームインスタンス"
},
"messageCount": {
"label": "メッセージ総数",
"note": "累計メッセージ数"
},
"todayModelCalls": {
"label": "本日のモデル呼び出し",
"note": "トークン"
},
"cpu": {
"label": "CPU",
"note": "プログラムの CPU 使用率"
},
"memory": {
"label": "プロセスメモリ",
"note": "システムメモリ {systemMemory}"
},
"uptime": {
"label": "稼働時間",
"note": "起動時刻 {startTime}"
}
},
"messageOverview": {
"title": "メッセージ"
},
"messageTrend": {
"title": "メッセージの推移",
"totalMessages": "メッセージ総数"
},
"platformRanking": {
"title": "プラットフォーム別メッセージランキング"
},
"modelCalls": {
"title": "AI モデル"
},
"modelTrend": {
"title": "モデル呼び出しの推移"
},
"modelTotal": {
"title": "{range}のモデル呼び出し合計",
"callCount": "合計 {count} 回",
"avgTtft": "最初のトークンまでの平均時間(TTFT)",
"avgDuration": "平均応答時間",
"avgTpm": "平均出力速度(TPM)",
"successRate": "呼び出し成功率"
},
"modelRanking": {
"title": "モデル使用量ランキング"
},
"sessionRanking": {
"title": "{range}のセッション別モデル使用量上位 10 件",
"openConversation": "会話を見る"
},
"empty": {
"platformStats": "プラットフォーム別メッセージ統計データはありません。",
"modelCalls": "{range}のモデル呼び出しデータはありません。",
"sessionCalls": "{range}のセッション呼び出しデータはありません。"
},
"chart": {
"messages": "メッセージ",
"others": "その他"
},
"units": {
"tokens": "トークン",
"tpm": "TPM",
"gb": "GB",
"mb": "MB",
"ms": "ms",
"hoursShort": "h",
"minutesShort": "m",
"secondsShort": "s"
},
"errors": {
"loadFailed": "統計データを読み込めませんでした。しばらくしてからもう一度お試しください。",
"rangeFailed": "統計範囲を切り替えられませんでした。しばらくしてからもう一度お試しください。"
}
}
@@ -0,0 +1,87 @@
{
"header": {
"eyebrow": "サブエージェント"
},
"page": {
"title": "サブエージェント",
"beta": "実験的機能",
"subtitle": "メインエージェントは自身のツールを直接使用するほか、一部のタスクを各サブエージェントへ委任できます。より複雑なタスクに対応し、メインエージェントのコンテキスト肥大化を防ぎます。"
},
"actions": {
"refresh": "再読み込み",
"save": "保存",
"add": "サブエージェントを追加",
"expand": "設定を展開",
"collapse": "設定を折りたたむ",
"delete": "削除",
"close": "閉じる"
},
"overview": {
"totalAgents": "サブエージェント総数",
"totalAgentsNote": "設定済みのサブエージェント数",
"enabledAgents": "有効なエージェント",
"enabledAgentsNote": "AstrBot から呼び出せるサブエージェント",
"mainOrchestration": "メインオーケストレーションの状態",
"boundPersonas": "関連付け済みペルソナ",
"boundPersonasNote": "ペルソナを関連付けたサブエージェント数"
},
"switches": {
"enable": "サブエージェントオーケストレーションを有効化",
"enableHint": "サブエージェント機能を有効にします",
"dedupe": "メイン LLM の重複ツールを除外(サブエージェントと重複するツールを非表示)",
"dedupeHint": "サブエージェントと重複するツールをメインエージェントから除外します"
},
"description": {
"disabled": "サブエージェントオーケストレーションは無効です。",
"enabled": "有効にすると、メインエージェントがこのサブエージェントを呼び出せます。"
},
"section": {
"title": "サブエージェント設定",
"subtitle": "メインエージェントが委任できるサブエージェント、ペルソナ、説明を設定します",
"globalSettings": "グローバル設定",
"agentSetup": "エージェント設定"
},
"cards": {
"statusEnabled": "有効",
"statusDisabled": "無効",
"unnamed": "名前のないサブエージェント",
"transferPrefix": "transfer_to_{name}",
"switchLabel": "有効",
"previewTitle": "プレビュー:メイン LLM に表示されるハンドオフツール",
"personaChip": "ペルソナ:{id}",
"noDescription": "説明がありません",
"personaPreview": "ペルソナのプレビュー",
"previewHint": "現在選択中のペルソナを確認し、ハンドオフ先が正しいことを確かめられます。"
},
"form": {
"nameLabel": "エージェント名(transfer_to_{name} に使用)",
"nameHint": "英小文字+アンダースコアを推奨します。全体で一意にしてください",
"providerLabel": "チャットプロバイダー(任意)",
"providerHint": "空欄の場合はグローバルの既定プロバイダーを使用します。",
"personaLabel": "ペルソナを選択",
"personaHint": "サブエージェントは選択したペルソナのシステム設定とツールを直接継承します。ペルソナ設定ページでペルソナを管理・作成できます。",
"personaPreview": "ペルソナのプレビュー",
"descriptionLabel": "メイン LLM 向けの説明(ハンドオフの判断に使用)",
"descriptionHint": "メイン LLM には transfer_to_* ツールの説明として表示されます。短く明確に記述してください。"
},
"messages": {
"loadConfigFailed": "設定の取得に失敗しました",
"loadPersonaFailed": "ペルソナ一覧の取得に失敗しました",
"unsavedChangesNotice": "このページには未保存の変更があります。移動する前に保存してください。",
"unsavedChangesLeaveConfirm": "このページには未保存の変更があります。移動すると変更は破棄されます。移動しますか?",
"unsavedChangesReloadConfirm": "このページには未保存の変更があります。設定を再読み込みすると変更は破棄されます。再読み込みしますか?",
"nameMissing": "名前が入力されていないサブエージェントがあります",
"nameInvalid": "サブエージェント名が無効です。英小文字、数字、アンダースコアのみ使用でき、先頭は英字にしてください",
"nameDuplicate": "サブエージェント名が重複しています:{name}",
"personaMissing": "サブエージェント {name} のペルソナが選択されていません",
"saveSuccess": "保存しました",
"saveFailed": "保存に失敗しました",
"nameRequired": "名前は必須です",
"namePattern": "英小文字、数字、アンダースコアのみ使用できます"
},
"empty": {
"title": "サブエージェントが設定されていません",
"subtitle": "右上の「サブエージェントを追加」から作成できます。",
"action": "最初のエージェントを作成"
}
}
@@ -0,0 +1,192 @@
{
"title": "関数ツール管理",
"subtitle": "MCP サーバーを管理し、利用可能な関数ツールを確認します。",
"tooltip": {
"info": "関数呼び出しと MCP とは?",
"marketplace": "コミュニティの MCP サーバーを閲覧・インストール",
"serverConfig": "MCP サーバー(stdio)の設定では、次のフィールドを使用できます:\ncommand:コマンド名(例:python または uv)\nargs:コマンド引数の配列(例:[\"run\", \"server.py\"])\nenv:環境変数オブジェクト(例:{\"api_key\": \"abc\"})\ncwd:作業ディレクトリのパス(例:/path/to/server)\nencoding:出力エンコーディング(既定:utf-8)\nencoding_error_handler:テキストのエンコーディングエラー処理(既定:strict)\nその他のフィールドについては MCP ドキュメントを参照してください。\n⚠️ Docker で AstrBot をデプロイする場合は、AstrBot がマウントした data ディレクトリ内に MCP サーバーをインストールしてください。"
},
"tabs": {
"local": "ローカルサーバー",
"marketplace": "MCP マーケット"
},
"mcpServers": {
"title": "MCP サーバー",
"description": "MCP サーバーを管理します",
"buttons": {
"refresh": "再読み込み",
"add": "サーバーを追加",
"connect": "接続",
"disconnect": "切断",
"useTemplateStdio": "Stdio テンプレート",
"useTemplateStreamableHttp": "Streamable HTTP テンプレート",
"useTemplateSse": "SSE テンプレート",
"sync": "サーバーを同期"
},
"empty": "MCP サーバーがありません。「サーバーを追加」をクリックして追加してください",
"status": {
"noTools": "利用可能なツールがありません",
"availableTools": "利用可能なツール",
"connected": "接続済み",
"disconnected": "未接続",
"configSummary": "設定:{keys}",
"noConfig": "設定されていません"
}
},
"functionTools": {
"title": "関数ツール",
"buttons": {
"view": "ツールを表示"
},
"search": "関数ツールを検索",
"empty": "利用可能な関数ツールがありません",
"description": "機能の説明",
"parameters": "パラメーター一覧",
"noParameters": "このツールにはパラメーターがありません",
"filter": {
"showBuiltin": "組み込みツールを表示"
},
"table": {
"paramName": "パラメーター名",
"type": "種類",
"description": "説明",
"required": "必須",
"origin": "提供元",
"originName": "提供元の名前",
"readonly": "読み取り専用",
"permission": "権限",
"permissionAdmin": "管理者",
"permissionMember": "すべてのユーザー",
"permissionEveryone": "すべてのユーザー",
"permissionBuiltin": "システム組み込み",
"actions": "操作"
},
"configTags": {
"tooltipTitle": "このツールが設定ファイル {config} で有効になっている理由:",
"conditions": {
"truthy": "{key} が有効です",
"equals": "{key} = {expected}",
"in": "{key} が {expected} に一致しました",
"fallback": "{key} の現在値は {actual} です"
}
},
"summary": {
"total": "合計",
"active": "有効",
"inactive": "無効"
}
},
"marketplace": {
"title": "MCP サーバーマーケット",
"search": "サーバーを検索",
"buttons": {
"refresh": "再読み込み",
"detail": "詳細",
"import": "インポート"
},
"loading": "MCP サーバーマーケットを読み込み中…",
"empty": "利用可能な MCP サーバーがありません",
"status": {
"availableTools": "利用可能なツール({count})",
"noToolsInfo": "利用可能なツール情報がありません"
}
},
"dialogs": {
"addServer": {
"title": "MCP サーバーを追加",
"editTitle": "MCP サーバーを編集",
"fields": {
"name": "サーバー名",
"nameRequired": "名前は必須です",
"enable": "保存後にサーバーへ接続",
"config": "サーバー設定"
},
"errors": {
"configEmpty": "設定を空にはできません",
"jsonFormat": "JSON 形式エラー:{error}",
"jsonParse": "JSON 解析エラー:{error}"
},
"buttons": {
"cancel": "キャンセル",
"save": "保存",
"testConnection": "接続をテスト",
"sync": "同期"
},
"tips": {
"timeoutConfig": "ツール呼び出しのタイムアウトは設定ページで個別に指定してください",
"transportRecommendation": "Streamable HTTP または SSE モードの使用を推奨します。stdio モードは AstrBot ホスト上でローカルプロセスを起動するため、信頼できる MCP サーバーにのみ使用してください。"
}
},
"serverDetail": {
"title": "サーバー詳細",
"installConfig": "インストール設定",
"availableTools": "利用可能なツール",
"buttons": {
"close": "閉じる",
"importConfig": "設定をインポート"
}
},
"confirmDelete": "MCP サーバー「{name}」を削除してもよろしいですか?この操作は元に戻せません。"
},
"syncProvider": {
"title": "MCP サーバーを同期",
"subtitle": "プロバイダーの MCP サーバー設定をローカルに同期します。",
"steps": {
"selectProvider": "ステップ 1:プロバイダーを選択",
"configureAuth": "ステップ 2:認証を設定",
"syncServers": "ステップ 3:サーバーを同期"
},
"providers": {
"modelscope": "ModelScope",
"description": "ModelScope は、さまざまな機械学習・AI サービス向けの MCP サーバーを提供するオープンなモデルコミュニティです。"
},
"fields": {
"provider": "プロバイダーを選択",
"accessToken": "アクセストークン",
"tokenRequired": "アクセストークンは必須です",
"tokenHint": "ModelScope のアクセストークンを入力してください"
},
"buttons": {
"cancel": "キャンセル",
"previous": "戻る",
"next": "次へ",
"sync": "同期を開始",
"getToken": "トークンを取得"
},
"status": {
"selectProvider": "MCP サーバーのプロバイダーを選択してください",
"enterToken": "続行するにはアクセストークンを入力してください",
"readyToSync": "サーバー設定を同期する準備ができました"
},
"messages": {
"syncSuccess": "MCP サーバーを同期しました",
"syncError": "同期に失敗しました:{error}",
"tokenHelp": "ModelScope のアクセストークンは、右側のボタンから取得方法を確認できます。"
}
},
"messages": {
"getServersError": "MCP サーバー一覧の取得に失敗しました:{error}",
"getToolsError": "関数ツール一覧の取得に失敗しました:{error}",
"saveSuccess": "保存しました",
"saveError": "保存に失敗しました:{error}",
"deleteSuccess": "削除しました",
"deleteError": "削除に失敗しました:{error}",
"updateSuccess": "更新しました",
"updateError": "更新に失敗しました:{error}",
"getMarketError": "MCP マーケットのサーバー一覧の取得に失敗しました:{error}",
"importError": {
"noConfig": "このサーバーには利用可能な設定がありません",
"invalidFormat": "サーバー設定の形式が正しくありません",
"failed": "設定のインポートに失敗しました:{error}"
},
"configParseError": "設定の解析に失敗しました:{error}",
"noAvailableConfig": "利用可能な設定がありません",
"toggleToolSuccess": "ツールの状態を切り替えました",
"toggleToolReadonly": "組み込みツールは読み取り専用のため、有効化または無効化できません。",
"toggleToolError": "ツールの状態を切り替えられませんでした:{error}",
"updateToolPermissionSuccess": "ツール {name} の権限を更新しました",
"updateToolPermissionFailed": "ツール権限の更新に失敗しました",
"updateToolPermissionBuiltin": "組み込みツールでは個別の権限を設定できません",
"testError": "接続テストに失敗しました:{error}"
}
}
@@ -0,0 +1,21 @@
{
"title": "トレース",
"autoScroll": {
"enabled": "自動スクロール:オン",
"disabled": "自動スクロール:オフ"
},
"hint": "現在は AstrBot のメインエージェントによる一部のモデル呼び出し経路のみ記録しています。今後、記録範囲を拡充します。",
"toggleLabel": "トレースを記録",
"recording": "記録中",
"paused": "一時停止中",
"table": {
"time": "時刻",
"eventId": "イベント ID",
"sender": "送信者",
"outline": "内容"
},
"expand": "展開",
"collapse": "折りたたむ",
"showMore": "さらに表示",
"empty": "トレースデータはありません"
}
@@ -0,0 +1,51 @@
{
"greeting": {
"morning": "おはようございます。AstrBot へようこそ",
"afternoon": "こんにちは。AstrBot へようこそ",
"evening": "こんばんは。AstrBot へようこそ",
"newYear": "あけましておめでとうございます!"
},
"subtitle": "まずクイックガイドを完了しましょう。プラットフォームと会話プロバイダーは後から設定することもできます。",
"announcement": {
"title": "お知らせ"
},
"onboard": {
"title": "クイックガイド",
"subtitle": "このページで初期設定を完了できます。",
"step1Title": "AI モデルを設定",
"step1Desc": "AstrBot で使用する AI モデルを設定します。",
"step2Title": "プラットフォームボットを設定",
"step2Desc": "AstrBot を QQ、Lark、WeCom、Telegram などの IM プラットフォームに接続します。",
"step3Title": "エージェントにコンピューターの使用を許可",
"step3Desc": "エージェントによるこのコンピューターへのアクセスと使用を許可するか設定します。",
"step3HelpTitle": "エージェントにコンピューターの使用を許可",
"step3HelpItem1": "エージェントは、ユーザーごとに分離されたワークスペースディレクトリやスキルにアクセスし、より複雑なタスクを実行できます。",
"step3HelpItem2": "AstrBot 管理者の場合、エージェントには Shell コマンドや Python コードの実行、およびローカルのすべてのディレクトリへのアクセスも許可されます。",
"step3HelpClose": "閉じる",
"step3SelectLabel": "コンピューターへのアクセス権限",
"step3Allow": "許可",
"step3Deny": "許可しない",
"configure": "設定する",
"save": "保存",
"skip": "スキップ",
"pending": "未対応",
"completed": "完了",
"skipped": "スキップ済み",
"platformLoadFailed": "プラットフォーム設定を読み込めませんでした",
"providerLoadFailed": "プロバイダー設定を読み込めませんでした",
"providerUpdateFailed": "default 設定ファイルのデフォルト会話プロバイダーを更新できませんでした",
"providerDefaultUpdated": "default 設定ファイルのデフォルト会話プロバイダーを {id} に設定しました",
"computerAccessUpdateFailed": "エージェントのコンピューターアクセス権限を更新できませんでした",
"computerAccessAllowed": "エージェントにコンピューターへのアクセスと使用を許可しました",
"computerAccessDenied": "エージェントによるコンピューターへのアクセスと使用を許可しませんでした",
"step3HelpItem3": "権限と機能をさらに細かく設定するには、「設定ファイル -> 一般設定 -> コンピューター使用機能」で設定してください。"
},
"resources": {
"title": "関連リソース",
"githubDesc": "AstrBot に Star を付けてください!",
"docsTitle": "ドキュメント",
"docsDesc": "AstrBot の公式ドキュメントをご覧ください。",
"afdianTitle": "Afdian",
"afdianDesc": "Afdian で AstrBot チームを支援できます。"
}
}
@@ -0,0 +1,39 @@
{
"network": {
"timeout": "ネットワーク要求がタイムアウトしました。しばらくしてからもう一度お試しください",
"connection": "ネットワークへの接続に失敗しました。接続状態を確認してください",
"server": "サーバーエラーが発生しました。テクニカルサポートにお問い合わせください",
"unavailable": "サービスは一時的に利用できません",
"forbidden": "アクセスが拒否されました"
},
"validation": {
"required": "この項目は必須です",
"invalid": "入力形式が正しくありません",
"tooLong": "入力内容が長すぎます",
"tooShort": "入力内容が短すぎます",
"email": "有効なメールアドレスを入力してください",
"url": "有効な URL を入力してください",
"number": "有効な数値を入力してください"
},
"auth": {
"unauthorized": "認証されていません。もう一度ログインしてください",
"forbidden": "この操作を実行する権限がありません",
"tokenExpired": "ログインの有効期限が切れました。もう一度ログインしてください",
"invalidCredentials": "ユーザー名またはパスワードが正しくありません"
},
"file": {
"uploadFailed": "ファイルのアップロードに失敗しました",
"invalidFormat": "サポートされていないファイル形式です",
"tooLarge": "ファイルサイズが上限を超えています",
"notFound": "ファイルが見つかりません"
},
"operation": {
"failed": "操作に失敗しました",
"cancelled": "操作はキャンセルされました",
"notSupported": "この操作はサポートされていません",
"conflict": "操作が競合しました。しばらくしてからもう一度お試しください"
},
"browser": {
"audioNotSupported": "お使いのブラウザーは音声の再生に対応していません。"
}
}
@@ -0,0 +1,23 @@
{
"operation": {
"saved": "保存しました",
"created": "作成しました",
"updated": "更新しました",
"deleted": "削除しました",
"uploaded": "アップロードしました",
"downloaded": "ダウンロードしました",
"imported": "インポートしました",
"exported": "エクスポートしました",
"copied": "コピーしました",
"sent": "送信しました"
},
"connection": {
"connected": "接続しました",
"authenticated": "ログインしました",
"synchronized": "同期しました"
},
"validation": {
"valid": "検証に成功しました",
"completed": "操作が完了しました"
}
}
@@ -0,0 +1,25 @@
{
"required": "この項目は必須です",
"email": "有効なメールアドレスを入力してください",
"url": "有効な URL を入力してください",
"number": "有効な数値を入力してください",
"min": "最小値は {min} です",
"max": "最大値は {max} です",
"minLength": "{length} 文字以上で入力してください",
"maxLength": "{length} 文字以内で入力してください",
"pattern": "形式が正しくありません",
"unique": "この値はすでに存在します",
"confirm": "入力内容が一致しません",
"fileSize": "ファイルサイズは {size}MB 以下にしてください",
"fileType": "サポートされていないファイル形式です",
"required_field": "必須項目を入力してください",
"invalid_format": "無効な形式です",
"password_too_short": "パスワードは 8 文字以上にしてください",
"password_too_weak": "パスワードの強度が不足しています",
"invalid_phone": "有効な電話番号を入力してください",
"invalid_date": "有効な日付を入力してください",
"date_range": "日付範囲が正しくありません",
"upload_failed": "ファイルのアップロードに失敗しました",
"network_error": "ネットワーク接続エラーが発生しました。もう一度お試しください",
"operation_cannot_be_undone": "⚠️ この操作は元に戻せません。内容を確認してから実行してください。"
}
@@ -12,7 +12,9 @@
"chunks": "фрагм.",
"sessionConfig": "Профиль",
"initError": "Ошибка инициализации",
"retry": "Повторить"
"retry": "Повторить",
"noDescription": "Нет описания",
"switchLegacy": "Перейти к старой версии базы знаний"
},
"card": {
"edit": "Изменить",
@@ -34,7 +36,9 @@
"rerankProviderInfo": "Провайдер: {id}",
"cancel": "Отмена",
"submit": "Создать",
"nameRequired": "Введите название базы знаний"
"nameRequired": "Введите название базы знаний",
"nameChangeHint": "Если позже изменить название базы знаний, его также потребуется обновить в файле конфигурации.",
"embeddingLockedHint": "После выбора модель эмбеддингов изменить нельзя. Чтобы использовать другую модель, создайте новую базу знаний."
},
"edit": {
"title": "Редактирование",
@@ -12,7 +12,9 @@
"chunks": "分块",
"sessionConfig": "会话配置",
"initError": "初始化失败",
"retry": "重试"
"retry": "重试",
"noDescription": "暂无描述",
"switchLegacy": "切换到旧版知识库"
},
"card": {
"edit": "编辑",
@@ -34,7 +36,9 @@
"rerankProviderInfo": "提供商: {id}",
"cancel": "取消",
"submit": "创建",
"nameRequired": "请输入知识库名称"
"nameRequired": "请输入知识库名称",
"nameChangeHint": "后续如修改知识库名称,需同步更新配置文件。",
"embeddingLockedHint": "嵌入模型选择后无法修改,如需更换请创建新的知识库。"
},
"edit": {
"title": "编辑知识库",
+90
View File
@@ -124,6 +124,47 @@ import ruRUErrors from './locales/ru-RU/messages/errors.json';
import ruRUSuccess from './locales/ru-RU/messages/success.json';
import ruRUValidation from './locales/ru-RU/messages/validation.json';
// Japanese translation
import jaJPCommon from './locales/ja-JP/core/common.json';
import jaJPActions from './locales/ja-JP/core/actions.json';
import jaJPStatus from './locales/ja-JP/core/status.json';
import jaJPNavigation from './locales/ja-JP/core/navigation.json';
import jaJPHeader from './locales/ja-JP/core/header.json';
import jaJPShared from './locales/ja-JP/core/shared.json';
import jaJPChat from './locales/ja-JP/features/chat.json';
import jaJPExtension from './locales/ja-JP/features/extension.json';
import jaJPConversation from './locales/ja-JP/features/conversation.json';
import jaJPSessionManagement from './locales/ja-JP/features/session-management.json';
import jaJPToolUse from './locales/ja-JP/features/tool-use.json';
import jaJPProvider from './locales/ja-JP/features/provider.json';
import jaJPPlatform from './locales/ja-JP/features/platform.json';
import jaJPConfig from './locales/ja-JP/features/config.json';
import jaJPConfigMetadata from './locales/ja-JP/features/config-metadata.json';
import jaJPConsole from './locales/ja-JP/features/console.json';
import jaJPTrace from './locales/ja-JP/features/trace.json';
import jaJPAbout from './locales/ja-JP/features/about.json';
import jaJPSettings from './locales/ja-JP/features/settings.json';
import jaJPAuth from './locales/ja-JP/features/auth.json';
import jaJPChart from './locales/ja-JP/features/chart.json';
import jaJPDashboard from './locales/ja-JP/features/dashboard.json';
import jaJPCron from './locales/ja-JP/features/cron.json';
import jaJPStats from './locales/ja-JP/features/stats.json';
import jaJPAlkaidIndex from './locales/ja-JP/features/alkaid/index.json';
import jaJPAlkaidKnowledgeBase from './locales/ja-JP/features/alkaid/knowledge-base.json';
import jaJPAlkaidMemory from './locales/ja-JP/features/alkaid/memory.json';
import jaJPKnowledgeBaseIndex from './locales/ja-JP/features/knowledge-base/index.json';
import jaJPKnowledgeBaseDetail from './locales/ja-JP/features/knowledge-base/detail.json';
import jaJPKnowledgeBaseDocument from './locales/ja-JP/features/knowledge-base/document.json';
import jaJPPersona from './locales/ja-JP/features/persona.json';
import jaJPCommand from './locales/ja-JP/features/command.json';
import jaJPSubagent from './locales/ja-JP/features/subagent.json';
import jaJPWelcome from './locales/ja-JP/features/welcome.json';
import jaJPErrors from './locales/ja-JP/messages/errors.json';
import jaJPSuccess from './locales/ja-JP/messages/success.json';
import jaJPValidation from './locales/ja-JP/messages/validation.json';
// 组装翻译对象
export const translations = {
'zh-CN': {
@@ -272,6 +313,55 @@ export const translations = {
success: ruRUSuccess,
validation: ruRUValidation
}
},
'ja-JP': {
core: {
common: jaJPCommon,
actions: jaJPActions,
status: jaJPStatus,
navigation: jaJPNavigation,
header: jaJPHeader,
shared: jaJPShared
},
features: {
chat: jaJPChat,
extension: jaJPExtension,
conversation: jaJPConversation,
'session-management': jaJPSessionManagement,
tooluse: jaJPToolUse,
provider: jaJPProvider,
platform: jaJPPlatform,
config: jaJPConfig,
'config-metadata': jaJPConfigMetadata,
console: jaJPConsole,
trace: jaJPTrace,
about: jaJPAbout,
settings: jaJPSettings,
auth: jaJPAuth,
chart: jaJPChart,
dashboard: jaJPDashboard,
cron: jaJPCron,
stats: jaJPStats,
alkaid: {
index: jaJPAlkaidIndex,
'knowledge-base': jaJPAlkaidKnowledgeBase,
memory: jaJPAlkaidMemory
},
'knowledge-base': {
index: jaJPKnowledgeBaseIndex,
detail: jaJPKnowledgeBaseDetail,
document: jaJPKnowledgeBaseDocument
},
persona: jaJPPersona,
command: jaJPCommand,
subagent: jaJPSubagent,
welcome: jaJPWelcome
},
messages: {
errors: jaJPErrors,
success: jaJPSuccess,
validation: jaJPValidation
}
}
};
+1 -1
View File
@@ -7,7 +7,7 @@ import type { ValidationResult, ValidationError, UsageReport, TranslationStats }
export class I18nValidator {
private baseLocale: string = 'zh-CN';
private supportedLocales: string[] = ['zh-CN', 'en-US'];
private supportedLocales: string[] = ['zh-CN', 'en-US', 'ru-RU', 'ja-JP'];
/**
* 验证翻译完整性
+3 -3
View File
@@ -658,9 +658,9 @@ const openExternalLink = (url) => {
};
const openFaqLink = () => {
openExternalLink(locale.value === 'en-US'
? 'https://docs.astrbot.app/en/faq.html'
: 'https://docs.astrbot.app/faq.html');
openExternalLink(locale.value.startsWith('zh-')
? 'https://docs.astrbot.app/faq.html'
: 'https://docs.astrbot.app/en/faq.html');
};
const resourceItems = computed(() => [
@@ -253,10 +253,11 @@
import { ref, computed, onMounted } from 'vue'
import { useRoute } from 'vue-router'
import { knowledgeApi } from '@/api/v1'
import { useModuleI18n } from '@/i18n/composables'
import { useI18n, useModuleI18n } from '@/i18n/composables'
import { askForConfirmation, useConfirmDialog } from '@/utils/confirmDialog'
const { tm: t } = useModuleI18n('features/knowledge-base/document')
const { locale } = useI18n()
const route = useRoute()
const confirmDialog = useConfirmDialog()
@@ -426,7 +427,7 @@ const formatFileSize = (bytes: number) => {
const formatDate = (dateStr: string) => {
if (!dateStr) return '-'
return new Date(dateStr).toLocaleString('zh-CN', {
return new Date(dateStr).toLocaleString(locale.value, {
year: 'numeric',
month: '2-digit',
day: '2-digit',
@@ -167,12 +167,13 @@
import { ref, onMounted, watch } from 'vue'
import { useRoute } from 'vue-router'
import { knowledgeApi } from '@/api/v1'
import { useModuleI18n } from '@/i18n/composables'
import { useI18n, useModuleI18n } from '@/i18n/composables'
import DocumentsTab from './components/DocumentsTab.vue'
import RetrievalTab from './components/RetrievalTab.vue'
import SettingsTab from './components/SettingsTab.vue'
const { tm: t } = useModuleI18n('features/knowledge-base/detail')
const { locale } = useI18n()
const route = useRoute()
const emit = defineEmits<{
@@ -224,7 +225,7 @@ const loadKB = async () => {
const formatDate = (dateStr: string) => {
if (!dateStr) return '-'
const date = new Date(dateStr)
return date.toLocaleString('zh-CN', {
return date.toLocaleString(locale.value, {
year: 'numeric',
month: '2-digit',
day: '2-digit',
@@ -38,7 +38,7 @@
</template>
<div v-if="!kb.init_error" class="kb-description text-body-2 text-medium-emphasis">
{{ kb.description || '暂无描述' }}
{{ kb.description || t('list.noDescription') }}
</div>
<div v-if="kb.init_error" class="kb-error-panel">
@@ -163,7 +163,7 @@
<v-form ref="formRef" @submit.prevent="submitForm">
<v-text-field v-model="formData.kb_name" :label="t('create.nameLabel')"
:placeholder="t('create.namePlaceholder')" variant="outlined"
:rules="[v => !!v || t('create.nameRequired')]" required class="mb-4" hint="后续如修改知识库名称,需重新在配置文件更新。" persistent-hint />
:rules="[v => !!v || t('create.nameRequired')]" required class="mb-4" :hint="t('create.nameChangeHint')" persistent-hint />
<v-textarea v-model="formData.description" :label="t('create.descriptionLabel')"
:placeholder="t('create.descriptionPlaceholder')" variant="outlined" rows="3" class="mb-4" />
@@ -172,7 +172,7 @@
:item-title="item => item.embedding_model || item.id" :item-value="'id'"
:label="t('create.embeddingModelLabel')" variant="outlined" class="mb-4" :disabled="editingKB !== null"
:rules="[v => editingKB !== null || !!v || t('create.embeddingModelRequired')]" required
hint="嵌入模型选择后无法修改,如需更换请创建新的知识库。" persistent-hint>
:hint="t('create.embeddingLockedHint')" persistent-hint>
<template #item="{ props, item }">
<v-list-item v-bind="props">
<template #subtitle>
@@ -268,7 +268,7 @@
</v-snackbar>
<div class="position-absolute" style="bottom: 0px; right: 16px;">
<small @click="router.push('/alkaid/knowledge-base')"><a style="text-decoration: underline; cursor: pointer;">切换到旧版知识库</a></small>
<small @click="router.push('/alkaid/knowledge-base')"><a style="text-decoration: underline; cursor: pointer;">{{ t('list.switchLegacy') }}</a></small>
</div>
</div>
@@ -241,9 +241,10 @@ import TavilyKeyDialog from './TavilyKeyDialog.vue'
import { ref, watch, onMounted, onUnmounted, computed } from 'vue'
import { useRouter } from 'vue-router'
import { configProfileApi, knowledgeApi, providerApi } from '@/api/v1'
import { useModuleI18n } from '@/i18n/composables'
import { useI18n, useModuleI18n } from '@/i18n/composables'
const { tm: t } = useModuleI18n('features/knowledge-base/detail')
const { locale } = useI18n()
const router = useRouter()
const props = defineProps<{
@@ -762,7 +763,7 @@ const formatFileSize = (bytes: number) => {
const formatDate = (dateStr: string) => {
if (!dateStr) return '-'
return new Date(dateStr).toLocaleString('zh-CN', {
return new Date(dateStr).toLocaleString(locale.value, {
year: 'numeric',
month: '2-digit',
day: '2-digit',