diff --git a/src/components/settings-page.tsx b/src/components/settings-page.tsx index 92b66ed..c50beca 100644 --- a/src/components/settings-page.tsx +++ b/src/components/settings-page.tsx @@ -139,7 +139,7 @@ export function SettingsPage({ setActiveSection(section); document.getElementById(sectionId)?.scrollIntoView?.({ block: "start", behavior: "smooth" }); }} - className={`whitespace-nowrap rounded-md px-3 py-2 text-left text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 focus:ring-offset-background ${ + className={`min-w-0 whitespace-normal break-words rounded-md px-3 py-2 text-left text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 focus:ring-offset-background ${ selected ? "bg-indigo-600 text-white shadow-sm" : "text-muted-foreground hover:bg-muted hover:text-foreground" @@ -174,6 +174,7 @@ export function SettingsPage({ {t("settings.lang_en")} {t("settings.lang_zh")} + {t("settings.lang_ja")} diff --git a/src/i18n.ts b/src/i18n.ts index b33e381..684c40a 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -2,12 +2,13 @@ import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import en from "./locales/en.json"; import zh from "./locales/zh.json"; +import ja from "./locales/ja.json"; // Initialize language from localStorage or navigator language const getInitialLanguage = (): string => { try { const saved = localStorage.getItem("language"); - if (saved === "zh" || saved === "en") { + if (saved === "zh" || saved === "ja" || saved === "en") { return saved; } } catch (e) { @@ -19,6 +20,9 @@ const getInitialLanguage = (): string => { if (browserLang.toLowerCase().includes("zh")) { return "zh"; } + if (browserLang.toLowerCase().startsWith("ja")) { + return "ja"; + } return "en"; }; @@ -28,6 +32,7 @@ void i18n resources: { en: { translation: en }, zh: { translation: zh }, + ja: { translation: ja }, }, lng: getInitialLanguage(), fallbackLng: "en", diff --git a/src/locales/en.json b/src/locales/en.json index dbc86c9..3726743 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -68,6 +68,7 @@ "title": "Codex Token Usage", "subtitle": "Local developer token tracking and cost estimator.", "last_updated": "Last updated {{time}}", + "updated_today": "Today at {{time}}", "last_updated_never": "Never updated", "rescan_duration": "Rescan completed in {{duration}}", "refresh": "Refresh", @@ -586,6 +587,7 @@ "language_label": "App Language", "lang_en": "English", "lang_zh": "简体中文", + "lang_ja": "日本語", "menu_bar_title": "Menu Bar / System Tray Settings", "menu_bar_desc": "Configure metrics for the macOS menu bar title, Windows tray tooltip, and tray menu.", "menu_bar_show_title": "Show in Menu Bar / Tray Tooltip", diff --git a/src/locales/ja.json b/src/locales/ja.json new file mode 100644 index 0000000..fed6885 --- /dev/null +++ b/src/locales/ja.json @@ -0,0 +1,671 @@ +{ + "common": { + "dashboard": "ダッシュボード", + "model": "モデル", + "daily": "日別", + "project": "プロジェクト", + "monthly": "月別", + "sessions": "セッション", + "settings": "設定", + "logs": "ログ", + "loading": "読み込み中", + "error": "エラー", + "close": "閉じる", + "search": "検索", + "clear": "クリア", + "actions": "操作", + "date": "日付", + "tokens": "トークン", + "cost": "料金", + "cache": "キャッシュ", + "path": "パス", + "mode": "モード", + "type": "種類", + "session": "セッション", + "time": "時刻", + "command": "コマンド", + "percent": "割合" + }, + "header": { + "app_title": "Codex Usage Desktop", + "upgrade": "v{{version}} に更新", + "downloading_update": "ダウンロード中...", + "downloading_update_progress": "{{percent}}% をダウンロード中", + "restart_update": "更新するには再起動してください", + "upgrade_title": "クリックしてアプリケーションをアップグレードします" + }, + "update": { + "new_version": "新しいバージョンが利用可能: v{{version}}", + "latest_badge": "最新", + "banner_text": "Codex Usage Desktop の新しいバージョンが準備できました。現在 v{{currentVersion}} を使用しています。", + "hide_release_notes": "リリースノートを非表示にする", + "view_release_notes": "リリースノートを見る", + "upgrade_now": "今すぐアップグレード", + "downloading": "ダウンロード中...", + "downloading_progress": "{{percent}}% をダウンロード中", + "restart_now": "再起動して更新", + "view_release": "リリースを見る", + "dismiss_aria": "更新通知を閉じる", + "rate_limit_error": "GitHub API レート制限を超過したか、ネットワーク タイムアウトになりました。リリース ページで更新ログを確認し、最新バージョンをダウンロードしてください。" + }, + "error": { + "sync_failed": "データ同期に失敗しました" + }, + "loading": { + "preparing_cache": "ローカルキャッシュの準備", + "loading_range": "{{range}} を読み込み中", + "loading_monthly": "月別使用量を読み込み中", + "loading_sessions": "セッションの詳細を読み込み中", + "cached_snapshot_desc": "キャッシュ済みのダッシュボードスナップショットを読み込み中です。", + "selected_window_desc": "選択した期間の使用量とコストを読み込み中です。", + "natural_month_desc": "自然月の合計を集計します。", + "session_logs_desc": "個々のセッション ログを解析します。", + "reading_sessions": "セッションを読み込み中", + "aggregating_tokens": "トークンの集約", + "estimating_cost": "コストを推定中" + }, + "hero": { + "title": "Codex トークン使用量", + "subtitle": "ローカル開発者トークンの追跡とコスト見積もり。", + "last_updated": "最終更新日 {{time}}", + "updated_today": "本日 {{time}}", + "last_updated_never": "未更新", + "rescan_duration": "再スキャン所要時間: {{duration}}", + "refresh": "リフレッシュ", + "refreshing": "更新中...", + "export": "エクスポート", + "exporting": "エクスポート中...", + "export_excel": "エクセル(.xlsx)", + "export_markdown": "マークダウン (.md)", + "overview_label": "概要", + "rescan": "ローカルログを再スキャンする", + "cache_synced": "キャッシュが同期されました", + "out_of_sync": "同期が取れていない", + "total_cost_label": "総コスト", + "cost_drivers": "コスト要因", + "sync_logs_to_cache_desc": "ローカルログをキャッシュに同期する", + "synced_message": "{{days}}日分を同期(キャッシュ再利用{{reused}}件、解析{{parsed}}件)", + "resetting_message": "ローカル キャッシュをリセットし、使用状況データを再構築します。", + "reset_rebuilt_message": "ローカル キャッシュをリセットし、ローカル Codex ログから使用状況データを再構築します。", + "exported_message": "{{range}} を {{path}} にエクスポートしました。" + }, + "metrics": { + "tokens": { + "label": "トークンの内訳", + "detail": "{{days}} 日合計" + }, + "average": { + "label": "平均/日", + "detail": "1日あたりのトークンとコスト" + }, + "cache": { + "label": "キャッシュヒット", + "detail": "{{tokens}} キャッシュされたトークン" + }, + "costPerMillion": { + "label": "コスト/100万", + "detail": "100万トークンあたりの加重平均コスト" + } + }, + "limits": { + "title": "Codexの利用上限", + "description": "ローカルCodex CLIから取得したアカウントのリアルタイム利用上限。", + "updated": "最終更新: {{time}}", + "not_fetched": "まだ取得されていません", + "not_logged_in": "ログインしていません", + "login_instruction": "ライブレート制限を表示するには、ターミナルでログインコマンドを実行するか、ブラウザ/IDE 拡張機能を介して Codex を認証してください。", + "click_to_select": "クリックして選択してください", + "login_hint": "ヒント: ターミナルで上記のコマンドを実行するか、ブラウザ/IDE 拡張機能を介して Codex アカウントにログインしてください。", + "unavailable_reason": "現在Codexの利用上限を取得できません。ネットワークとCodexへのログイン状態を確認して、もう一度お試しください。", + "window_5hour": "5時間制限", + "window_weekly": "週間制限", + "window_monthly": "月間利用制限", + "unavailable": "利用不可", + "no_window_returned": "Codexからレート制限ウィンドウが返されませんでした。", + "remaining": "残り", + "consumed": "使用済み", + "window": "期間", + "reset_credits": "リセットクレジット", + "reset_credits_open": "ChatGPT でリセット クレジットを開く", + "reset_credits_toggle": "リセットクレジットの有効期限詳細を表示/非表示", + "reset_credits_available": "{{count}}件利用可能", + "reset_credit_number": "クレジット {{index}}", + "reset_credit_expires_at": "有効期限 {{date}}", + "reset_credit_time_left": "{{timeLeft}}", + "reset_credit_no_expiry": "有効期限はありません", + "reset_credits_details_partial": "{{count}} 個以上のクレジットについて有効期限の詳細が返されませんでした", + "reset_credits_details_unavailable": "有効期限の詳細は一時的に利用できません", + "reset_credits_none": "利用可能なリセット クレジットはありません", + "left": "残り", + "status_near_limit": "上限間近", + "status_moderate": "中程度", + "status_healthy": "余裕あり", + "reset_unavailable": "リセット不可", + "resetting_soon": "まもなくリセット", + "reset_at": "{{time}} ({{timeLeft}}) でリセット", + "resets_at": "{{time}} にリセット ({{timeLeft}})", + "mins_left_one": "残り 1 分", + "mins_left_other": "残り {{count}} 分", + "hours_left_one": "残り1時間", + "hours_left_other": "残り {{count}} 時間", + "days_left_one": "残り1日", + "days_left_other": "残り {{count}} 日", + "window_min": "{{count}} 分", + "window_hours": "{{count}} 時間", + "window_days": "{{count}} 日", + "window_unknown": "不明", + "subscription_expires": "有効期限 {{date}} ({{timeLeft}})", + "auto_renew_off": "自動更新オフ", + "quota_forecast_likely": "{{score}}% · 48 時間以内にリセットされる可能性があります", + "quota_forecast_possible": "{{score}}% · 48時間以内にリセットの可能性あり", + "quota_forecast_low": "{{score}}% · 48時間以内のリセット可能性は低い", + "quota_forecast_likely_label": "48 時間以内にリセットされる可能性があります", + "quota_forecast_possible_label": "48時間以内にリセットの可能性あり", + "quota_forecast_low_label": "48時間以内のリセット可能性は低い", + "quota_forecast_open": "Codex クォータのリセット予測を開く" + }, + "daily": { + "title": "日別使用量", + "subtitle": "項目で並べ替えながら、日ごとのトークン構成、規模、コストを比較します。", + "cols": { + "date": "日付", + "tokens": "総トークン数", + "cost": "料金", + "cache": "キャッシュヒット", + "actions": "操作" + }, + "action_view_sessions": "セッションを見る", + "no_data": "選択した範囲の使用状況データが見つかりませんでした。", + "pagination_prev": "前へ", + "pagination_next": "次へ", + "pagination_info": "{{total}} 日間の {{start}} から {{end}} を表示しています", + "date_range": "{{start}} から {{end}}", + "no_activity": "アクティビティなし", + "no_activity_days": "アクティビティはありません ({{count}} 日)", + "comparison_range": "{{range}} を比較しています", + "token_legend_label": "トークンの色の凡例", + "cost_legend_label": "コストスケール: 範囲ピークの 3 分の 1 までは緑、3 分の 2 まではオレンジ、3 分の 2 を超えると赤", + "cost_scale": "コストとピークの比較", + "uncached_input": "キャッシュされていない入力", + "cached_input": "キャッシュされた入力", + "input_including_cache": "入力 (キャッシュを含む)", + "cached_with_rate": "キャッシュ済み ({{rate}})", + "output": "出力", + "peak": "最大", + "open_sessions": "{{date}} のセッションを表示", + "token_bar_label": "トークン構成: {{input}} 非キャッシュ入力、{{cached}} キャッシュ入力、{{output}} 出力、{{total}} 合計", + "total_bar_label": "合計{{total}}トークン。範囲の最大値に対して{{percent}}。", + "cost_bar_label": "コスト{{cost}}。範囲の最大値に対して{{percent}}。", + "sort": { + "label": "並べ替え", + "date": "日付", + "totalTokens": "総トークン数", + "inputTokens": "入力", + "cachedInputTokens": "キャッシュされたトークン", + "outputTokens": "出力", + "costUSD": "料金", + "asc": "昇順", + "desc": "降順" + } + }, + "monthly": { + "title": "月別使用量の詳細", + "subtitle": "タイムゾーン{{tz}}での自然月の合計({{start}}〜{{end}})。", + "cols": { + "month": "月", + "tokens": "トークン構成", + "cost": "料金", + "cache": "キャッシュヒット率" + }, + "no_data": "月別データはまだありません。", + "month_range": "{{start}} から {{end}}", + "no_usage": "使用なし", + "no_usage_months": "使用なし ({{count}} か月)", + "comparison_range": "{{start}} と {{end}} の比較", + "token_legend_label": "トークンの色の凡例", + "cost_legend_label": "コストスケール: 範囲ピークの 3 分の 1 までは緑、3 分の 2 まではオレンジ、3 分の 2 を超えると赤", + "cost_scale": "コストとピークの比較", + "uncached_input": "キャッシュされていない入力", + "cached_input": "キャッシュされた入力", + "input_including_cache": "入力 (キャッシュを含む)", + "cached_with_rate": "キャッシュ済み ({{rate}})", + "output": "出力", + "peak": "最大", + "token_bar_label": "トークン構成: {{input}} 非キャッシュ入力、{{cached}} キャッシュ入力、{{output}} 出力、{{total}} 合計", + "total_bar_label": "{{total}} 合計トークン数。範囲ピークの {{percent}}", + "cost_bar_label": "コスト {{cost}};範囲ピークの {{percent}}", + "delta": { + "comparison": "前月比", + "new": "新規", + "unavailable": "前月比の比較はできません" + }, + "sort": { + "label": "並べ替え", + "month": "月", + "totalTokens": "総トークン数", + "inputTokens": "入力", + "cachedInputTokens": "キャッシュされたトークン", + "outputTokens": "出力", + "costUSD": "料金", + "asc": "昇順", + "desc": "降順" + } + }, + "models": { + "title": "モデル使用量の詳細", + "subtitle": "モデルごとにトークンとコストの分布を分析します。", + "views": { + "label": "モデルページビュー", + "usage": "使用状況分析", + "catalog": "価格カタログ" + }, + "catalog": { + "subtitle": "LiteLLMの価格カタログから、チャットモデルのトークン単価を比較します。", + "search": "モデルまたはプロバイダーを検索...", + "provider": "プロバイダー", + "all_providers": "すべてのプロバイダー", + "model": "モデル", + "unit": "USD / 100万トークン", + "loading": "価格カタログを読み込んでいます...", + "error": "価格カタログの読み込みに失敗しました。", + "no_results": "フィルターに一致する価格エントリはありません。", + "limited": "オフライン: 限定された組み込みの価格カタログを表示します。", + "free": "無料", + "count": "{{count}} モデル", + "page": "ページ {{page}} / {{pages}}", + "previous": "前のページへ", + "next": "次のページ" + }, + "no_data": "この期間にモデルの利用はありません。", + "other": "その他", + "pricing_unavailable": "価格情報なし", + "of_usage": "(使用量に占める割合)", + "of_cost": "(コストに占める割合)", + "summary": { + "active_models": "アクティブモデル", + "total_tokens": "総トークン数", + "estimated_cost": "推定コスト", + "cache_hit": "キャッシュヒット率", + "effective_price": "全体の実効価格 / 100万トークン" + }, + "composition": { + "title": "トークン構成", + "subtitle": "入力にはキャッシュされた入力が含まれます。バーは非キャッシュ入力 + キャッシュ入力 + 出力を使用します。", + "total": "総トークン数", + "input_total": "入力 (キャッシュを含む)", + "uncached": "キャッシュされていない入力", + "cached": "キャッシュされた入力", + "output": "出力", + "bar_label": "トークン構成: {{input}} 非キャッシュ入力、{{cached}} キャッシュ入力、{{output}} 出力、{{total}} 合計" + }, + "distribution": { + "title": "モデル別のトークンシェア", + "subtitle": "トークン総数の上位 6 モデル。残りのモデルは「その他」としてグループ化されます。" + }, + "comparison": { + "title": "モデル比較", + "subtitle": "使用構成、標準価格、実効価格、コストへの影響を比較します。すべての価格は 100 万トークンあたりの価格です。" + }, + "sort": { + "label": "降順で並べ替え", + "tokens": "総トークン数", + "cost": "推定コスト", + "effective": "実効価格" + }, + "groups": { + "model": "モデルと使用量のシェア", + "tokens": "トークンミックス", + "prices": "価格/100万トークン", + "cost": "コストへの影響" + }, + "prices": { + "input": "入力", + "cached": "キャッシュ入力", + "output": "出力", + "effective": "実効", + "input_tooltip": "100万非キャッシュ入力トークンあたりの標準価格", + "cached_tooltip": "100万キャッシュ入力トークンあたりの標準価格", + "output_tooltip": "100万出力トークンの標準価格", + "effective_tooltip": "この使用量構成の推定コストをトークン合計で割った値" + }, + "price_legend": { + "label": "相対価格の凡例", + "low": "低価格", + "medium": "中価格帯", + "high": "高価格", + "equal": "同価格" + } + }, + "projects": { + "title": "プロジェクトの使用状況の詳細", + "subtitle": "プロジェクトディレクトリ別にトークンとコストの合計を分析します。", + "card_title": "プロジェクト使用量", + "card_subtitle": "選択した期間のプロジェクトディレクトリ別のトークン数とコストの合計。", + "cols": { + "project": "プロジェクトディレクトリ", + "tokens": "総トークン数", + "cost": "料金", + "composition": "トークン構成", + "percent": "全体に占める割合", + "actions": "操作" + }, + "token_legend": "トークンとコストの凡例", + "legend": { + "uncached": "キャッシュされていない入力", + "cached": "キャッシュされた入力", + "output": "出力", + "low_cost": "低コスト", + "medium_cost": "中コスト", + "high_cost": "高コスト" + }, + "sort": { + "label": "並べ替え", + "name": "プロジェクト名", + "total": "総トークン数", + "input": "入力(キャッシュあり)", + "cached": "キャッシュされた入力", + "output": "出力", + "cost": "料金", + "ascending": "昇順", + "descending": "降順" + }, + "values": { + "input": "入力", + "cached": "キャッシュされた", + "output": "出力" + }, + "highest": "最大", + "relative_peak": "ピークの {{percent}}%", + "open_details": "{{project}} の分析を開く", + "bar_label": "合計{{total}}トークン: 入力{{input}}(うちキャッシュ{{cached}})、出力{{output}}", + "action_view_sessions": "セッションを見る", + "no_projects": "ログに記録されたプロジェクトディレクトリはまだありません。" + }, + "project_modal": { + "title": "{{projectName}} のセッション", + "all_projects": "すべてのプロジェクト", + "tokens_breakdown": "トークンの内訳", + "input": "入力", + "output": "出力", + "cached": "キャッシュされた", + "estimated_cost": "推定コスト", + "sessions_list": "セッションリスト", + "no_sessions": "このプロジェクトのセッションが見つかりませんでした。", + "project_details": "プロジェクトの詳細", + "active_files": "アクティブなファイル", + "showing_filtered": "一致する{{filtered}}件のセッションを表示中", + "subtitle_desc": "このディレクトリに記録された個々のセッション", + "search_placeholder": "タイトル、セッション ID、またはモデルを検索します...", + "no_matching_sessions": "検索クエリに一致するセッションはありません", + "clear_search_hint": "検索クエリをクリアするか、別の用語を検索してみてください。", + "session_id_file": "セッションタイトル/ID", + "no_models": "モデルがありません", + "view_in_sessions_tab": "「セッション」タブで表示", + "analytics_title": "使用状況分析", + "analytics_loading": "プロジェクト分析を読み込み中...", + "analytics_error": "プロジェクト分析を読み込めませんでした", + "no_analytics": "この範囲では使用できるプロジェクト分析はありません。", + "total_tokens": "総トークン数", + "input_total": "入力(キャッシュを含む)", + "cache_hit": "キャッシュヒット率", + "model_share": "モデルトークンシェア", + "model_share_desc": "モデルごとの総トークンのシェア。最初の 6 つ以降のモデルは「その他」としてグループ化されます。", + "no_model_data": "このプロジェクトにはモデル トークン データがありません。", + "daily_trend": "日別トークンとコストの推移", + "daily_trend_desc": "独立した右軸にコストを伴うスタックされたトークン構成。", + "no_trend_data": "この範囲に日別のアクティビティはありません。", + "search_aria": "プロジェクト セッションを検索する" + }, + "ranges": { + "1d": "過去 1 日", + "2d": "過去 2 日間", + "7d": "過去 7 日間", + "14d": "過去 14 日間", + "30d": "過去 30 日間", + "60d": "過去60日間", + "90d": "過去90日間", + "180d": "過去 180 日間", + "365d": "過去 365 日" + }, + "range_switcher": { + "aria_select_range": "時間範囲を選択してください", + "custom_range": "カスタム範囲を選択...", + "modal_title": "カスタム範囲の選択", + "modal_close_aria": "カスタム範囲モーダルを閉じる", + "selected_range": "選択済み: {{start}} ~ {{end}}", + "selected_start_only": "選択済み: {{start}} (終了日を選択してください...)", + "choose_start": "開始日を選択してください...", + "err_select_both": "開始日と終了日の両方を選択してください。", + "err_end_before_start": "終了日を開始日より前にすることはできません。", + "btn_clear": "クリア", + "btn_cancel": "キャンセル", + "btn_apply": "期間を適用" + }, + "sessions": { + "title": "セッションの詳細", + "subtitle": "コマンドごとの詳細な履歴、またはファイル編集履歴。", + "search_placeholder": "パスまたはコマンドを検索...", + "filter_all_modes": "すべてのモード", + "filter_all_types": "全種類", + "btn_clear_filters": "フィルターをクリアする", + "cols": { + "time": "時刻", + "project": "プロジェクト/ファイル", + "type": "種類", + "cache": "キャッシュ", + "mode": "モード", + "tokens": "トークン", + "cost": "料金" + }, + "no_data": "現在の検索フィルターに一致するセッション ログはありません。", + "showing_info": "{{count}} セッションを表示しています", + "showing_info_filtered": "{{total}}件中{{filtered}}件のセッションを表示中", + "no_sessions_desc": "Codex CLIのセッションログが見つからないか、使用イベントが含まれていません。「ローカルログを再スキャン」をクリックして再確認してください。", + "filtering_by_project": "プロジェクトによるフィルタリング", + "count_sessions_one": "1セッション", + "count_sessions_other": "{{count}} セッション", + "day_total_tokens": "1日の合計トークン数", + "day_cost": "1日あたりの費用", + "projects_models": "プロジェクトとモデル", + "time_label": "時刻: {{time}}", + "size_label": "サイズ: {{size}}", + "no_workspace": "ワークスペースなし", + "recorded_time": "記録日時", + "total_tokens": "総トークン数", + "input_including_cache": "入力 (キャッシュを含む)", + "cached": "キャッシュされた", + "output": "出力", + "token_bar_label": "トークンの内訳: {{input}} 非キャッシュ入力、{{cached}} キャッシュ入力、{{output}} 出力、{{total}} 合計", + "token_bar_empty": "トークンアクティビティはありません", + "token_total_label": "合計トークン数 {{total}}。表示中セッションの最大値に対して{{percent}}", + "cost_pill_label": "コスト {{cost}}。表示中セッションの最大値に対して{{percent}}", + "open_session": "セッションを開く {{title}}", + "quota": { + "title": "観察されたクォータ使用量", + "estimated": "推定", + "five_hour": "5時間", + "weekly": "週間", + "approx": "概算", + "usage_and_remaining": "{{usage}} · 残り {{remaining}}", + "used_and_remaining_change": "使用 {{usage}} • 残り {{remaining}}", + "aria_label": "推定 5 時間および週ごとの割り当て使用量", + "usage_label": "{{window}}の使用量 {{usage}}、残り {{remaining}}", + "resets": "リセット: {{value}}", + "caveat": "整数ログのスナップショットから推定しています。丸めや同時実行中の他のCodexセッションにより、計上結果が変わる場合があります。リセット期間ごとに個別表示します。" + }, + "detail": { + "modal_title": "セッションの詳細", + "close_aria": "セッションの詳細を閉じる", + "timestamp": "タイムスタンプ", + "project_path": "プロジェクトパス", + "trigger": "トリガー/コマンド", + "file_path": "ファイルパス", + "mode": "呼び出しモード", + "type": "リクエスト種別", + "tokens": "トークン", + "tokens_breakdown": "内訳 (入力 / 出力 / キャッシュ)", + "estimated_cost": "推定コスト", + "model": "モデル名", + "duration": "所要時間", + "total_tokens": "総トークン数", + "cost": "料金", + "cache": "キャッシュ", + "tool_calls": "ツール呼び出し", + "patches": "パッチ", + "errors": "エラー", + "details": "詳細", + "timeline": "タイムライン", + "raw_jsonl": "生のJSONL", + "loading_replay": "セッションリプレイの読み込み中", + "session_summary": "セッションの概要", + "started": "開始: {{value}}", + "ended": "終了: {{value}}", + "first_token": "最初のトークン: {{value}}", + "cli": "CLI: {{value}}", + "turn": "ターン {{id}}", + "message_count_one": "{{count}} メッセージ", + "message_count_other": "{{count}} メッセージ", + "tool_count_one": "{{count}} ツール", + "tool_count_other": "{{count}} ツール", + "patch_count_one": "{{count}} パッチ", + "patch_count_other": "{{count}} パッチ", + "error_count_one": "{{count}} エラー", + "error_count_other": "{{count}} エラー", + "token_event_count_one": "{{count}} トークン イベント", + "token_event_count_other": "{{count}} トークン イベント", + "system": "システムプロンプト", + "developer": "開発者", + "user": "ユーザー", + "assistant": "アシスタント", + "expand": "展開", + "collapse": "折りたたむ", + "reasoning_summary": "推論の要約", + "arguments": "引数", + "command": "コマンド", + "patch_input": "パッチ", + "edited_files_one": "{{count}} ファイルを編集しました", + "edited_files_other": "{{count}} ファイルを編集しました", + "working_directory": "作業ディレクトリ", + "exit_code": "終了コード", + "wall_time": "経過時間", + "process_session": "プロセスセッション", + "tool_argument_labels": { + "cell_id": "プロセスセッション", + "session_id": "プロセスセッション", + "chars": "入力", + "yield_time_ms": "待機間隔 (ミリ秒)", + "max_tokens": "出力トークン制限", + "max_output_tokens": "出力トークン制限" + }, + "output": "出力", + "activity_running": "実行中", + "activity_ran": "実行済み", + "activity_stopped": "停止しました", + "exit_success_tooltip": "プロセスが正常に終了しました", + "exit_failure_tooltip": "プロセスがエラーで終了しました", + "web_search": "ウェブ検索", + "search_queries": "検索クエリ", + "search_result": "検索結果 {{index}}", + "image_count_one": "出力画像 {{count}}枚", + "image_count_other": "出力画像 {{count}}枚", + "output_image": "出力画像 {{index}}", + "stderr": "標準エラー出力", + "user_input_request": "ユーザー入力リクエスト", + "custom_answer": "カスタム回答", + "patch_failed": "パッチの適用に失敗しました", + "patch_result": "パッチ結果", + "patch_output": "パッチ出力", + "token_events": "トークンイベント", + "tokens_count": "{{value}} トークン", + "error": "エラー", + "show_full_text": "全文を表示", + "hide_full_text": "全文を隠す", + "raw_preview": "生の JSONL プレビュー", + "raw_metadata": "{{size}} · {{lines}} 行", + "show_full_raw": "JSONL を完全に表示", + "copy": "コピー", + "copied": "コピーされました" + } + }, + "settings": { + "title": "設定", + "subtitle": "ローカルアプリの状態と復旧操作を管理します。", + "nav_aria": "設定セクション", + "nav_general": "一般", + "nav_menu_bar": "メニューバー / トレイ", + "nav_maintenance": "メンテナンス", + "cache_title": "ローカルキャッシュ", + "cache_desc": "キャッシュされた使用状況、増分スキャン データ、価格データをクリアし、ローカル Codex ログから再構築します。", + "btn_resetting": "リセット中", + "btn_reset": "キャッシュをリセット", + "display_title": "表示設定", + "display_desc": "ダッシュボードのユーザー インターフェイスをカスタマイズします。", + "show_logs_title": "「ログ」タブを表示", + "show_logs_desc": "リアルタイムのログ出力を表示するには、ナビゲーション ヘッダーの [ログ] タブを表示します。", + "toggle_logs_aria": "「ログ」タブの切り替え", + "system_title": "システム設定", + "system_desc": "Codex Usage Desktop とシステムの連携方法を管理します。", + "launch_at_login_title": "ログイン時に起動", + "launch_at_login_desc": "ログイン時にバックグラウンドで起動し、メニュー バーまたはシステム トレイからアプリを利用できるようにします。", + "toggle_launch_at_login_aria": "ログイン時の起動の切り替え", + "updates_title": "アプリのアップデート", + "updates_desc": "アップデートを確認し、デスクトップ アプリケーションのバージョンを管理します。", + "current_version": "現在のバージョン", + "btn_checking": "チェック中...", + "btn_check_updates": "アップデートを確認", + "update_available": "バージョン v{{version}} が利用可能です。", + "update_available_desc": "新しいリリースが GitHub で見つかりました。", + "btn_upgrade": "アップグレード", + "btn_download_update": "ダウンロードしてインストールする", + "btn_downloading_update": "ダウンロード中...", + "btn_downloading_update_progress": "{{percent}}% をダウンロード中", + "btn_restart_update": "再起動して更新", + "btn_view_release": "リリースページを見る", + "up_to_date": "最新の状態です", + "up_to_date_desc": "v{{version}} は利用可能な最新バージョンです。", + "language_title": "言語設定", + "language_desc": "アプリケーションの表示言語を変更します。", + "language_label": "アプリの言語", + "lang_en": "英語", + "lang_zh": "简体中文", + "menu_bar_title": "メニューバー/システムトレイ設定", + "menu_bar_desc": "macOSのメニューバー、Windowsのトレイツールチップ、トレイメニューに表示する項目を設定します。", + "menu_bar_show_title": "メニューバー/トレイツールチップに表示", + "menu_bar_show_menu": "ドロップダウンメニューに表示", + "menu_bar_opt_5h": "5時間制限", + "menu_bar_opt_weekly": "週間制限", + "menu_bar_opt_monthly": "月間利用制限", + "menu_bar_opt_tokens": "今日の合計トークン", + "menu_bar_opt_cost": "今日の費用", + "menu_bar_show_main": "メインウィンドウを表示", + "menu_bar_quit": "終了", + "reset_confirm": "キャッシュされた使用状況と価格データをリセットして、ローカルの Codex ログから再構築しますか?ソースログは削除されません。", + "lang_ja": "日本語" + }, + "logs": { + "title": "リアルタイムシステムログ", + "subtitle": "バックグラウンド インデクサーとネイティブ スキャナーからの診断ログ フィード。", + "search_placeholder": "ログを絞り込み...", + "btn_pause": "一時停止", + "btn_resume": "再開する", + "btn_clear": "クリア", + "waiting": "ログを待っています..." + }, + "trends": { + "title_tokens": "トークンの使用傾向", + "title_cost": "推定コストの傾向", + "tab_tokens": "トークン", + "tab_cost": "料金", + "title": "使用傾向", + "description": "選択した日付範囲におけるトークン数とコストの推移。", + "total_tokens": "総トークン数", + "total_token_trend": "総トークンの傾向", + "cost_trend": "コストの傾向" + }, + "export": { + "dialog_title_excel": "Codex の使用状況を Excel にエクスポート", + "dialog_title_markdown": "Codex の使用量を Markdown にエクスポート", + "excel_filter_name": "Excel ブック", + "markdown_filter_name": "マークダウン" + } +} diff --git a/src/locales/zh.json b/src/locales/zh.json index c9e5bd1..6f8e061 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -68,6 +68,7 @@ "title": "Codex Token 使用概览", "subtitle": "本地开发 Token 追踪与花费估算工具。", "last_updated": "最后更新于 {{time}}", + "updated_today": "今天 {{time}}", "last_updated_never": "未曾更新", "rescan_duration": "重扫耗时 {{duration}}", "refresh": "刷新数据", @@ -506,7 +507,8 @@ "arguments": "参数", "command": "命令", "patch_input": "补丁", - "edited_files": "编辑了 {{count}} 个文件", + "edited_files_one": "编辑了 {{count}} 个文件", + "edited_files_other": "编辑了 {{count}} 个文件", "working_directory": "工作目录", "exit_code": "退出码", "wall_time": "执行耗时", @@ -591,6 +593,7 @@ "language_label": "应用语言", "lang_en": "English", "lang_zh": "简体中文", + "lang_ja": "日本語", "menu_bar_title": "菜单栏 / 系统托盘设置", "menu_bar_desc": "配置 macOS 菜单栏标题、Windows 托盘悬停提示和托盘菜单中显示的数据项。", "menu_bar_show_title": "显示在菜单栏 / 托盘悬停提示",