feat(ai): translate benchmark comparison metrics (#14182)

This commit is contained in:
ssongliu
2026-10-25 14:05:09 +08:00
committed by GitHub
parent c4b76a8e89
commit 14be5b7870
15 changed files with 129 additions and 6 deletions
+8
View File
@@ -1875,6 +1875,14 @@ const message = {
'Only successful runs without request anomalies enter the median and min/max summaries. P99 is the median of per-run P99 values. Cache and external traffic are uncontrolled.',
},
benchmarkOverview: {
comparison: 'Scenario and concurrency comparison',
comparisonHelp: 'Click a scenario name to inspect that combination.',
sharedPrefix: 'Shared prefix ratio',
sharedPrefixHelp: 'Configured prefix tokens as a proportion of input length, not a measured cache hit rate.',
singleRequestThroughput: 'Per-request output throughput',
singleRequestThroughputHelp:
'Output tokens from successful requests divided by their total end-to-end time, including first-token wait, for each run. Shows the median of valid runs, or — when data is missing.',
aggregateOutputThroughput: 'Total output throughput',
noResults: 'No valid test results. Check the failure reason and logs.',
noGroupResults: 'No valid results for this combination. Select another scenario or concurrency.',
partial: 'Partial results: the test did not fully succeed. Metrics cover valid points only.',
+9
View File
@@ -1890,6 +1890,15 @@ const message = {
'La mediana y los mínimos/máximos solo incluyen ejecuciones correctas sin anomalías. P99 es la mediana de los P99 de cada ejecución. La caché y el tráfico externo no están controlados.',
},
benchmarkOverview: {
comparison: 'Comparación de escenarios y concurrencia',
comparisonHelp: 'Haz clic en un escenario para ver los detalles de esa combinación.',
sharedPrefix: 'Proporción de prefijo compartido',
sharedPrefixHelp:
'Tokens de prefijo configurados respecto a la longitud de entrada; no es una tasa medida de aciertos de caché.',
singleRequestThroughput: 'Rendimiento de salida por solicitud',
singleRequestThroughputHelp:
'Tokens de salida de solicitudes exitosas divididos por su tiempo total de extremo a extremo, incluida la espera del primer token, en cada ejecución. Se muestra la mediana de las ejecuciones válidas, o — si faltan datos.',
aggregateOutputThroughput: 'Rendimiento total de salida',
noResults: 'No hay resultados válidos. Consulte la causa del fallo y los registros.',
noGroupResults: 'Esta combinación no tiene resultados válidos. Seleccione otro escenario o concurrencia.',
partial: 'Resultados parciales: la prueba no se completó con éxito. Solo se incluyen puntos válidos.',
+9
View File
@@ -1856,6 +1856,15 @@ const message = {
'میانه و کمینه/بیشینه فقط از اجراهای موفق بدون ناهنجاری درخواست محاسبه می‌شوند. P99 میانه P99 هر اجرا است. کش و ترافیک بیرونی کنترل نشده‌اند.',
},
benchmarkOverview: {
comparison: 'مقایسه سناریوها و هم\u200cزمانی',
comparisonHelp: 'برای مشاهده جزئیات هر ترکیب روی نام سناریو کلیک کنید.',
sharedPrefix: 'نسبت پیشوند مشترک',
sharedPrefixHelp:
'نسبت توکن\u200cهای پیشوند پیکربندی\u200cشده به طول ورودی است، نه نرخ اندازه\u200cگیری\u200cشده برخورد حافظه نهان.',
singleRequestThroughput: 'توان خروجی هر درخواست',
singleRequestThroughputHelp:
'در هر اجرا، تعداد توکن\u200cهای خروجی درخواست\u200cهای موفق بر مجموع زمان کامل آن\u200cها، شامل انتظار اولین توکن، تقسیم می\u200cشود. میانه اجراهای معتبر نمایش داده می\u200cشود؛ در نبود داده — نمایش داده می\u200cشود.',
aggregateOutputThroughput: 'توان خروجی کل',
noResults: 'نتیجه معتبر وجود ندارد. علت شکست و گزارش‌ها را بررسی کنید.',
noGroupResults: 'برای این ترکیب نتیجه معتبر وجود ندارد. سناریو یا هم‌زمانی دیگری انتخاب کنید.',
partial: 'نتایج جزئی: آزمون کاملاً موفق نبوده است. معیارها فقط نقاط معتبر را شامل می‌شوند.',
+9
View File
@@ -1857,6 +1857,15 @@ const message = {
'要求異常のない成功した試行のみを集計し、中央値と最小・最大値を表示します。P99 は試行ごとの P99 の中央値です。キャッシュと外部トラフィックは制御されません。',
},
benchmarkOverview: {
comparison: 'シナリオと同時実行数の比較',
comparisonHelp: 'シナリオ名をクリックすると、その組み合わせの詳細を表示します。',
sharedPrefix: '共有プレフィックス比率',
sharedPrefixHelp:
'入力長に対する設定済みプレフィックストークン数の割合です。実測のキャッシュヒット率ではありません。',
singleRequestThroughput: 'リクエスト単位の出力スループット',
singleRequestThroughputHelp:
'各実行で成功したリクエストの出力トークン総数を、最初のトークンの待ち時間を含む合計応答時間で割ります。有効な実行の中央値を表示し、データがない場合は — を表示します。',
aggregateOutputThroughput: '合計出力スループット',
noResults: '有効なテスト結果がありません。失敗の原因とログを確認してください。',
noGroupResults: 'この組み合わせに有効な結果はありません。シナリオまたは同時実行数を変更してください。',
partial: '部分的な結果:テストは完全には成功していません。有効な測定点のみを表示します。',
+8
View File
@@ -1837,6 +1837,14 @@ const message = {
'요청 이상이 없는 성공한 실행만 중앙값과 최솟값/최댓값에 포함합니다. P99는 각 실행 P99의 중앙값입니다. 캐시와 외부 트래픽은 통제되지 않습니다.',
},
benchmarkOverview: {
comparison: '시나리오 및 동시 요청 수 비교',
comparisonHelp: '시나리오 이름을 클릭하면 해당 조합의 상세 지표를 확인할 수 있습니다.',
sharedPrefix: '공유 접두사 비율',
sharedPrefixHelp: '입력 길이에 대한 설정된 접두사 토큰 수의 비율이며, 측정된 캐시 적중률이 아닙니다.',
singleRequestThroughput: '요청별 출력 처리량',
singleRequestThroughputHelp:
'각 실행에서 성공한 요청의 출력 토큰 합계를 첫 토큰 대기를 포함한 전체 응답 시간 합계로 나눕니다. 유효한 실행의 중앙값을 표시하며 데이터가 없으면 —를 표시합니다.',
aggregateOutputThroughput: '총 출력 처리량',
noResults: '유효한 테스트 결과가 없습니다. 실패 원인과 로그를 확인하세요.',
noGroupResults: '이 조합에 유효한 결과가 없습니다. 시나리오 또는 동시 실행 수를 변경하세요.',
partial: '부분 결과: 테스트가 완전히 성공하지 않았습니다. 유효한 측정점만 반영합니다.',
+8
View File
@@ -1828,6 +1828,14 @@ const message = {
'ຄ່າກາງ ແລະ ຄ່າຕ່ຳສຸດ/ສູງສຸດໃຊ້ສະເພາະການທົດສອບສຳເລັດທີ່ບໍ່ມີຄຳຮ້ອງຂໍຜິດປົກກະຕິ. P99 ແມ່ນຄ່າກາງຂອງ P99 ແຕ່ລະຄັ້ງ. ແຄຊ ແລະ ການຈະລາຈອນພາຍນອກບໍ່ໄດ້ຄວບຄຸມ.',
},
benchmarkOverview: {
comparison: 'ປຽບທຽບສະຖານະການ ແລະ ຈຳນວນຄຳຮ້ອງພ້ອມກັນ',
comparisonHelp: 'ຄລິກຊື່ສະຖານະການເພື່ອເບິ່ງລາຍລະອຽດຂອງຊຸດນັ້ນ.',
sharedPrefix: 'ອັດຕາສ່ວນ prefix ຮ່ວມ',
sharedPrefixHelp: 'ອັດຕາສ່ວນໂທເຄັນ prefix ທີ່ຕັ້ງໄວ້ຕໍ່ຄວາມຍາວອິນພຸດ ບໍ່ແມ່ນອັດຕາ cache hit ທີ່ວັດແທກໄດ້.',
singleRequestThroughput: 'ອັດຕາອອກຕໍ່ຄຳຮ້ອງ',
singleRequestThroughputHelp:
'ໃນແຕ່ລະຮອບ ນຳຈຳນວນໂທເຄັນອອກຂອງຄຳຮ້ອງທີ່ສຳເລັດຫານດ້ວຍເວລາລວມຂອງຄຳຮ້ອງເຫຼົ່ານັ້ນ ລວມເວລາລໍຖ້າໂທເຄັນທຳອິດ. ສະແດງຄ່າມັດທະຍະຖານຂອງຮອບທີ່ໃຊ້ໄດ້ ຫຼື — ຖ້າຂາດຂໍ້ມູນ.',
aggregateOutputThroughput: 'ອັດຕາອອກລວມ',
noResults: 'ບໍ່ມີຜົນການທົດສອບທີ່ໃຊ້ໄດ້. ກວດສອບສາເຫດ ແລະ ບັນທຶກ.',
noGroupResults: 'ບໍ່ມີຜົນທີ່ໃຊ້ໄດ້ສຳລັບຊຸດນີ້. ເລືອກສະຖານະການ ຫຼື ຈຳນວນພ້ອມກັນອື່ນ.',
partial: 'ຜົນບາງສ່ວນ: ການທົດສອບບໍ່ສຳເລັດທັງໝົດ. ຕົວຊີ້ວັດລວມສະເພາະຈຸດທີ່ໃຊ້ໄດ້.',
+9
View File
@@ -1892,6 +1892,15 @@ const message = {
'Median dan minimum/maksimum hanya melibatkan ujian berjaya tanpa anomali permintaan. P99 ialah median P99 setiap ujian. Cache dan trafik luaran tidak dikawal.',
},
benchmarkOverview: {
comparison: 'Perbandingan senario dan keserentakan',
comparisonHelp: 'Klik nama senario untuk melihat butiran gabungan itu.',
sharedPrefix: 'Nisbah awalan dikongsi',
sharedPrefixHelp:
'Nisbah token awalan yang dikonfigurasi kepada panjang input, bukan kadar hit cache yang diukur.',
singleRequestThroughput: 'Daya pemprosesan output setiap permintaan',
singleRequestThroughputHelp:
'Token output permintaan berjaya dibahagi dengan jumlah masa hujung ke hujungnya, termasuk masa menunggu token pertama, bagi setiap larian. Memaparkan median larian sah, atau — jika data tiada.',
aggregateOutputThroughput: 'Jumlah daya pemprosesan output',
noResults: 'Tiada keputusan ujian yang sah. Semak sebab kegagalan dan log.',
noGroupResults: 'Tiada keputusan sah untuk gabungan ini. Pilih senario atau keserentakan lain.',
partial: 'Keputusan separa: ujian tidak berjaya sepenuhnya. Metrik hanya merangkumi titik yang sah.',
+9
View File
@@ -1889,6 +1889,15 @@ const message = {
'A mediana e os valores mínimo/máximo incluem apenas execuções bem-sucedidas sem anomalias. P99 é a mediana dos P99 de cada execução. Cache e tráfego externo não são controlados.',
},
benchmarkOverview: {
comparison: 'Comparação de cenários e concorrência',
comparisonHelp: 'Clique em um cenário para ver os detalhes dessa combinação.',
sharedPrefix: 'Proporção de prefixo compartilhado',
sharedPrefixHelp:
'Tokens de prefixo configurados em relação ao tamanho da entrada; não é uma taxa medida de acertos de cache.',
singleRequestThroughput: 'Vazão de saída por solicitação',
singleRequestThroughputHelp:
'Tokens de saída das solicitações bem-sucedidas divididos pelo tempo total de ponta a ponta, incluindo a espera pelo primeiro token, em cada execução. Exibe a mediana das execuções válidas, ou — se faltarem dados.',
aggregateOutputThroughput: 'Vazão total de saída',
noResults: 'Nenhum resultado válido. Consulte o motivo da falha e os logs.',
noGroupResults: 'Nenhum resultado válido nesta combinação. Selecione outro cenário ou concorrência.',
partial:
+8
View File
@@ -1884,6 +1884,14 @@ const message = {
'Медиана и минимум/максимум рассчитываются только по успешным запускам без аномалий запросов. P99 — медиана P99 отдельных запусков. Кеш и внешний трафик не контролируются.',
},
benchmarkOverview: {
comparison: 'Сравнение сценариев и параллелизма',
comparisonHelp: 'Нажмите на название сценария, чтобы открыть показатели этой комбинации.',
sharedPrefix: 'Доля общего префикса',
sharedPrefixHelp: 'Доля настроенных токенов префикса во входной длине, а не измеренная доля попаданий в кеш.',
singleRequestThroughput: 'Выходная пропускная способность на запрос',
singleRequestThroughputHelp:
'Для каждого прогона число выходных токенов успешных запросов делится на суммарное время их выполнения, включая ожидание первого токена. Показана медиана корректных прогонов; при отсутствии данных —.',
aggregateOutputThroughput: 'Общая выходная пропускная способность',
noResults: 'Нет достоверных результатов. Проверьте причину сбоя и журналы.',
noGroupResults: 'Нет достоверных результатов для этой комбинации. Выберите другой сценарий или параллелизм.',
partial:
+9
View File
@@ -1889,6 +1889,15 @@ const message = {
'Medyan ve en düşük/en yüksek değerler yalnızca istek anomalisi olmayan başarılı çalışmaları içerir. P99, çalışma başına P99 değerlerinin medyanıdır. Önbellek ve dış trafik kontrol edilmez.',
},
benchmarkOverview: {
comparison: 'Senaryo ve eşzamanlılık karşılaştırması',
comparisonHelp: 'Bu birleşimin ayrıntılarını görmek için senaryo adına tıklayın.',
sharedPrefix: 'Paylaşılan önek oranı',
sharedPrefixHelp:
'Yapılandırılan önek belirteçlerinin girdi uzunluğuna oranıdır; ölçülen önbellek isabet oranı değildir.',
singleRequestThroughput: 'İstek başına çıktı hızı',
singleRequestThroughputHelp:
'Her çalıştırmada başarılı isteklerin çıktı belirteçleri, ilk belirteci bekleme dahil toplam uçtan uca sürelerine bölünür. Geçerli çalıştırmaların medyanı gösterilir; veri yoksa — gösterilir.',
aggregateOutputThroughput: 'Toplam çıktı hızı',
noResults: 'Geçerli test sonucu yok. Hata nedenini ve günlükleri kontrol edin.',
noGroupResults: 'Bu birleşim için geçerli sonuç yok. Başka bir senaryo veya eşzamanlılık seçin.',
partial: 'Kısmi sonuçlar: test tamamen başarılı olmadı. Metrikler yalnızca geçerli noktaları kapsar.',
+8
View File
@@ -1771,6 +1771,14 @@ const message = {
'彙總僅採用成功且無請求異常的重複測試,顯示中位數與最小/最大值。P99 是各次 P99 的中位數;快取與外部流量未受控。',
},
benchmarkOverview: {
comparison: '情境與並行數對照',
comparisonHelp: '點選情境名稱查看該組合的指標詳情。',
sharedPrefix: '共用前綴比例',
sharedPrefixHelp: '共用前綴比例為設定的前綴 Token 數占輸入長度的比例,不代表實測快取命中率。',
singleRequestThroughput: '單路輸出吞吐量',
singleRequestThroughputHelp:
'每輪成功請求的輸出 Token 總數 ÷ 成功請求總耗時(包含首 Token 等待),再對有效輪次取中位數。缺少資料時顯示 —。',
aggregateOutputThroughput: '總輸出吞吐量',
noResults: '沒有有效的測試結果,請查看失敗原因和日誌。',
noGroupResults: '此組合沒有有效結果,請切換場景或並行數。',
partial: '部分結果:本次測試未完整成功,指標僅代表有效測點。',
+8
View File
@@ -1784,6 +1784,14 @@ const message = {
'汇总仅使用成功且无请求异常的重复测试,显示中位数和最小/最大值。P99 是每次测试 P99 的中位数;缓存和外部流量未受控。',
},
benchmarkOverview: {
comparison: '场景与并发对照',
comparisonHelp: '点击场景名称查看该组合的指标详情。',
sharedPrefix: '共享前缀比例',
sharedPrefixHelp: '共享前缀比例为配置的前缀 Token 数占输入长度的比例,不代表实测缓存命中率。',
singleRequestThroughput: '单路输出吞吐',
singleRequestThroughputHelp:
'每轮成功请求的输出 Token 总数 ÷ 成功请求总耗时(包含首 Token 等待),再对有效轮次取中位数。缺少数据时显示 —。',
aggregateOutputThroughput: '总输出吞吐',
noResults: '没有有效的测试结果,请查看失败原因和日志。',
noGroupResults: '此组合没有有效结果,请切换场景或并发数。',
partial: '部分结果:本次测试未完整成功,指标仅代表有效测点。',
@@ -55,7 +55,7 @@ import { readCachedPageSize } from '@/utils/panel-cache';
import { Website } from '@/api/interface/website';
import { deleteAcmeAccount, searchAcmeAccount, updateAcmeAccount } from '@/api/modules/website';
import i18n from '@/lang';
import { useSearchReset } from '@/composables/useSearchReset';
import { useSearchState } from '@/utils/search-reset';
import { onMounted, reactive, ref, toRef } from 'vue';
import Create from './create/index.vue';
import { getAccountName, getKeyName } from '@/utils/ssl';
@@ -120,7 +120,14 @@ const deleteAccount = async (row: any) => {
};
const routerButton = [{ label: i18n.global.t('website.acmeAccountManage'), path: '/websites/ssl/acme-account' }];
useSearchReset({ page: toRef(paginationConfig, 'currentPage') }, { onRevisit: () => search() });
useSearchState(
'website/ssl/acme-account/index',
{
page: toRef(paginationConfig, 'currentPage'),
pageSize: toRef(paginationConfig, 'pageSize'),
},
{ onRevisit: () => search() },
);
onMounted(() => {
search();
});
+9 -2
View File
@@ -51,7 +51,7 @@ import { Website } from '@/api/interface/website';
import { deleteCA, searchCAs, downloadCAFile } from '@/api/modules/website';
import i18n from '@/lang';
import { onMounted, reactive, ref, toRef } from 'vue';
import { useSearchReset } from '@/composables/useSearchReset';
import { useSearchState } from '@/utils/search-reset';
import Create from './create/index.vue';
import Upload from './upload/index.vue';
import Detail from './detail/index.vue';
@@ -94,7 +94,14 @@ const buttons = [
},
];
useSearchReset({ page: toRef(paginationConfig, 'currentPage') }, { onRevisit: () => search() });
useSearchState(
'website/ssl/ca/index',
{
page: toRef(paginationConfig, 'currentPage'),
pageSize: toRef(paginationConfig, 'pageSize'),
},
{ onRevisit: () => search() },
);
const search = async () => {
const req = {
@@ -51,7 +51,7 @@ import { Website } from '@/api/interface/website';
import { deleteDnsAccount, searchDnsAccount } from '@/api/modules/website';
import { onMounted, reactive, ref, toRef } from 'vue';
import i18n from '@/lang';
import { useSearchReset } from '@/composables/useSearchReset';
import { useSearchState } from '@/utils/search-reset';
import { getDNSName } from '@/utils/ssl';
const paginationConfig = reactive({
cacheSizeKey: 'dns-account-page-size',
@@ -117,5 +117,12 @@ onMounted(() => {
});
const routerButton = [{ label: i18n.global.t('website.dnsAccountManage'), path: '/websites/ssl/dns-account' }];
useSearchReset({ page: toRef(paginationConfig, 'currentPage') }, { onRevisit: () => search() });
useSearchState(
'website/ssl/dns-account/index',
{
page: toRef(paginationConfig, 'currentPage'),
pageSize: toRef(paginationConfig, 'pageSize'),
},
{ onRevisit: () => search() },
);
</script>