i18n: translate frontend UI strings to English
This commit is contained in:
@@ -159,24 +159,24 @@ export default function MonitorPage() {
|
||||
<div className="stats-grid">
|
||||
<div className="stat-card total">
|
||||
<span className="stat-number">{data.issues.total_issues}</span>
|
||||
<span className="stat-label">总 Issues</span>
|
||||
<span className="stat-label">Total Issues</span>
|
||||
</div>
|
||||
<div className="stat-card" style={{ borderLeftColor: 'var(--accent)' }}>
|
||||
<span className="stat-number">{data.issues.new_issues_24h}</span>
|
||||
<span className="stat-label">24小时新增</span>
|
||||
<span className="stat-label">New (24h)</span>
|
||||
</div>
|
||||
<div className="stat-card" style={{ borderLeftColor: 'var(--success)' }}>
|
||||
<span className="stat-number">{data.issues.processed_issues_24h}</span>
|
||||
<span className="stat-label">24小时已处理</span>
|
||||
<span className="stat-label">Processed (24h)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="section">
|
||||
<div className="page-header">
|
||||
<h3>Provider Usage</h3>
|
||||
<span className="text-dim">更新于 {data.generated_at}</span>
|
||||
<span className="text-dim">Updated at {data.generated_at}</span>
|
||||
</div>
|
||||
{data.providers.length === 0 ? <p className="empty">暂无 provider 账号</p> : (
|
||||
{data.providers.length === 0 ? <p className="empty">No provider accounts</p> : (
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -209,8 +209,8 @@ export default function MonitorPage() {
|
||||
</div>
|
||||
|
||||
<div className="section">
|
||||
<h3>服务器监测</h3>
|
||||
{data.servers.length === 0 ? <p className="empty">暂无监测服务器</p> : (
|
||||
<h3>Server Monitoring</h3>
|
||||
{data.servers.length === 0 ? <p className="empty">No monitored servers</p> : (
|
||||
<div className="monitor-grid">
|
||||
{data.servers.map((s) => (
|
||||
<div key={s.server_id} className="monitor-card">
|
||||
@@ -234,11 +234,11 @@ export default function MonitorPage() {
|
||||
|
||||
{canAdmin && (
|
||||
<div className="section">
|
||||
<h3>Admin 管理</h3>
|
||||
<h3>Admin</h3>
|
||||
|
||||
<div className="monitor-admin">
|
||||
<div className="monitor-card">
|
||||
<h4>Provider 账号</h4>
|
||||
<h4>Provider Accounts</h4>
|
||||
<div className="inline-form">
|
||||
<select value={providerForm.provider} onChange={(e) => setProviderForm({ ...providerForm, provider: e.target.value })}>
|
||||
<option value='openai'>openai</option>
|
||||
@@ -249,30 +249,30 @@ export default function MonitorPage() {
|
||||
</select>
|
||||
<input placeholder='label' value={providerForm.label} onChange={(e) => setProviderForm({ ...providerForm, label: e.target.value })} />
|
||||
<input placeholder='credential' value={providerForm.credential} onChange={(e) => setProviderForm({ ...providerForm, credential: e.target.value })} />
|
||||
<button className="btn-primary" onClick={testProvider}>测试连接</button>
|
||||
<button className="btn-primary" onClick={addProvider}>添加账号</button>
|
||||
<button className="btn-primary" onClick={testProvider}>Test Connection</button>
|
||||
<button className="btn-primary" onClick={addProvider}>Add Account</button>
|
||||
</div>
|
||||
{providerTestMsg && <p className="text-dim">{providerTestMsg}</p>}
|
||||
<ul>
|
||||
{providerAccounts.map((p) => (
|
||||
<li key={p.id}>{p.provider} / {p.label} / {p.credential_masked} <button className="btn-danger" onClick={() => deleteProvider(p.id)}>删除</button></li>
|
||||
<li key={p.id}>{p.provider} / {p.label} / {p.credential_masked} <button className="btn-danger" onClick={() => deleteProvider(p.id)}>Delete</button></li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="monitor-card">
|
||||
<h4>服务器</h4>
|
||||
<h4>Servers</h4>
|
||||
<div className="inline-form">
|
||||
<input placeholder='identifier' value={serverForm.identifier} onChange={(e) => setServerForm({ ...serverForm, identifier: e.target.value })} />
|
||||
<input placeholder='display_name' value={serverForm.display_name} onChange={(e) => setServerForm({ ...serverForm, display_name: e.target.value })} />
|
||||
<button className="btn-primary" onClick={addServer}>添加服务器</button>
|
||||
<button className="btn-primary" onClick={addServer}>Add Server</button>
|
||||
</div>
|
||||
<ul>
|
||||
{servers.map((s) => (
|
||||
<li key={s.server_id}>
|
||||
{s.display_name} ({s.identifier})
|
||||
<button className="btn-secondary" onClick={() => createChallenge(s.server_id)} style={{ marginLeft: 8 }}>生成挑战</button>
|
||||
<button className="btn-danger" onClick={() => deleteServer(s.server_id)} style={{ marginLeft: 8 }}>删除</button>
|
||||
<button className="btn-secondary" onClick={() => createChallenge(s.server_id)} style={{ marginLeft: 8 }}>Generate Challenge</button>
|
||||
<button className="btn-danger" onClick={() => deleteServer(s.server_id)} style={{ marginLeft: 8 }}>Delete</button>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
|
||||
Reference in New Issue
Block a user