From f9b09a31d9203d7f94b7984701417449343a3fb5 Mon Sep 17 00:00:00 2001 From: lzt404 <2596933790@qq.com> Date: Wed, 29 Jul 2026 15:16:28 +0800 Subject: [PATCH] feat(i18n): update latency and TTFT labels in Japanese and Chinese translations --- src/i18n/ja.ts | 3 ++- src/i18n/resources.ts | 6 ++++-- src/pages/UsageRecordsPage.tsx | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/i18n/ja.ts b/src/i18n/ja.ts index 03936c1..8ebb1f7 100644 --- a/src/i18n/ja.ts +++ b/src/i18n/ja.ts @@ -179,7 +179,8 @@ export const jaOverrides = { 'usage.column.model': 'モデル', 'usage.column.source': 'ソース', 'usage.column.result': '結果', - 'usage.column.latency': 'レイテンシ', + 'usage.column.latency': '合計所要時間', + 'usage.column.ttft': '初回トークン遅延', 'usage.column.input': '入力', 'usage.column.output': '出力', 'usage.column.reasoning': '推論', diff --git a/src/i18n/resources.ts b/src/i18n/resources.ts index 760f69c..8195044 100644 --- a/src/i18n/resources.ts +++ b/src/i18n/resources.ts @@ -182,7 +182,8 @@ export const zhCN = { 'usage.column.model': '模型', 'usage.column.source': '来源', 'usage.column.result': '结果', - 'usage.column.latency': '延迟', + 'usage.column.latency': '总耗时', + 'usage.column.ttft': '首字延迟', 'usage.column.input': '输入', 'usage.column.output': '输出', 'usage.column.reasoning': '思考', @@ -1025,7 +1026,8 @@ export const en: Record = { 'usage.column.model': 'Model', 'usage.column.source': 'Source', 'usage.column.result': 'Result', - 'usage.column.latency': 'Latency', + 'usage.column.latency': 'Total Duration', + 'usage.column.ttft': 'First Token Latency', 'usage.column.input': 'Input', 'usage.column.output': 'Output', 'usage.column.reasoning': 'Reasoning', diff --git a/src/pages/UsageRecordsPage.tsx b/src/pages/UsageRecordsPage.tsx index 91d4e15..85575f3 100644 --- a/src/pages/UsageRecordsPage.tsx +++ b/src/pages/UsageRecordsPage.tsx @@ -464,7 +464,7 @@ function CategoryPanel({ title, items, compactLabels = false }: { title: string; function EventsView({ events, onPage }: { events: UsageEventPage; onPage: (page: number) => void }) { const { t } = useI18n(); - return
{t('usage.events.total', { count: compactNumber(events.total) })}{t('usage.events.page', { page: events.page, total: events.totalPages })}
{events.items.length ?
{events.items.map((record) => )}
{t('usage.column.time')}{t('usage.column.model')}Provider{t('usage.column.source')}API Key{t('usage.column.input')}{t('usage.column.output')}{t('usage.column.reasoning')}{t('usage.column.cache')}{t('usage.column.total')}{t('usage.column.result')}{t('usage.column.latency')}TTFT
{formatTime(record.timestamp)}{record.alias || record.model}{record.alias || record.reasoning_effort ? {record.alias ? record.model : ''}{record.alias && record.reasoning_effort ? ' · ' : ''}{record.reasoning_effort} : null}{record.provider || '—'}{record.source_display || '—'}{record.api_key_remark || t('usage.key.noRemark')}{record.api_key_display || '—'}{compactNumber(record.tokens.input_tokens)}{compactNumber(record.tokens.output_tokens)}{compactNumber(record.tokens.reasoning_tokens)}{compactNumber(record.tokens.cache_read_tokens)}{compactNumber(record.tokens.total_tokens)}{record.failed ? t('usage.result.failed') : t('usage.result.success')}{record.latency_ms} ms{record.ttft_ms == null ? '—' : `${record.ttft_ms} ms`}
: }
; + return
{t('usage.events.total', { count: compactNumber(events.total) })}{t('usage.events.page', { page: events.page, total: events.totalPages })}
{events.items.length ?
{events.items.map((record) => )}
{t('usage.column.time')}{t('usage.column.model')}Provider{t('usage.column.source')}API Key{t('usage.column.input')}{t('usage.column.output')}{t('usage.column.reasoning')}{t('usage.column.cache')}{t('usage.column.total')}{t('usage.column.result')}{t('usage.column.latency')}{t('usage.column.ttft')}
{formatTime(record.timestamp)}{record.alias || record.model}{record.alias || record.reasoning_effort ? {record.alias ? record.model : ''}{record.alias && record.reasoning_effort ? ' · ' : ''}{record.reasoning_effort} : null}{record.provider || '—'}{record.source_display || '—'}{record.api_key_remark || t('usage.key.noRemark')}{record.api_key_display || '—'}{compactNumber(record.tokens.input_tokens)}{compactNumber(record.tokens.output_tokens)}{compactNumber(record.tokens.reasoning_tokens)}{compactNumber(record.tokens.cache_read_tokens)}{compactNumber(record.tokens.total_tokens)}{record.failed ? t('usage.result.failed') : t('usage.result.success')}{record.latency_ms} ms{record.ttft_ms == null ? '—' : `${record.ttft_ms} ms`}
: }
; } type PriceDraft = {