diff --git a/web/src/app/home/components/home-sidebar/HomeSidebar.module.css b/web/src/app/home/components/home-sidebar/HomeSidebar.module.css
index 5cf2a505..d525d495 100644
--- a/web/src/app/home/components/home-sidebar/HomeSidebar.module.css
+++ b/web/src/app/home/components/home-sidebar/HomeSidebar.module.css
@@ -65,7 +65,7 @@
}
.sidebarChildContainer {
- width: 9rem;
+ width: 9.8rem;
height: 3rem;
padding-left: 1.6rem;
font-size: 1rem;
diff --git a/web/src/app/login/page.tsx b/web/src/app/login/page.tsx
index 68db5a0a..9d4b3a17 100644
--- a/web/src/app/login/page.tsx
+++ b/web/src/app/login/page.tsx
@@ -64,6 +64,9 @@ export default function Login() {
if (i18n.language === 'zh-CN' || i18n.language === 'zh-Hans') {
setCurrentLanguage('zh-Hans');
localStorage.setItem('langbot_language', 'zh-Hans');
+ } else if (i18n.language === 'ja' || i18n.language === 'ja-JP') {
+ setCurrentLanguage('ja-JP');
+ localStorage.setItem('langbot_language', 'ja-JP');
} else {
setCurrentLanguage('en-US');
localStorage.setItem('langbot_language', 'en-US');
@@ -80,6 +83,8 @@ export default function Login() {
let lang = 'zh-Hans';
if (language === 'zh-CN') {
lang = 'zh-Hans';
+ } else if (language === 'ja' || language === 'ja-JP') {
+ lang = 'ja-JP';
} else {
lang = 'en-US';
}
@@ -159,6 +164,7 @@ export default function Login() {
简体中文
English
+ 日本語
diff --git a/web/src/app/register/page.tsx b/web/src/app/register/page.tsx
index 59dfc89d..d885f3b0 100644
--- a/web/src/app/register/page.tsx
+++ b/web/src/app/register/page.tsx
@@ -63,6 +63,9 @@ export default function Register() {
if (i18n.language === 'zh-CN' || i18n.language === 'zh-Hans') {
setCurrentLanguage('zh-Hans');
localStorage.setItem('langbot_language', 'zh-Hans');
+ } else if (i18n.language === 'ja' || i18n.language === 'ja-JP') {
+ setCurrentLanguage('ja-JP');
+ localStorage.setItem('langbot_language', 'ja-JP');
} else {
setCurrentLanguage('en-US');
localStorage.setItem('langbot_language', 'en-US');
@@ -79,6 +82,8 @@ export default function Register() {
let lang = 'zh-Hans';
if (language === 'zh-CN') {
lang = 'zh-Hans';
+ } else if (language === 'ja' || language === 'ja-JP') {
+ lang = 'ja-JP';
} else {
lang = 'en-US';
}
@@ -144,6 +149,7 @@ export default function Register() {
简体中文
English
+ 日本語
diff --git a/web/src/i18n/index.ts b/web/src/i18n/index.ts
index a8e16152..fd8f5c7c 100644
--- a/web/src/i18n/index.ts
+++ b/web/src/i18n/index.ts
@@ -6,6 +6,7 @@ import LanguageDetector from 'i18next-browser-languagedetector';
import enUS from './locales/en-US';
import zhHans from './locales/zh-Hans';
+import jaJP from './locales/ja-JP';
i18n
.use(LanguageDetector)
@@ -18,6 +19,9 @@ i18n
'zh-Hans': {
translation: zhHans,
},
+ 'ja-JP': {
+ translation: jaJP,
+ },
},
fallbackLng: 'zh-Hans',
debug: process.env.NODE_ENV === 'development',
diff --git a/web/src/i18n/locales/ja-JP.ts b/web/src/i18n/locales/ja-JP.ts
new file mode 100644
index 00000000..f0003f90
--- /dev/null
+++ b/web/src/i18n/locales/ja-JP.ts
@@ -0,0 +1,239 @@
+const jaJP = {
+ common: {
+ login: 'ログイン',
+ logout: 'ログアウト',
+ email: 'メールアドレス',
+ password: 'パスワード',
+ welcome: 'LangBot へおかえりなさい 👋',
+ continueToLogin: 'ログインしてください',
+ loginSuccess: 'ログインに成功しました',
+ loginFailed:
+ 'ログインに失敗しました。メールアドレスまたはパスワードをご確認ください',
+ enterEmail: 'メールアドレスを入力',
+ enterPassword: 'パスワードを入力',
+ invalidEmail: '有効なメールアドレスを入力してください',
+ emptyPassword: 'パスワードを入力してください',
+ language: '言語',
+ helpDocs: 'ヘルプドキュメント',
+ create: '作成',
+ edit: '編集',
+ delete: '削除',
+ add: '追加',
+ select: '選択してください',
+ cancel: 'キャンセル',
+ submit: '送信',
+ error: 'エラー',
+ success: '成功',
+ save: '保存',
+ saving: '保存中...',
+ confirm: '確認',
+ confirmDelete: '削除の確認',
+ deleteConfirmation: '本当に削除しますか?',
+ selectOption: 'オプションを選択',
+ required: '必須',
+ enable: '有効にする',
+ name: '名前',
+ description: '説明',
+ close: '閉じる',
+ deleteSuccess: '削除に成功しました',
+ deleteError: '削除に失敗しました:',
+ addRound: 'ラウンドを追加',
+ copySuccess: 'コピーに成功しました',
+ test: 'テスト',
+ },
+ notFound: {
+ title: 'ページが見つかりません',
+ description:
+ 'お探しのページは存在しないようです。入力したURLが正しいか確認するか、ホームページに戻ってください。',
+ back: '戻る',
+ home: 'ホームに戻る',
+ help: 'ヘルプドキュメントを見る',
+ },
+ models: {
+ title: 'モデル設定',
+ description: 'パイプラインで使用できるモデルを設定・管理',
+ createModel: 'モデルを作成',
+ editModel: 'モデルを編集',
+ getModelListError: 'モデルリストの取得に失敗しました:',
+ modelName: 'モデル名',
+ modelProvider: 'モデルプロバイダー',
+ modelBaseURL: 'ベースURL',
+ modelAbilities: 'モデル機能',
+ saveSuccess: '保存に成功しました',
+ saveError: '保存に失敗しました:',
+ createSuccess: '作成に成功しました',
+ createError: '作成に失敗しました:',
+ deleteSuccess: '削除に成功しました',
+ deleteError: '削除に失敗しました:',
+ deleteConfirmation: '本当にこのモデルを削除しますか?',
+ modelNameRequired: 'モデル名は必須です',
+ modelProviderRequired: 'モデルプロバイダーは必須です',
+ requestURLRequired: 'リクエストURLは必須です',
+ apiKeyRequired: 'APIキーは必須です',
+ keyNameRequired: 'キー名は必須です',
+ mustBeValidNumber: '有効な数値である必要があります',
+ mustBeTrueOrFalse: 'true または false である必要があります',
+ requestURL: 'リクエストURL',
+ apiKey: 'APIキー',
+ abilities: '機能',
+ selectModelAbilities: 'モデル機能を選択',
+ visionAbility: '視覚機能',
+ functionCallAbility: '関数呼び出し',
+ extraParameters: '追加パラメータ',
+ addParameter: 'パラメータを追加',
+ keyName: 'キー名',
+ type: 'タイプ',
+ value: '値',
+ string: '文字列',
+ number: '数値',
+ boolean: 'ブール値',
+ extraParametersDescription:
+ 'リクエストボディに追加されるパラメータ(max_tokens、temperature、top_p など)',
+ selectModelProvider: 'モデルプロバイダーを選択',
+ modelProviderDescription: 'プロバイダーが提供するモデル名をご入力ください',
+ selectModel: 'モデルを選択してください',
+ testSuccess: 'テストに成功しました',
+ testError: 'テストに失敗しました。モデル設定を確認してください',
+ },
+ bots: {
+ title: 'ボット',
+ description:
+ 'ボットの作成と管理を行います。LangBotと各プラットフォームを接続するためのエントリーポイントです',
+ createBot: 'ボットを作成',
+ editBot: 'ボットを編集',
+ getBotListError: 'ボットリストの取得に失敗しました:',
+ botName: 'ボット名',
+ botDescription: 'ボットの説明',
+ botNameRequired: 'ボット名は必須です',
+ botDescriptionRequired: 'ボットの説明は必須です',
+ adapterRequired: 'アダプターは必須です',
+ defaultDescription: 'ボット',
+ getBotConfigError: 'ボット設定の取得に失敗しました:',
+ saveSuccess: '保存に成功しました',
+ saveError: '保存に失敗しました:',
+ createSuccess:
+ '作成が完了しました。有効化するか、パイプラインの設定を行ってください',
+ createError: '作成に失敗しました:',
+ deleteSuccess: '削除に成功しました',
+ deleteError: '削除に失敗しました:',
+ deleteConfirmation: '本当にこのボットを削除しますか?',
+ platformAdapter: 'プラットフォーム/アダプター選択',
+ selectAdapter: 'アダプターを選択',
+ adapterConfig: 'アダプター設定',
+ bindPipeline: 'パイプラインを紐付け',
+ selectPipeline: 'パイプラインを選択',
+ botLogTitle: 'ボットログ',
+ enableAutoRefresh: '自動更新を有効にする',
+ session: 'セッション',
+ yesterday: '昨日',
+ earlier: 'それ以前',
+ dateFormat: '{{month}}月{{day}}日',
+ setBotEnableError: 'ボットの有効状態の設定に失敗しました',
+ log: 'ログ',
+ },
+ plugins: {
+ title: 'プラグイン',
+ description: 'LangBotの機能を拡張するプラグインをインストール・設定',
+ createPlugin: 'プラグインを作成',
+ editPlugin: 'プラグインを編集',
+ installed: 'インストール済み',
+ marketplace: 'プラグインマーケット',
+ arrange: '並び替え',
+ install: 'インストール',
+ installFromGithub: 'GitHubからプラグインをインストール',
+ onlySupportGithub: '現在はGitHubからのインストールのみサポートしています',
+ enterGithubLink: 'プラグインのGitHubリンクを入力してください',
+ installing: 'プラグインをインストール中...',
+ installSuccess: 'プラグインのインストールに成功しました',
+ installFailed: 'プラグインのインストールに失敗しました:',
+ searchPlugin: 'プラグインを検索',
+ sortBy: '並び順',
+ mostStars: 'スター数順',
+ recentlyAdded: '最近追加',
+ recentlyUpdated: '最近更新',
+ noMatchingPlugins: '一致するプラグインが見つかりません',
+ loading: '読み込み中...',
+ getPluginListError: 'プラグインリストの取得に失敗しました:',
+ noPluginInstalled: 'プラグインがインストールされていません',
+ pluginConfig: 'プラグイン設定',
+ pluginSort: 'プラグインの並び替え',
+ pluginSortDescription:
+ 'プラグインの順序は、同一イベント内での処理順序に影響します。カードをドラッグして並び替えが可能です',
+ pluginSortSuccess: 'プラグインの並び替えに成功しました',
+ pluginSortError: 'プラグインの並び替えに失敗しました:',
+ pluginNoConfig: 'プラグインに設定項目がありません。',
+ deleting: '削除中...',
+ deletePlugin: 'プラグインを削除',
+ cancel: 'キャンセル',
+ saveConfig: '設定を保存',
+ saving: '保存中...',
+ confirmDeletePlugin:
+ 'プラグイン「{{author}}/{{name}}」を削除してもよろしいですか?',
+ confirmDelete: '削除を確認',
+ deleteError: '削除に失敗しました:',
+ close: '閉じる',
+ deleteConfirm: '削除の確認',
+ modifyFailed: '変更に失敗しました:',
+ eventCount: 'イベント:{{count}}',
+ toolCount: 'ツール:{{count}}',
+ starCount: 'スター:{{count}}',
+ },
+ pipelines: {
+ title: 'パイプライン',
+ description:
+ 'メッセージイベントの処理フローを定義し、ボットに紐付けて使用するパイプラインです',
+ createPipeline: 'パイプラインを作成',
+ editPipeline: 'パイプラインを編集',
+ chat: 'チャット',
+ getPipelineListError: 'パイプラインリストの取得に失敗しました:',
+ daysAgo: '日前',
+ today: '今日',
+ updateTime: '更新日時',
+ defaultBadge: 'デフォルト',
+ basicInfo: '基本情報',
+ aiCapabilities: 'AI機能',
+ triggerConditions: 'トリガー条件',
+ safetyControls: '安全制御',
+ outputProcessing: '出力処理',
+ nameRequired: '名前は必須です',
+ descriptionRequired: '説明は必須です',
+ createSuccess:
+ '作成が完了しました。パイプラインの詳細パラメータを設定してください',
+ createError: '作成に失敗しました:',
+ saveSuccess: '保存に成功しました',
+ saveError: '保存に失敗しました:',
+ deleteConfirmation:
+ '本当にこのパイプラインを削除しますか?このパイプラインに紐付けられたボットは動作しなくなります。',
+ defaultPipelineCannotDelete: 'デフォルトパイプラインは削除できません',
+ debugDialog: {
+ title: 'パイプラインのチャット',
+ selectPipeline: 'パイプラインを選択',
+ sessionType: 'セッションタイプ',
+ privateChat: 'プライベートチャット',
+ groupChat: 'グループチャット',
+ send: '送信',
+ reset: '会話をリセット',
+ inputPlaceholder: 'メッセージを入力...',
+ noMessages: 'メッセージがありません',
+ userMessage: 'ユーザー',
+ botMessage: 'ボット',
+ sendFailed: '送信に失敗しました',
+ resetSuccess: '会話がリセットされました',
+ resetFailed: 'リセットに失敗しました',
+ loadMessagesFailed: 'メッセージの読み込みに失敗しました',
+ loadPipelinesFailed: 'パイプラインの読み込みに失敗しました',
+ atTips: 'ボットをメンション',
+ },
+ },
+ register: {
+ title: 'LangBot を初期化 👋',
+ description: 'これはLangBotの初回起動です',
+ adminAccountNote:
+ '入力したメールアドレスとパスワードが初期管理者アカウントになります',
+ register: '登録',
+ initSuccess: '初期化に成功しました。ログインしてください',
+ initFailed: '初期化に失敗しました:',
+ },
+};
+
+export default jaJP;