From d7250ead32938c4d9c23327d88f37b0adbe91894 Mon Sep 17 00:00:00 2001 From: Nicolas Varrot Date: Sat, 14 Feb 2026 17:53:48 +0000 Subject: [PATCH] feat: add Japanese (ja) locale support --- src/lib/i18n.ts | 153 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 152 insertions(+), 1 deletion(-) diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index 9319b97..33bbda8 100644 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -625,7 +625,157 @@ const de: Record = { 'slash.help': 'Verfügbare Befehle anzeigen', }; -const messages: Record> = { en, fr, es, de }; +const ja: Record = { + 'login.title': 'PinchChat', + 'login.subtitle': 'OpenClawゲートウェイに接続', + 'login.gatewayUrl': 'ゲートウェイURL', + 'login.token': 'トークン', + 'login.tokenPlaceholder': 'ゲートウェイトークンを入力', + 'login.connect': '接続', + 'login.connecting': '接続中…', + 'login.showToken': 'トークンを表示', + 'login.hideToken': 'トークンを非表示', + 'login.storedLocally': '認証情報はブラウザにローカル保存されます', + 'login.wsHint': 'URLはws://またはwss://で始まる必要があります', + + 'header.title': 'PinchChat', + 'header.connected': '接続済み', + 'header.disconnected': '切断', + 'header.logout': 'ログアウト', + 'header.toggleSidebar': 'サイドバーの表示切替', + 'header.changeLanguage': '言語を変更', + 'header.soundOn': '通知音を有効にする', + 'header.soundOff': '通知音を無効にする', + + 'chat.welcome': 'PinchChat', + 'chat.welcomeSub': 'メッセージを送信して始めましょう', + 'chat.suggestions': '例えば…', + 'chat.suggestion1': '最近のメールをまとめて', + 'chat.suggestion2': '今日のカレンダーは?', + 'chat.suggestion3': '最新ニュースをウェブで検索して', + 'chat.suggestion4': 'スクリプトを書くのを手伝って', + 'chat.loadingHistory': 'メッセージを読み込み中…', + 'chat.inputPlaceholder': 'メッセージを入力…', + 'chat.inputLabel': 'メッセージ', + 'chat.attachFile': 'ファイルを添付', + 'chat.send': '送信', + 'chat.stop': '停止', + 'chat.showPreview': 'Markdownプレビュー', + 'chat.hidePreview': 'プレビューを非表示', + 'chat.scrollToBottom': '新しいメッセージ', + 'chat.scrollDown': '一番下へスクロール', + 'chat.collapseTools': 'すべてのツールを折りたたむ', + 'chat.expandTools': 'すべてのツールを展開', + 'chat.messages': 'チャットメッセージ', + 'chat.thinking': '思考中…', + + 'sidebar.title': 'セッション', + 'sidebar.empty': 'セッションなし', + 'sidebar.search': 'セッションを検索…', + 'sidebar.noResults': '結果なし', + 'sidebar.pin': 'セッションをピン留め', + 'sidebar.unpin': 'ピン留めを解除', + 'sidebar.pinned': 'ピン留め', + 'sidebar.delete': 'セッションを削除', + 'sidebar.deleteConfirm': 'このセッションを削除しますか?元に戻せません。', + 'sidebar.deleteCancel': 'キャンセル', + 'sidebar.openSplit': '分割ビューで開く', + 'sidebar.close': 'サイドバーを閉じる', + 'sidebar.clearSearch': '検索をクリア', + 'sidebar.filterAll': 'すべて', + 'sidebar.filterActive': 'アクティブ', + 'split.close': '分割ビューを閉じる', + 'app.mainChat': 'メインチャット', + 'app.splitPane': '分割ペイン', + 'app.skipToChat': '入力欄へ移動', + + 'thinking.label': '思考', + 'thinking.reasoning': '推論中…', + + 'tool.parameters': 'パラメータ', + 'tool.result': '結果', + + 'connection.reconnecting': '接続が切断されました — 再接続中…', + 'connection.reconnected': '再接続しました!', + + 'message.copy': 'メッセージをコピー', + 'message.copied': 'コピーしました!', + 'message.retry': 'メッセージを再送信', + 'message.metadata': 'メッセージの詳細', + 'message.rawJson': '生JSON', + 'message.hideRawJson': '生JSONを非表示', + + 'time.yesterday': '昨日', + 'time.today': '今日', + + 'shortcuts.title': 'キーボードショートカット', + 'shortcuts.send': 'メッセージを送信', + 'shortcuts.newline': '改行', + 'shortcuts.search': 'セッションを検索', + 'shortcuts.switchSession': '前 / 次のセッション', + 'shortcuts.closeSidebar': 'サイドバー / 検索を閉じる', + 'shortcuts.stop': '生成を停止', + 'shortcuts.help': 'ショートカットを表示', + 'shortcuts.close': '閉じる', + 'shortcuts.chatSection': 'チャット', + + 'error.title': 'エラーが発生しました', + 'error.description': 'インターフェースの表示中に予期しないエラーが発生しました。再試行するかページをリロードしてください。', + 'error.retry': '再試行', + 'error.reload': 'ページをリロード', + 'shortcuts.navigationSection': 'ナビゲーション', + 'shortcuts.generalSection': '全般', + + 'header.export': '会話をMarkdownでエクスポート', + 'header.compact': 'コンパクト化', + 'header.compacting': 'コンパクト化中…', + 'header.sessionInfo': 'セッション情報', + 'sessionInfo.sessionKey': 'セッションキー', + 'sessionInfo.channel': 'チャンネル', + 'sessionInfo.kind': '種類', + 'sessionInfo.model': 'モデル', + 'sessionInfo.agent': 'エージェント', + 'sessionInfo.messages': 'メッセージ', + 'sessionInfo.totalTokens': '合計トークン', + 'sessionInfo.inputTokens': '入力', + 'sessionInfo.outputTokens': '出力', + 'sessionInfo.contextWindow': 'コンテキスト', + 'sessionInfo.lastActive': '最終アクティブ', + + 'theme.title': 'テーマ', + 'theme.mode': 'モード', + 'theme.accent': 'アクセント', + 'theme.system': 'システム', + 'theme.dark': 'ダーク', + 'theme.light': 'ライト', + 'theme.oled': 'OLED', + + 'search.placeholder': 'メッセージを検索…', + 'search.noResults': '0件', + 'search.prev': '前の結果', + 'search.next': '次の結果', + 'shortcuts.searchMessages': 'メッセージを検索', + + 'settings.sendShortcut': '送信キー', + 'settings.sendEnter': 'Enter', + 'settings.sendCtrlEnter': 'Ctrl+Enter', + + 'message.bookmark': 'メッセージをブックマーク', + 'message.removeBookmark': 'ブックマークを削除', + 'chat.bookmarks': 'ブックマーク', + 'chat.export': '会話をエクスポート', + 'chat.contextCompacted': 'コンテキストがコンパクト化されました — 古いメッセージはローカルキャッシュに保存', + 'slash.commands': 'コマンド', + 'slash.status': 'セッションのステータスと使用量を表示', + 'slash.reasoning': '推論モードの切替', + 'slash.verbose': '詳細出力の切替', + 'slash.model': 'このセッションのモデルを変更', + 'slash.compact': '会話コンテキストをコンパクト化', + 'slash.reset': 'セッションをリセット', + 'slash.help': '利用可能なコマンドを表示', +}; + +const messages: Record> = { en, fr, es, de, ja }; export const supportedLocales = Object.keys(messages) as string[]; @@ -635,6 +785,7 @@ export const localeLabels: Record = { fr: 'FR', es: 'ES', de: 'DE', + ja: 'JA', }; function resolveInitialLocale(): string {