原布局把余额与周期数据塞在同一行,窄屏(360dp)会换行、数字长短不一还容易错位, 整体观感松散。改为上下分区: - 余额区:「余额」小标签 + 大号数字 + 单位,单行左对齐,作为卡片主视觉。 - 用量区:「今日 / 近7天」两块等宽磁贴(14dp 圆角 + 半透明底色), 每块固定三行(周期名 / Token 数 / 请求次数),内容垂直居中, 两块结构与内边距一致,数值长短不同也不会错位。 - 卡片正面只保留 余额、Token 用量、请求次数三项;不再显示花费与「本月已用」 (花费与更长周期明细仍可在详情页时间窗口查看)。 副标题改为登录方式: - Sub2API 卡片副标题由「自托管面板 · 用户级 sk- Key 余额」改为「邮箱登录 / API 登录」, 依据 Repository 新写入的 extras["auth_mode"](panel / apikey)判定,无数据时回退原描述。 真机验证(V2172A / Android 15,360dp 宽): 余额 y887-1105 与两块磁贴 y1185-1405 分区清晰、不换行;磁贴在 x176 与 x788 等宽对齐; 副标题显示「邮箱登录」。compileDebugKotlin 与 lintDebug 均通过。
685 lines
47 KiB
XML
685 lines
47 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<resources>
|
||
<!-- ══════════ 品牌资源(translatable=false,所有语言共用,不参与翻译) ══════════ -->
|
||
<string name="brand_token" translatable="false">RainyToken</string>
|
||
<string name="dashboard_footer_version" translatable="false">RainyToken · v%1$s</string>
|
||
|
||
<!-- ══════════ 应用名称(跟随语言:中文系统显示中文名,其他显示英文名) ══════════ -->
|
||
<string name="app_name">RainyToken</string>
|
||
|
||
<!-- ══════════ 小组件名称/描述/署名 ══════════ -->
|
||
<string name="widget_name">AI Usage Panel</string>
|
||
<string name="widget_description">OpenCode Go usage + DeepSeek balance, auto-refresh</string>
|
||
<string name="widget_brand">Rainy</string>
|
||
|
||
<!-- ══════════ 通用动作 ══════════ -->
|
||
<string name="action_back">Back</string>
|
||
<string name="action_cancel">Cancel</string>
|
||
<string name="action_confirm_add">Add Widget</string>
|
||
<string name="action_got_it">Got it</string>
|
||
<string name="action_refresh">Refresh</string>
|
||
<string name="action_settings">Settings</string>
|
||
<string name="action_delete">Delete</string>
|
||
<string name="action_clear">Clear</string>
|
||
<string name="action_save">Save</string>
|
||
<string name="action_jump">Go</string>
|
||
<string name="action_prev_page">◀ Prev</string>
|
||
<string name="action_next_page">Next ▶</string>
|
||
<string name="action_add_widget">Add widget to home screen</string>
|
||
<string name="title_language">Language</string>
|
||
<string name="dialog_language_title">Select language</string>
|
||
<string name="app_locale_follow_system">Follow system</string>
|
||
<string name="app_locale_zh">简体中文</string>
|
||
<string name="app_locale_zh_hant">繁體中文</string>
|
||
<string name="app_locale_en">English</string>
|
||
<string name="action_view_detail">View details</string>
|
||
<string name="action_view_usage_detail">View usage details</string>
|
||
<string name="action_view_raw_data">Raw data</string>
|
||
<string name="action_sync_usage">Sync usage data</string>
|
||
<string name="action_login_save">I\'m logged in, save</string>
|
||
<string name="action_keep_waiting">Keep waiting</string>
|
||
|
||
<!-- ══════════ 通用文案 ══════════ -->
|
||
<string name="common_loading">Loading…</string>
|
||
<string name="common_unknown">Unknown error</string>
|
||
<string name="common_all_models">All models</string>
|
||
|
||
<!-- ══════════ 页面标题 ══════════ -->
|
||
<string name="nav_empty_title">👈 Select a service to view details</string>
|
||
<string name="nav_empty_subtitle">Tap a card on the left</string>
|
||
<string name="title_settings">Settings</string>
|
||
<string name="api_mgmt_title">API Management</string>
|
||
<string name="api_mgmt_configure">Configure</string>
|
||
<string name="api_mgmt_edit">Edit</string>
|
||
<string name="api_mgmt_test">Test</string>
|
||
<string name="api_mgmt_delete_title">Delete credential?</string>
|
||
<string name="api_mgmt_delete_body">This will remove the saved credential for %1$s.</string>
|
||
<string name="api_mgmt_unconfigured">Not configured</string>
|
||
<string name="api_mgmt_last_verified">Last verified: %1$s</string>
|
||
<string name="api_mgmt_cached_balance">Cached: %1$s %2$s</string>
|
||
<string name="usage_stat_title">Usage Stats</string>
|
||
<string name="usage_stat_empty">No configured services yet</string>
|
||
<string name="usage_stat_failed">%1$d refresh failed</string>
|
||
<string name="usage_stat_never_fetched">Not fetched yet</string>
|
||
<string name="usage_stat_fetched_at">Updated %1$s</string>
|
||
<string name="usage_stat_monthly_spent">Monthly spent</string>
|
||
<string name="usage_stat_total_quota">Total quota</string>
|
||
<string name="usage_stat_next_reset">Next reset</string>
|
||
<string name="api_mgmt_test_success">✅ %1$s connected: %2$s %3$s</string>
|
||
<string name="api_mgmt_test_fail">❌ %1$s failed: %2$s</string>
|
||
<string name="api_mgmt_err_invalid">Invalid credential</string>
|
||
<string name="api_mgmt_err_changed">Credential changed</string>
|
||
<string name="api_mgmt_err_ratelimited">Too many requests</string>
|
||
<string name="api_mgmt_err_network">Network error</string>
|
||
<string name="api_mgmt_err_server">Server error (HTTP %1$d)</string>
|
||
<string name="api_mgmt_err_parse">Parse failed</string>
|
||
<string name="title_credentials">Credentials</string>
|
||
<string name="title_about">About RainyToken</string>
|
||
<string name="title_tips">Tips</string>
|
||
<string name="title_debug_log">Debug log</string>
|
||
<string name="title_usage_detail">Usage details</string>
|
||
<string name="title_overview">Overview</string>
|
||
<string name="title_raw_data">Raw data</string>
|
||
<string name="title_chart">Charts</string>
|
||
|
||
<!-- ══════════ 状态徽章 ══════════ -->
|
||
<string name="status_not_configured">Not set up</string>
|
||
<string name="status_configured">Configured</string>
|
||
<string name="status_expired">Expired</string>
|
||
<string name="status_relogin">Re-login</string>
|
||
<string name="status_refresh_failed">Refresh failed</string>
|
||
<string name="status_not_fetched">No data</string>
|
||
<string name="status_waiting">Pending</string>
|
||
<string name="status_normal">OK</string>
|
||
<string name="status_not_configured_add">Not set up · Tap to add</string>
|
||
<string name="status_ok_valid">Configured · Valid</string>
|
||
<string name="status_expired_reconfigure">Expired · Tap to reconfigure</string>
|
||
<string name="status_need_reverify">Needs re-verification</string>
|
||
<string name="status_manual_mode">Manual entry mode</string>
|
||
<string name="status_credential_configured">Credential set</string>
|
||
<string name="status_not_configured_cred">No credential</string>
|
||
<string name="status_loading">Loading</string>
|
||
<string name="status_fresh">Latest</string>
|
||
<string name="status_stale">Cached</string>
|
||
<string name="status_failed">Failed</string>
|
||
<string name="status_pending_input">Awaiting input</string>
|
||
|
||
<!-- ══════════ 仪表盘 ══════════ -->
|
||
<string name="dashboard_subtitle">AI Balance Overview</string>
|
||
<string name="dashboard_empty_title">No services configured yet</string>
|
||
<string name="dashboard_empty_subtitle">Only services with credentials are shown on the home page.</string>
|
||
<string name="dashboard_empty_go_settings">Go to Settings</string>
|
||
<string name="footer_never_fetched">Never fetched</string>
|
||
<string name="footer_just_updated">Updated just now</string>
|
||
<string name="footer_minutes_ago">Updated %1$d min ago</string>
|
||
<string name="footer_hours_ago">Updated %1$d h ago</string>
|
||
<string name="footer_updated_at">Updated %1$s</string>
|
||
<string name="dashboard_drag_hint">💡 Long-press a card to reorder</string>
|
||
<string name="dashboard_error_prefix">⚠ %1$s</string>
|
||
<string name="dashboard_footer_privacy">Stored locally & encrypted, nothing is uploaded</string>
|
||
<string name="dialog_add_widget_title">Add home screen widget?</string>
|
||
<string name="dialog_add_widget_body">This will ask the launcher to add the RainyToken widget. Some systems may still show their own confirmation dialog.</string>
|
||
<string name="toast_shortcut_permission_denied">Shortcut permission denied. Please allow it in system settings and try again.</string>
|
||
<string name="toast_add_rejected">The launcher rejected the request. Please check launcher permissions.</string>
|
||
<string name="toast_picker_unsupported">This launcher does not support in-app adding. Long-press home → Widgets → find RainyToken.</string>
|
||
|
||
<!-- ══════════ 服务卡片 ══════════ -->
|
||
<string name="service_click_to_configure">Tap to configure credentials</string>
|
||
<string name="service_pull_to_refresh">Pull to refresh</string>
|
||
<string name="service_unavailable">Service currently unavailable</string>
|
||
<string name="service_monthly_used">%1$s%2$s used this month</string>
|
||
<string name="service_remaining">Remaining</string>
|
||
<string name="service_used_total"> · %1$s used / %2$s total</string>
|
||
<string name="service_used_label">%1$s used</string>
|
||
<string name="service_5h_used">5h used</string>
|
||
<string name="service_plan_suffix">· %1$s</string>
|
||
<string name="service_reset_in">Resets in %1$s</string>
|
||
<string name="service_desc_deepseek">REST API · ¥</string>
|
||
<string name="service_desc_opencode_go">WebView fetch · 5h quota</string>
|
||
<string name="service_desc_commandcode_go">JSON API · $</string>
|
||
<string name="service_desc_codex">ChatGPT · Codex quota</string>
|
||
<string name="service_desc_ollama">Cookie fetch · Cloud quota</string>
|
||
<string name="service_desc_trae">Cloud-IDE-JWT · IDE 额度</string>
|
||
<string name="service_desc_workbuddy">OAuth · CodeBuddy 同体系积分</string>
|
||
<string name="service_desc_sub2api">自托管面板 · 用户级 sk- Key 余额</string>
|
||
<string name="detail_extras_title">Breakdown</string>
|
||
<string name="credential_title_trae">Trae credentials</string>
|
||
<string name="credential_hint_trae">Paste the Cloud-IDE-JWT from your Trae account session (starts with ey…). Used as Authorization: Cloud-IDE-JWT header.</string>
|
||
<string name="field_trae_jwt">Cloud-IDE-JWT</string>
|
||
<string name="field_trae_region">Region</string>
|
||
<string name="option_region_cn">CN</string>
|
||
<string name="option_region_intl">INTL</string>
|
||
<string name="credential_title_workbuddy">WorkBuddy credentials</string>
|
||
<string name="credential_hint_workbuddy">Paste the access & refresh tokens from your Tencent WorkBuddy (CodeBuddy) session. Refresh token is rotated once per use.</string>
|
||
<string name="field_workbuddy_access">Access Token</string>
|
||
<string name="field_workbuddy_refresh">Refresh Token</string>
|
||
<string name="error_workbuddy_tokens_required">Access and refresh tokens are required</string>
|
||
<string name="credential_title_sub2api">Sub2API instance</string>
|
||
<string name="credential_hint_sub2api">Any user of the instance: paste the sk-… API key issued to you to see your balance (no admin needed). No key? Use the panel login email & password.</string>
|
||
<string name="field_sub2_base_url">Instance base URL</string>
|
||
<string name="placeholder_sub2_base_url">https://api.example.com</string>
|
||
<string name="sub2_auth_header">Authentication</string>
|
||
<string name="field_sub2_api_key">API Key (sk-…)</string>
|
||
<string name="sub2_or_account">Or panel account</string>
|
||
<string name="field_sub2_email">Email</string>
|
||
<string name="field_sub2_password">Password</string>
|
||
<string name="error_sub2_required">Base URL and (API Key or email+password) are required</string>
|
||
|
||
<!-- ══════════ Sub2API 用量明细 ══════════ -->
|
||
<string name="sub2_usage_title">Usage breakdown</string>
|
||
<string name="sub2_usage_subtitle">Daily and per-model usage from your Sub2API gateway</string>
|
||
<string name="sub2_window_today">Today</string>
|
||
<string name="sub2_window_7d">7 days</string>
|
||
<string name="sub2_window_30d">30 days</string>
|
||
<string name="sub2_window_90d">90 days</string>
|
||
<string name="sub2_window_all">All</string>
|
||
<string name="sub2_stat_requests">Requests</string>
|
||
<string name="sub2_stat_tokens">Tokens</string>
|
||
<string name="sub2_stat_cost">Cost</string>
|
||
<string name="sub2_daily_header">Daily usage</string>
|
||
<string name="sub2_models_header">By model</string>
|
||
<string name="sub2_model_all">All models</string>
|
||
<string name="sub2_model_meta">%1$s requests · %2$s tokens</string>
|
||
<string name="sub2_no_daily">No daily usage data in this range</string>
|
||
<string name="sub2_no_cost">No spend in this range</string>
|
||
<string name="sub2_model_sel_summary">Model: %1$s · in current period</string>
|
||
<string name="sub2_no_model_data">No model data in this range</string>
|
||
|
||
<!-- ══════════ 每日签到(WorkBuddy / Trae) ══════════ -->
|
||
<string name="checkin_title">Daily check-in</string>
|
||
<string name="checkin_subtitle">Check in every day for credits; streaks earn bonuses</string>
|
||
<string name="checkin_action">Check in</string>
|
||
<string name="checkin_loading">Checking…</string>
|
||
|
||
<!-- ══════════ Sub2API 面板 WebView 登录(全账号统计) ══════════ -->
|
||
<string name="sub2_panel_login_hint">Sign in normally on the opened page; the app reads the session automatically. Manual API Key still works.</string>
|
||
<string name="sub2_panel_login_done">Panel token captured — tap Save to apply</string>
|
||
<string name="sub2_panel_login_done_short">✓ Panel token captured</string>
|
||
|
||
<!-- ══════════ 时长标签(DurationText 注入用) ══════════ -->
|
||
<string name="format_day">d</string>
|
||
<string name="format_hour">h</string>
|
||
<string name="format_minute">m</string>
|
||
|
||
<!-- ══════════ 用量窗口 ══════════ -->
|
||
<string name="window_5h">5 hours</string>
|
||
<string name="window_5h_short">5h</string>
|
||
<string name="window_5h_usage">5h usage</string>
|
||
<string name="window_5h_rolling">5-hour rolling</string>
|
||
<string name="window_weekly">Week</string>
|
||
<string name="window_monthly">Month</string>
|
||
<string name="window_every_month">Monthly</string>
|
||
<string name="window_usage">Usage</string>
|
||
<string name="usage_window_title">Usage window%1$s</string>
|
||
<string name="usage_window_title_plain">Usage window</string>
|
||
<string name="msg_model_usage">Model usage</string>
|
||
<string name="msg_model_quota">Quota $%1$s</string>
|
||
|
||
<!-- ══════════ 用量统计 ══════════ -->
|
||
<string name="usage_title_opencode">OpenCode Usage</string>
|
||
<string name="usage_title_commandcode">CommandCode Usage</string>
|
||
<string name="usage_record_count">%1$d records</string>
|
||
<string name="usage_click_to_sync">Tap to sync</string>
|
||
<string name="usage_input_tokens">Input tokens</string>
|
||
<string name="usage_output_tokens">Output tokens</string>
|
||
<string name="usage_reasoning_tokens">Reasoning tokens</string>
|
||
<string name="usage_total_cost">Total cost</string>
|
||
<string name="usage_cache_read">Cache read %1$s</string>
|
||
<string name="usage_cache_write">Cache write %1$s</string>
|
||
<string name="usage_no_data_sync">No data yet · tap 🔄 to sync</string>
|
||
<string name="usage_new_records">✓ %1$d new records</string>
|
||
<string name="sync_partial">Partial sync: %1$d records inserted, %2$d pages failed</string>
|
||
<string name="usage_click_to_switch"> tap to switch</string>
|
||
<string name="usage_utc0_note">All times in UTC+0</string>
|
||
<string name="msg_utc8_on">Switched to UTC+8, charts shown in Beijing time</string>
|
||
<string name="msg_utc0_on">Switched to UTC+0, charts shown in UTC</string>
|
||
<string name="usage_spent_total">$%1$s spent / $%2$s total</string>
|
||
<string name="usage_remaining">$%1$s remaining</string>
|
||
<string name="usage_extra_credits">Extra credits</string>
|
||
<string name="section_by_model">By model</string>
|
||
<string name="section_by_day">By day (UTC+0)</string>
|
||
<string name="model_count">%1$d models</string>
|
||
<string name="model_count_short">%1$d</string>
|
||
<string name="date_start">Start time</string>
|
||
<string name="date_end">End time</string>
|
||
|
||
<!-- ══════════ 图表 ══════════ -->
|
||
<string name="chart_cost">Spending (USD)</string>
|
||
<string name="chart_requests">API requests</string>
|
||
<string name="chart_tokens">Token usage</string>
|
||
<string name="chart_stack_output">Output</string>
|
||
<string name="chart_stack_input">Input (miss)</string>
|
||
<string name="chart_stack_cache">Cache hit</string>
|
||
|
||
<!-- ══════════ 原始数据 ══════════ -->
|
||
<string name="header_time">Time</string>
|
||
<string name="header_model">Model</string>
|
||
<string name="header_input_cache">Input(cache)</string>
|
||
<string name="header_output">Output</string>
|
||
<string name="header_cost">Cost</string>
|
||
|
||
<!-- ══════════ 时间筛选 ══════════ -->
|
||
<string name="time_all">All</string>
|
||
<string name="time_last_5h">Last 5 hours</string>
|
||
<string name="time_last_12h">Last 12 hours</string>
|
||
<string name="time_last_24h">Last 24 hours</string>
|
||
<string name="time_today">Today</string>
|
||
<string name="time_yesterday">Yesterday</string>
|
||
<string name="time_last_7d">Last 7 days</string>
|
||
<string name="time_last_30d">Last 30 days</string>
|
||
<string name="time_this_month">This month</string>
|
||
<string name="time_custom">Custom</string>
|
||
<string name="time_custom_day">Custom day</string>
|
||
<string name="time_custom_month">Custom month</string>
|
||
<string name="time_custom_range">Custom range</string>
|
||
|
||
<!-- ══════════ 设置页 ══════════ -->
|
||
<string name="about_description">A tiny tool to check AI balances.\nCredentials are encrypted locally — nothing is uploaded.</string>
|
||
<string name="tips_view_all">View all %1$d hidden tips</string>
|
||
<string name="debug_log_desc">Inspect token refresh, network requests and other debug records</string>
|
||
|
||
<!-- ══════════ 凭据编辑 ══════════ -->
|
||
<string name="credential_configured_cookies">✓ Login state configured (%1$d cookies)</string>
|
||
<string name="help_cookie_title">How to get the Cookie?</string>
|
||
<string name="help_cookie_1">1. Open the login page below in desktop Chrome</string>
|
||
<string name="help_cookie_2">2. Sign in with GitHub / Google (won\'t be blocked)</string>
|
||
<string name="help_cookie_3">3. After login, press F12 → Application → Cookies</string>
|
||
<string name="help_cookie_4">4. Copy all cookies of the site and paste them above</string>
|
||
<string name="help_cookie_5">Format: name1=value1; name2=value2</string>
|
||
<string name="help_ocgo_title">How to get OpenCode Go credentials?</string>
|
||
<string name="help_ocgo_1">1. Open opencode.ai/auth in desktop Chrome</string>
|
||
<string name="help_ocgo_2">2. Sign in with GitHub / Google (Google won\'t block Chrome)</string>
|
||
<string name="help_ocgo_3">3. You\'ll land on the dashboard, URL looks like:</string>
|
||
<string name="help_ocgo_4"> https://opencode.ai/workspace/{id}/go</string>
|
||
<string name="help_ocgo_5">4. Copy the {id} segment → workspaceId</string>
|
||
<string name="help_ocgo_6">5. F12 → Application → Cookies</string>
|
||
<string name="help_ocgo_7">6. Find the cookie named auth under opencode.ai</string>
|
||
<string name="help_ocgo_8">7. Copy its Value field → auth cookie</string>
|
||
<string name="help_ocgo_note">Note: only the auth cookie is needed, not the whole cookie string</string>
|
||
<string name="help_ccgo_title">How to get CommandCode credentials?</string>
|
||
<string name="help_ccgo_1">1. Open https://commandcode.ai and sign in with GitHub</string>
|
||
<string name="help_ccgo_2">▸ Get API Key (required):</string>
|
||
<string name="help_ccgo_3"> Avatar (top right) → Settings → API Keys → Create a Key</string>
|
||
<string name="help_ccgo_4">▸ Get all cookies (for usage records):</string>
|
||
<string name="help_ccgo_5"> F12 → Application → Cookies → commandcode.ai</string>
|
||
<string name="help_ccgo_6"> Select all cookies and copy the whole string</string>
|
||
<string name="help_ccgo_7"> Paste it below — no need to pick them one by one</string>
|
||
<string name="help_ccgo_note">Tip: balance works without cookies, usage records will just be empty.</string>
|
||
<string name="help_codex_title">How to get Codex auth.json?</string>
|
||
<string name="help_codex_1">1. Run codex-oauth-proxy or</string>
|
||
<string name="help_codex_2"> codex-proxy in a terminal to sign in to ChatGPT</string>
|
||
<string name="help_codex_3">2. The credential file is saved at:</string>
|
||
|
||
<!-- ══════════ 提示/错误消息 ══════════ -->
|
||
<string name="msg_saved">Saved</string>
|
||
<string name="msg_credentials_saved">Credentials saved</string>
|
||
<string name="msg_connect_success_balance">Connected! Balance: %1$s %2$s</string>
|
||
<string name="msg_connect_success_saved">Connected, credentials saved</string>
|
||
<string name="error_api_key_empty">API Key cannot be empty</string>
|
||
<string name="error_json_format">Invalid JSON format</string>
|
||
<string name="error_credential_rejected">Service rejected this credential (401/403)</string>
|
||
<string name="error_credential_changed_test">Credentials changed during test</string>
|
||
<string name="error_rate_limited">Too many requests (429)</string>
|
||
<string name="error_server">Server error (%1$d)</string>
|
||
<string name="error_network">Network error: %1$s</string>
|
||
<string name="error_rollback_done">, previous credential restored</string>
|
||
<string name="error_rollback_skipped">, credential changed, rollback skipped</string>
|
||
<string name="error_test_failed">Test failed. %1$s%2$s</string>
|
||
<string name="error_test_not_supported">Testing is not supported for this service</string>
|
||
<string name="error_auth_cookie_workspace">Both auth cookie and workspaceId are required</string>
|
||
<string name="error_cookie_empty">Cookie cannot be empty</string>
|
||
<string name="error_credential_not_configured">Credential not configured</string>
|
||
<string name="error_credential_not_configured_expired">Credential missing or expired</string>
|
||
<string name="error_credential_invalid_reconfigure">Credential invalid, please reconfigure in Settings</string>
|
||
<string name="error_credential_invalid_relogin">Credential invalid, please log in again</string>
|
||
<string name="error_credential_changed_reload">Credentials changed, reloading</string>
|
||
<string name="error_credential_changed_retry">Credentials changed, please retry</string>
|
||
<string name="error_network_check">Network error, please check your connection</string>
|
||
<string name="error_network_generic">Network error</string>
|
||
<string name="error_server_http">Server error (HTTP %1$d)</string>
|
||
<string name="error_rate_limited_retry">Too many requests%1$s</string>
|
||
<string name="error_rate_limited_retry_suffix">, retry in %1$d seconds</string>
|
||
<string name="error_trigger_not_supported">Usage activation is not supported</string>
|
||
<string name="error_select_model_first">Please select a model first</string>
|
||
<string name="error_cookie_not_found">No cookie captured, please make sure you\'re logged in</string>
|
||
<string name="error_login_url_missing">No login URL configured</string>
|
||
<string name="error_oauth_url_prefix">URL should start with %1$s</string>
|
||
<string name="error_oauth_auth_failed">Authorization failed: %1$s</string>
|
||
<string name="error_oauth_state_mismatch">State mismatch, please retry</string>
|
||
<string name="error_oauth_missing_code">Callback missing authorization code</string>
|
||
<string name="error_oauth_token_exchange">Token exchange failed, check the debug log</string>
|
||
|
||
<!-- ══════════ 触发用量 ══════════ -->
|
||
<string name="trigger_success_title">✓ Usage activated</string>
|
||
<string name="trigger_success_header">✓ Activation successful</string>
|
||
<string name="trigger_result_title">Request result</string>
|
||
<string name="trigger_error_prefix">Error: %1$s</string>
|
||
<string name="trigger_response_body">Response body:\n%1$s</string>
|
||
<string name="trigger_success_model">Model: %1$s</string>
|
||
<string name="trigger_success_response_id">Response ID: %1$s</string>
|
||
<string name="trigger_reply_header">Reply:</string>
|
||
<string name="trigger_reply_empty">(empty)</string>
|
||
<string name="trigger_reply_missing">(no reply content)</string>
|
||
<string name="trigger_parse_failed">(response parsing failed, but the request was sent)</string>
|
||
<string name="trigger_usage_prompt_completion_total">Usage: prompt=%1$s completion=%2$s total=%3$s tokens</string>
|
||
<string name="trigger_usage_input_output">Usage: input=%1$s output=%2$s tokens</string>
|
||
<string name="error_token_refresh_generic">Token refresh failed. Please log in again or import auth.json.</string>
|
||
|
||
<!-- ══════════ WebView 登录 ══════════ -->
|
||
<string name="title_webview_login">Sign in to %1$s</string>
|
||
<string name="dialog_login_done_title">Done logging in?</string>
|
||
<string name="dialog_login_done_body">If you finished signing in but the page didn\'t redirect, tap the button below to grab the cookie and save your session.</string>
|
||
|
||
<!-- ══════════ 调试日志 ══════════ -->
|
||
<string name="debug_log_empty">No log entries yet\nRefresh Codex usage and debug info will show up here</string>
|
||
|
||
<!-- ══════════ 小组件 ══════════ -->
|
||
<string name="widget_title_opencode">OpenCode Go · Usage</string>
|
||
<string name="widget_deepseek_balance">DeepSeek balance</string>
|
||
<string name="widget_auto_refresh">Auto refresh</string>
|
||
<string name="widget_service_quota">%1$s · Quota</string>
|
||
<string name="widget_quota_with_plan">%1$s · %2$s</string>
|
||
<string name="widget_updated_at">Updated %1$s</string>
|
||
<string name="widget_no_data">No data</string>
|
||
<string name="widget_refreshing">Refreshing…</string>
|
||
|
||
<!-- ══════════ 小技巧(AppTips) ══════════ -->
|
||
<string name="tip_1_title">Reorder cards by long-press</string>
|
||
<string name="tip_1_hint">Long-press a card to reorder it</string>
|
||
<string name="tip_1_detail">Long-press any service card on the home screen and drag it wherever you like. The order is saved automatically.</string>
|
||
<string name="tip_2_title">Widget top-left opens the app</string>
|
||
<string name="tip_2_hint">Tap the widget\'s top-left mark to open the app</string>
|
||
<string name="tip_2_detail">The RainyToken › mark at the top-left of the widget opens the app. Tapping elsewhere switches services.</string>
|
||
<string name="tip_3_title">Tap charts for details</string>
|
||
<string name="tip_3_hint">Tap a chart bar to see that time slot</string>
|
||
<string name="tip_3_detail">Tap or slide on the usage charts to inspect the exact values of a time slot.</string>
|
||
<string name="tip_4_title">Chart titles are clickable</string>
|
||
<string name="tip_4_hint">Tap a chart title for a per-model breakdown</string>
|
||
<string name="tip_4_detail">Tapping a chart card title (e.g. "Spending") shows a per-model breakdown dialog.</string>
|
||
<string name="tip_5_title">Switch chart timezone</string>
|
||
<string name="tip_5_hint">Usage details can toggle UTC+0 / UTC+8</string>
|
||
<string name="tip_5_detail">The usage details page can toggle between UTC+0 and UTC+8; chart labels follow along.</string>
|
||
<string name="tip_6_title">CCGO clear & resync</string>
|
||
<string name="tip_6_hint">CCGO details can clear cache and resync</string>
|
||
<string name="tip_6_detail">The "Clear" button on the CCGO usage details page deletes local cache and re-fetches everything.</string>
|
||
<string name="tip_7_title">View usage details</string>
|
||
<string name="tip_7_hint">Service cards link to usage charts</string>
|
||
<string name="tip_7_detail">Configured service cards show a "View usage details" entry at the bottom that opens the charts.</string>
|
||
<string name="tip_8_title">Browse raw data</string>
|
||
<string name="tip_8_hint">Top-right of usage details opens raw records</string>
|
||
<string name="tip_8_detail">"Raw data" at the top-right of usage details lists every record with pagination.</string>
|
||
<string name="tip_9_title">Pull-to-refresh syncs usage</string>
|
||
<string name="tip_9_hint">Pull to refresh syncs balances and usage</string>
|
||
<string name="tip_9_detail">Pull-to-refresh on the home screen refreshes balances and also syncs OCGO / CCGO usage records.</string>
|
||
<string name="tip_10_title">Credential guides</string>
|
||
<string name="tip_10_hint">Credential pages include step-by-step guides</string>
|
||
<string name="tip_10_detail">The "How to get" button at the bottom of credential pages walks through every service step by step.</string>
|
||
<string name="tip_11_title">Clipboard auto-import</string>
|
||
<string name="tip_11_hint">Codex supports one-tap import from clipboard</string>
|
||
<string name="tip_11_detail">The Codex credential page supports "Auto-import from clipboard": paste auth.json and it fills in with one tap.</string>
|
||
<string name="tip_12_title">Jump to a page number</string>
|
||
<string name="tip_12_hint">Raw data page accepts a page number</string>
|
||
<string name="tip_12_detail">The raw data page lets you enter a page number to jump directly — no need to flip through pages.</string>
|
||
<string name="tip_13_title">Widget auto-refresh</string>
|
||
<string name="tip_13_hint">Swipe to the widget and it auto-refreshes</string>
|
||
<string name="tip_13_detail">The widget refreshes balances when you swipe to it, or tap the ↻ button manually.</string>
|
||
|
||
<!-- ══════════ 图表/明细 ══════════ -->
|
||
<string name="count_times">%1$d calls</string>
|
||
<string name="date_select_day">Pick a date</string>
|
||
<string name="date_select_month">Pick a month (any day)</string>
|
||
<string name="date_pick_range">Date range</string>
|
||
<string name="date_pick_start">Start date</string>
|
||
<string name="date_pick_end">End date</string>
|
||
<string name="chart_detail_cost">Spending breakdown</string>
|
||
<string name="chart_detail_requests">Request breakdown</string>
|
||
<string name="chart_detail_tokens">Token breakdown</string>
|
||
<string name="dialog_clear_title">Clear data</string>
|
||
<string name="dialog_clear_body">This clears all cached CommandCode usage and re-syncs. It takes a few seconds.</string>
|
||
<string name="dialog_clear_confirm_question">Continue?</string>
|
||
<string name="action_confirm_countdown">Confirm (%1$ds)</string>
|
||
<string name="action_confirm_clear">Yes, clear</string>
|
||
<string name="action_close">Close</string>
|
||
<string name="range_from">From %1$s</string>
|
||
<string name="range_to">To %1$s</string>
|
||
<string name="action_apply_custom_range">Apply custom range</string>
|
||
<string name="action_confirm">OK</string>
|
||
<string name="date_end_before_start">End date cannot be earlier than start date %1$s</string>
|
||
<string name="time_hm">Time %1$s:%2$s</string>
|
||
<string name="common_no_data">No data</string>
|
||
<string name="chart_total_label">Total: %1$s</string>
|
||
<string name="usage_total">Total</string>
|
||
<string name="usage_records">Records</string>
|
||
<string name="stat_cache_read">Cache read</string>
|
||
<string name="stat_cache_write">Cache write</string>
|
||
<string name="usage_cache_breakdown">Cache token breakdown</string>
|
||
<string name="usage_cache_read_note">※ Cache reads are included in "Input tokens"</string>
|
||
<string name="usage_calls">%1$d calls</string>
|
||
<string name="date_format_md">MMM d, EEEE</string>
|
||
<string name="daily_count_cost">%1$d calls · $%2$s</string>
|
||
<string name="raw_record_title">Raw data</string>
|
||
<string name="stat_cache_write_5m">Cache write (5m)</string>
|
||
<string name="stat_cache_write_1h">Cache write (1h)</string>
|
||
<string name="raw_cost_usd">Cost (USD)</string>
|
||
<string name="raw_cost_raw">Cost (raw)</string>
|
||
|
||
<!-- ══════════ 凭据编辑(C 组) ══════════ -->
|
||
<string name="help_codex_4"> ~/.config/codex-oauth-proxy/auth.json</string>
|
||
<string name="help_codex_5">3. Open it with a text editor,</string>
|
||
<string name="help_codex_6"> copy everything and paste it above</string>
|
||
<string name="help_codex_7"> JSON example:</string>
|
||
<string name="help_codex_8"> {"tokens": {</string>
|
||
<string name="help_codex_9"> "access_token": "...",</string>
|
||
<string name="help_codex_10"> "refresh_token": "...",</string>
|
||
<string name="help_codex_11"> "expiresAt": 1783727108252</string>
|
||
<string name="help_codex_12"> }}</string>
|
||
<string name="help_codex_note">Tip: the app auto-refreshes the token after import,</string>
|
||
<string name="help_codex_note2">no manual updates needed.</string>
|
||
<string name="credential_title_ollama">Ollama credentials</string>
|
||
<string name="credential_hint_ollama">Copy the full cookie from your browser. After logging into ollama.com/settings, find the Cookie header in DevTools → Network and copy it.</string>
|
||
<string name="credential_update">Update credentials</string>
|
||
<string name="credential_save">Save credentials</string>
|
||
<string name="action_test_and_save">Test & save</string>
|
||
<string name="action_open_ollama_settings">Open Ollama Settings in browser</string>
|
||
<string name="action_copy_login_url">Copy login URL to clipboard</string>
|
||
<string name="activate_api_key_optional">One-tap usage API Key (optional)</string>
|
||
<string name="hint_ollama_trigger_key">With an Ollama Cloud API Key, the details page can send one request to activate usage stats. Get it at ollama.com/settings → API Keys.</string>
|
||
<string name="placeholder_ollama_api_key">ollama-xxx or sk-xxx</string>
|
||
<string name="action_save_api_key">Save API Key</string>
|
||
<string name="credential_title_opencode_go">OpenCode Go credentials</string>
|
||
<string name="credential_hint_opencode_go">Needs both auth cookie and workspaceId. The app fetches the dashboard via OkHttp and parses 5h/week/month usage.</string>
|
||
<string name="action_import_from_clipboard">Auto-import from clipboard</string>
|
||
<string name="placeholder_workspace_id">The {id} segment of the dashboard URL</string>
|
||
<string name="field_auth_cookie_value">auth Cookie value</string>
|
||
<string name="placeholder_auth_cookie">F12 → Cookies → opencode.ai → Value of auth</string>
|
||
<string name="action_how_get_two_values">How to get these two?</string>
|
||
<string name="action_open_login_entry">Open login page in browser</string>
|
||
<string name="hint_opencode_trigger_key">With an OpenCode Zen API Key, the details page can send one request to activate usage stats. Get it at opencode.ai/settings → API Keys.</string>
|
||
<string name="credential_title_ccgo">CommandCode credentials</string>
|
||
<string name="credential_hint_ccgo">Needs an API Key (for balance). Session Cookie (optional) for usage records, copied from browser DevTools. Balance works without it.</string>
|
||
<string name="placeholder_api_key_from_settings">Generate at Settings → API Keys</string>
|
||
<string name="field_session_cookie_optional">Session Cookie (optional)</string>
|
||
<string name="placeholder_session_cookie">F12 → Cookies → commandcode.ai → select all & paste</string>
|
||
<string name="action_how_get_api_key_cookie">How to get API Key and Cookie?</string>
|
||
<string name="api_key_form_title">Enter API Key</string>
|
||
<string name="api_key_form_hint">Credentials are encrypted with Android Keystore (AES-256 GCM) and stored in local DataStore.</string>
|
||
<string name="action_update">Update</string>
|
||
<string name="credential_title_codex">Codex / ChatGPT credentials</string>
|
||
<string name="credential_hint_codex">OAuth login fetches credentials automatically. You can also paste auth.json manually.</string>
|
||
<string name="action_oauth_login">🔐 OAuth login (recommended)</string>
|
||
<string name="or_manual_import">── or import manually ──</string>
|
||
<string name="field_auth_json">Full auth.json content</string>
|
||
<string name="placeholder_auth_json">Paste the full {"tokens": {...}} JSON</string>
|
||
<string name="credential_import_save">Import & save</string>
|
||
<string name="action_how_get_auth_json">How to get auth.json?</string>
|
||
<string name="manual_cookie_title">Paste session</string>
|
||
<string name="manual_cookie_hint">Google OAuth blocks the in-app WebView, so log in with a browser and paste the cookie here.</string>
|
||
<string name="field_cookie_string">Cookie string</string>
|
||
<string name="action_save_cookie">Save cookie</string>
|
||
|
||
<!-- ══════════ 服务详情/凭据校验(D 组) ══════════ -->
|
||
<string name="error_parse_empty_body">Empty response body</string>
|
||
<string name="error_parse_not_json">Response root is not a JSON object</string>
|
||
<string name="error_parse_no_windows">No usage window data found</string>
|
||
<string name="error_parse_no_models">Model list not found</string>
|
||
<string name="error_parse_models_empty">Model list is empty</string>
|
||
<string name="error_parse_malformed">Response format is abnormal</string>
|
||
<string name="window_every_week">Weekly</string>
|
||
<string name="window_spark">Spark</string>
|
||
<string name="msg_model_call_count">Model call count</string>
|
||
<string name="msg_stale_cache">Cached data · %1$s</string>
|
||
<string name="msg_showing_last_balance">Showing the last successfully fetched balance</string>
|
||
<string name="msg_monthly_spent">%1$s%2$s spent this month</string>
|
||
<string name="msg_balance_breakdown">Balance breakdown</string>
|
||
<string name="msg_granted_balance">Granted balance</string>
|
||
<string name="msg_topped_up_balance">Top-ups</string>
|
||
<string name="msg_loading_models">Loading model list...</string>
|
||
<string name="msg_select_model">Select model</string>
|
||
<string name="action_refresh_models">Refresh model list</string>
|
||
<string name="msg_triggering">Activating...</string>
|
||
<string name="action_retry_trigger">Retry usage activation</string>
|
||
<string name="action_trigger_usage">⚡ One-tap usage activation</string>
|
||
<string name="action_refresh_balance">Refresh balance</string>
|
||
<string name="action_relogin">Log in again</string>
|
||
<string name="action_configure_credential">Configure credential</string>
|
||
<string name="action_recharge">Top up / Recharge</string>
|
||
<string name="main_card_current_balance">Current balance</string>
|
||
<string name="main_card_5h_usage">5h live usage</string>
|
||
<string name="main_card_monthly_balance">Monthly balance</string>
|
||
<string name="main_card_session_usage">Session usage</string>
|
||
<string name="msg_please_select_model">Please select a model</string>
|
||
<string name="trigger_error_detail">Error details:</string>
|
||
<string name="trigger_api_response">API response:</string>
|
||
<string name="action_copy">Copy</string>
|
||
<string name="msg_key_length">*** (length %1$d) ***</string>
|
||
<string name="msg_key_masked">%1$s***%2$s (length %3$d)</string>
|
||
<string name="error_cookie_format">Bad cookie format, expected name1=value1; name2=value2</string>
|
||
<string name="msg_cookies_saved">%1$d cookies saved</string>
|
||
<string name="error_auth_json_empty">Please paste the auth.json content</string>
|
||
<string name="error_auth_json_missing_tokens">auth.json is missing access_token or refresh_token</string>
|
||
<string name="msg_codex_saved">Codex credential saved; token auto-refreshes when expiring</string>
|
||
<string name="error_auth_json_parse">Parse failed: %1$s</string>
|
||
<string name="msg_connect_success_dollar">Connected! Balance: $%1$s</string>
|
||
<string name="msg_api_key_saved">API Key saved</string>
|
||
<string name="msg_connect_success_session">Connected! Session: %1$s%% · %2$s</string>
|
||
<string name="msg_credential_deleted">Credential deleted</string>
|
||
<string name="error_clipboard_empty">Clipboard is empty</string>
|
||
<string name="msg_clipboard_ws_auth">Recognized workspaceId and auth cookie</string>
|
||
<string name="msg_clipboard_ws_only">Recognized workspaceId, please paste the auth cookie too</string>
|
||
<string name="msg_clipboard_auth_only">Recognized auth cookie, please paste the workspaceId too</string>
|
||
<string name="error_clipboard_none">No valid credential recognized</string>
|
||
|
||
<!-- ══════════ Codex OAuth 登录页 ══════════ -->
|
||
<string name="oauth_screen_title">Codex OAuth Login</string>
|
||
<string name="oauth_exchanging">Exchanging token...</string>
|
||
<string name="action_retry">Retry</string>
|
||
<string name="oauth_headless_title">Headless login</string>
|
||
<string name="oauth_steps">1. Tap "Open in browser" or copy the link below to a browser\n2. Complete login & authorization on the OpenAI page\n3. The browser redirects to a localhost address (page not loading is normal)\n4. Copy the full URL from the address bar and paste it below\n5. Tap "Submit callback URL"</string>
|
||
<string name="oauth_auth_url_label">Authorization link</string>
|
||
<string name="action_open_in_browser">Open in browser</string>
|
||
<string name="action_copy_link">Copy link</string>
|
||
<string name="oauth_paste_callback_hint">── paste the callback URL after login ──</string>
|
||
<string name="oauth_callback_url_label">Callback URL</string>
|
||
<string name="oauth_callback_url_placeholder">http://localhost:1455/auth/callback?code=...</string>
|
||
<string name="action_submit_callback">Submit callback URL</string>
|
||
<string name="action_regenerate_link">Regenerate auth link</string>
|
||
<string name="oauth_preparing">Preparing authorization...</string>
|
||
|
||
<!-- ══════════ Token 活动热力图 ══════════ -->
|
||
<string name="heatmap_title">Token Activity</string>
|
||
<string name="heatmap_view_daily">Daily</string>
|
||
<string name="heatmap_view_weekly">Weekly</string>
|
||
<string name="heatmap_view_cumulative">Cumulative</string>
|
||
<string name="heatmap_entry">OCGO Token Activity</string>
|
||
<string name="heatmap_entry_subtitle">OCGO daily Token usage heatmap</string>
|
||
<string name="heatmap_quick_entry">Token Activity</string>
|
||
<string name="heatmap_no_data">No data yet</string>
|
||
<string name="heatmap_legend_less">Less</string>
|
||
<string name="heatmap_legend_more">More</string>
|
||
<string name="heatmap_accessibility_desc">Token activity heatmap, %1$d days</string>
|
||
<string name="heatmap_accessibility_desc_weekly">Token activity heatmap, %1$d weeks</string>
|
||
<string name="heatmap_select_year">Select year</string>
|
||
<string name="heatmap_select_recent">Recent 365 days</string>
|
||
<string name="heatmap_stats_total">Total tokens</string>
|
||
<string name="heatmap_stats_peak">Peak tokens</string>
|
||
<string name="heatmap_stats_current_streak">Current streak</string>
|
||
<string name="heatmap_stats_max_streak">Longest streak</string>
|
||
<plurals name="heatmap_stats_days">
|
||
<item quantity="one">%1$d day</item>
|
||
<item quantity="other">%1$d days</item>
|
||
</plurals>
|
||
<string name="heatmap_day_used">%1$s used %2$s tokens</string>
|
||
<string name="heatmap_week_used">%1$s used %2$s tokens</string>
|
||
<!-- 个人资料(页面顶部,昵称/邮箱均可完全自定义) -->
|
||
<string name="heatmap_profile_title">Profile</string>
|
||
<string name="heatmap_profile_nickname">Nickname</string>
|
||
<string name="heatmap_profile_email">Email</string>
|
||
<string name="heatmap_profile_empty">Not set</string>
|
||
<string name="heatmap_profile_edit">Edit</string>
|
||
<string name="heatmap_profile_dialog_title">Edit Profile</string>
|
||
<string name="heatmap_profile_avatar_change">Change Avatar</string>
|
||
<string name="heatmap_profile_avatar_pick">Choose from gallery</string>
|
||
<string name="heatmap_profile_avatar_remove">Remove avatar</string>
|
||
<string name="heatmap_profile_save">Save</string>
|
||
<string name="heatmap_profile_cancel">Cancel</string>
|
||
<!-- 活动洞察 -->
|
||
<string name="heatmap_insights_title">Activity Insights</string>
|
||
<string name="heatmap_insights_requests">Total requests</string>
|
||
<plurals name="heatmap_insights_request_count">
|
||
<item quantity="one">%1$d request</item>
|
||
<item quantity="other">%1$d requests</item>
|
||
</plurals>
|
||
<string name="heatmap_insights_peak_hours">Peak hours</string>
|
||
<string name="heatmap_insight_hour_range">%1$d–%2$d</string>
|
||
<string name="month_1">Jan</string>
|
||
<string name="month_2">Feb</string>
|
||
<string name="month_3">Mar</string>
|
||
<string name="month_4">Apr</string>
|
||
<string name="month_5">May</string>
|
||
<string name="month_6">Jun</string>
|
||
<string name="month_7">Jul</string>
|
||
<string name="month_8">Aug</string>
|
||
<string name="month_9">Sep</string>
|
||
<string name="month_10">Oct</string>
|
||
<string name="month_11">Nov</string>
|
||
<string name="month_12">Dec</string>
|
||
<string name="field_api_key">API Key</string>
|
||
<string name="field_workspace_id">Workspace ID</string>
|
||
<string name="sub2_site_probing">正在识别站点…</string>
|
||
<string name="sub2_mode_api_key_desc">API Key:仅统计该 Key 的用量</string>
|
||
<string name="sub2_mode_panel_desc">面板登录:全账号消费统计,并解锁 Key 管理/分组/兑换</string>
|
||
<string name="sub2_panel_oneclick">账号一键登录(推荐)</string>
|
||
<string name="sub2_panel_logining">正在登录…</string>
|
||
<string name="sub2_panel_login">网页登录(备用,如开了二次验证)</string>
|
||
<string name="sub2_mode_account">账号密码</string>
|
||
<string name="sub2_mode_apikey">API Key</string>
|
||
<string name="sub2_field_totp">二次验证码(选填)</string>
|
||
<string name="sub2_home_no_usage">No usage data yet — pull to refresh</string>
|
||
<string name="sub2_panel_manage_title">Panel management</string>
|
||
<string name="sub2_panel_load_keys">Load API Key list</string>
|
||
<string name="sub2_panel_no_keys">No API Key yet</string>
|
||
<string name="sub2_panel_create">New Key</string>
|
||
<string name="sub2_panel_redeem">Redeem code</string>
|
||
<string name="sub2_panel_create_title">New API Key</string>
|
||
<string name="sub2_panel_key_name">Key name</string>
|
||
<string name="sub2_panel_group_optional">Group (optional, default if unselected)</string>
|
||
<string name="sub2_panel_no_groups">No group available</string>
|
||
<string name="sub2_panel_create_success_title">✓ API Key created</string>
|
||
<string name="sub2_panel_create_success_hint">This Key is shown only once — copy it now:</string>
|
||
<string name="sub2_panel_copy_and_close">Copy & close</string>
|
||
<string name="sub2_panel_redeem_code_label">Redeem code</string>
|
||
<string name="sub2_panel_switch_group">Switch group</string>
|
||
<string name="sub2_panel_group_column">Group</string>
|
||
<string name="sub2_panel_default_group">Default group</string>
|
||
<string name="sub2_panel_never_used">never used</string>
|
||
<string name="sub2_panel_last_used">last %1$s</string>
|
||
<string name="sub2_panel_key_id">%1$s (ID %2$d)</string>
|
||
<string name="sub2_panel_copied">API Key copied</string>
|
||
<string name="sub2_panel_low_balance">⚠ Low balance: $%1$s left — top up or redeem a code</string>
|
||
<string name="sub2_models_alltime_suffix">(all-time, not limited to the selected period)</string>
|
||
<string name="sub2_panel_keys_header">API keys</string>
|
||
<string name="sub2_auth_panel">Email login</string>
|
||
<string name="sub2_auth_apikey">API key login</string>
|
||
<string name="sub2_home_requests">%1$d req</string>
|
||
<string name="sub2_balance_label">Balance</string>
|
||
</resources> |