feat(jobs)!: SnapOtter 2.0 phase 2 job spine: async queues, worker pools, object storage, admin dashboard (#217)

This commit is contained in:
SnapOtter
2026-06-13 10:17:13 +08:00
parent 1c724d5d21
commit c451b939c7
130 changed files with 10438 additions and 3592 deletions
+39
View File
@@ -270,6 +270,7 @@ export const ar: TranslationKeys = {
name: "منشئ Pipeline",
description: "ربط عدة أدوات في سير عمل واحد",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1446,6 +1447,7 @@ export const ar: TranslationKeys = {
teams: "الفرق",
roles: "الأدوار",
auditLog: "سجل التدقيق",
usage: "Usage",
apiKeys: "مفاتيح API",
aiFeatures: "ميزات AI",
tools: "الأدوات",
@@ -1506,6 +1508,10 @@ export const ar: TranslationKeys = {
maxSplitGrid: "شبكة التقسيم القصوى",
maxPdfPages: "صفحات PDF القصوى",
sessionDuration: "مدة الجلسة",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "الأمان",
@@ -1656,6 +1662,33 @@ export const ar: TranslationKeys = {
hoursAgo: "منذ {hrs} ساعة",
daysAgo: "منذ {days} يوم",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "مفاتيح API",
description: "إدارة مفاتيح API للوصول البرمجي إلى SnapOtter.",
@@ -1717,6 +1750,12 @@ export const ar: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "حول",
+39
View File
@@ -275,6 +275,7 @@ export const de: TranslationKeys = {
name: "Pipeline-Builder",
description: "Mehrere Werkzeuge zu einem Workflow verketten",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1460,6 +1461,7 @@ export const de: TranslationKeys = {
teams: "Teams",
roles: "Rollen",
auditLog: "Audit-Protokoll",
usage: "Usage",
apiKeys: "API-Schluessel",
aiFeatures: "AI-Funktionen",
tools: "Werkzeuge",
@@ -1521,6 +1523,10 @@ export const de: TranslationKeys = {
maxSplitGrid: "Maximales Aufteilungsraster",
maxPdfPages: "Maximale PDF-Seiten",
sessionDuration: "Sitzungsdauer",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Sicherheit",
@@ -1676,6 +1682,33 @@ export const de: TranslationKeys = {
hoursAgo: "Vor {hrs} Std.",
daysAgo: "Vor {days} Tagen",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API-Schluessel",
description: "API-Schluessel fuer programmatischen Zugriff auf SnapOtter verwalten.",
@@ -1742,6 +1775,12 @@ export const de: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Info",
+39
View File
@@ -227,6 +227,7 @@ export const en = {
description: "Convert images to base64 strings for embedding in HTML, CSS, and more",
},
pipeline: { name: "Pipeline Builder", description: "Chain multiple tools into a workflow" },
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1405,6 +1406,7 @@ export const en = {
teams: "Teams",
roles: "Roles",
auditLog: "Audit Log",
usage: "Usage",
apiKeys: "API Keys",
aiFeatures: "AI Features",
tools: "Tools",
@@ -1464,6 +1466,10 @@ export const en = {
maxSplitGrid: "Max Split Grid",
maxPdfPages: "Max PDF Pages",
sessionDuration: "Session Duration",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Security",
@@ -1616,6 +1622,33 @@ export const en = {
hoursAgo: "{hrs}h ago",
daysAgo: "{days}d ago",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API Keys",
description: "Manage API keys for programmatic access to SnapOtter.",
@@ -1661,6 +1694,12 @@ export const en = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
fileManagement: {
title: "File Management",
+39
View File
@@ -260,6 +260,7 @@ export const es: TranslationKeys = {
name: "Constructor de Pipeline",
description: "Encadena multiples herramientas en un flujo de trabajo",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1442,6 +1443,7 @@ export const es: TranslationKeys = {
teams: "Equipos",
roles: "Roles",
auditLog: "Registro de auditoria",
usage: "Usage",
apiKeys: "Claves API",
aiFeatures: "Funciones de AI",
tools: "Herramientas",
@@ -1503,6 +1505,10 @@ export const es: TranslationKeys = {
maxSplitGrid: "Cuadricula maxima de division",
maxPdfPages: "Paginas maximas de PDF",
sessionDuration: "Duracion de la sesion",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Seguridad",
@@ -1656,6 +1662,33 @@ export const es: TranslationKeys = {
hoursAgo: "hace {hrs}h",
daysAgo: "hace {days}d",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "Claves API",
description: "Administra las claves API para acceso programatico a SnapOtter.",
@@ -1721,6 +1754,12 @@ export const es: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Acerca de",
+39
View File
@@ -276,6 +276,7 @@ export const fr: TranslationKeys = {
name: "Constructeur de Pipeline",
description: "Enchainez plusieurs outils dans un flux de travail",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1461,6 +1462,7 @@ export const fr: TranslationKeys = {
teams: "Equipes",
roles: "Roles",
auditLog: "Journal d'audit",
usage: "Usage",
apiKeys: "Cles API",
aiFeatures: "Fonctionnalites AI",
tools: "Outils",
@@ -1522,6 +1524,10 @@ export const fr: TranslationKeys = {
maxSplitGrid: "Grille de decoupage maximale",
maxPdfPages: "Pages PDF maximales",
sessionDuration: "Duree de la session",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Securite",
@@ -1676,6 +1682,33 @@ export const fr: TranslationKeys = {
hoursAgo: "il y a {hrs}h",
daysAgo: "il y a {days}j",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "Cles API",
description: "Gerez les cles API pour l'acces programmatique a SnapOtter.",
@@ -1740,6 +1773,12 @@ export const fr: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "A propos",
+39
View File
@@ -267,6 +267,7 @@ export const hi: TranslationKeys = {
name: "Pipeline बिल्डर",
description: "कई टूल्स को एक वर्कफ्लो में चेन करें",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1443,6 +1444,7 @@ export const hi: TranslationKeys = {
teams: "टीमें",
roles: "भूमिकाएं",
auditLog: "ऑडिट लॉग",
usage: "Usage",
apiKeys: "API कुंजियां",
aiFeatures: "AI फीचर्स",
tools: "टूल्स",
@@ -1502,6 +1504,10 @@ export const hi: TranslationKeys = {
maxSplitGrid: "अधिकतम स्प्लिट ग्रिड",
maxPdfPages: "अधिकतम PDF पेज",
sessionDuration: "सत्र अवधि",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "सुरक्षा",
@@ -1652,6 +1658,33 @@ export const hi: TranslationKeys = {
hoursAgo: "{hrs} घंटे पहले",
daysAgo: "{days} दिन पहले",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API कुंजियां",
description: "SnapOtter तक प्रोग्रामेटिक एक्सेस के लिए API कुंजियों का प्रबंधन करें।",
@@ -1713,6 +1746,12 @@ export const hi: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "जानकारी",
+39
View File
@@ -275,6 +275,7 @@ export const id: TranslationKeys = {
name: "Pipeline Builder",
description: "Rangkai beberapa alat menjadi alur kerja",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1455,6 +1456,7 @@ export const id: TranslationKeys = {
teams: "Tim",
roles: "Peran",
auditLog: "Log Audit",
usage: "Usage",
apiKeys: "Kunci API",
aiFeatures: "Fitur AI",
tools: "Alat",
@@ -1514,6 +1516,10 @@ export const id: TranslationKeys = {
maxSplitGrid: "Grid Split Maks",
maxPdfPages: "Halaman PDF Maks",
sessionDuration: "Durasi Sesi",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Keamanan",
@@ -1665,6 +1671,33 @@ export const id: TranslationKeys = {
hoursAgo: "{hrs}j lalu",
daysAgo: "{days}h lalu",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "Kunci API",
description: "Kelola kunci API untuk akses programatik ke SnapOtter.",
@@ -1729,6 +1762,12 @@ export const id: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Tentang",
+39
View File
@@ -274,6 +274,7 @@ export const it: TranslationKeys = {
name: "Costruttore di Pipeline",
description: "Concatena piu strumenti in un flusso di lavoro",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1454,6 +1455,7 @@ export const it: TranslationKeys = {
teams: "Team",
roles: "Ruoli",
auditLog: "Registro di audit",
usage: "Usage",
apiKeys: "Chiavi API",
aiFeatures: "Funzionalita AI",
tools: "Strumenti",
@@ -1515,6 +1517,10 @@ export const it: TranslationKeys = {
maxSplitGrid: "Griglia divisione massima",
maxPdfPages: "Pagine PDF massime",
sessionDuration: "Durata della sessione",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Sicurezza",
@@ -1669,6 +1675,33 @@ export const it: TranslationKeys = {
hoursAgo: "{hrs}h fa",
daysAgo: "{days}g fa",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "Chiavi API",
description: "Gestisci le chiavi API per l'accesso programmatico a SnapOtter.",
@@ -1735,6 +1768,12 @@ export const it: TranslationKeys = {
repair: "Ripara",
uninstall: "Disinstalla",
installing: "Installazione...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Informazioni",
+39
View File
@@ -235,6 +235,7 @@ export const ja: TranslationKeys = {
description: "画像をBase64文字列に変換してHTML、CSS等に埋め込み",
},
pipeline: { name: "Pipelineビルダー", description: "複数のツールをワークフローに連結" },
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1413,6 +1414,7 @@ export const ja: TranslationKeys = {
teams: "チーム",
roles: "ロール",
auditLog: "監査ログ",
usage: "Usage",
apiKeys: "APIキー",
aiFeatures: "AI機能",
tools: "ツール",
@@ -1472,6 +1474,10 @@ export const ja: TranslationKeys = {
maxSplitGrid: "最大分割グリッド",
maxPdfPages: "最大PDFページ数",
sessionDuration: "セッション期間",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "セキュリティ",
@@ -1623,6 +1629,33 @@ export const ja: TranslationKeys = {
hoursAgo: "{hrs}時間前",
daysAgo: "{days}日前",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "APIキー",
description: "SnapOtterへのプログラムアクセス用APIキーを管理。",
@@ -1686,6 +1719,12 @@ export const ja: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "SnapOtterについて",
+39
View File
@@ -222,6 +222,7 @@ export const ko: TranslationKeys = {
description: "이미지를 Base64 문자열로 변환하여 HTML, CSS 등에 임베드",
},
pipeline: { name: "Pipeline 빌더", description: "여러 도구를 워크플로로 연결" },
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1398,6 +1399,7 @@ export const ko: TranslationKeys = {
teams: "팀",
roles: "역할",
auditLog: "감사 로그",
usage: "Usage",
apiKeys: "API 키",
aiFeatures: "AI 기능",
tools: "도구",
@@ -1457,6 +1459,10 @@ export const ko: TranslationKeys = {
maxSplitGrid: "최대 분할 그리드",
maxPdfPages: "최대 PDF 페이지 수",
sessionDuration: "세션 기간",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "보안",
@@ -1608,6 +1614,33 @@ export const ko: TranslationKeys = {
hoursAgo: "{hrs}시간 전",
daysAgo: "{days}일 전",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API 키",
description: "SnapOtter에 프로그래밍 방식으로 접근하기 위한 API 키를 관리하세요.",
@@ -1671,6 +1704,12 @@ export const ko: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "정보",
+39
View File
@@ -275,6 +275,7 @@ export const nl: TranslationKeys = {
name: "Pipeline-builder",
description: "Meerdere tools koppelen tot een workflow",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1457,6 +1458,7 @@ export const nl: TranslationKeys = {
teams: "Teams",
roles: "Rollen",
auditLog: "Auditlog",
usage: "Usage",
apiKeys: "API-sleutels",
aiFeatures: "AI-functies",
tools: "Gereedschap",
@@ -1517,6 +1519,10 @@ export const nl: TranslationKeys = {
maxSplitGrid: "Max splitraster",
maxPdfPages: "Max PDF-pagina's",
sessionDuration: "Sessieduur",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Beveiliging",
@@ -1669,6 +1675,33 @@ export const nl: TranslationKeys = {
hoursAgo: "{hrs} uur geleden",
daysAgo: "{days} dagen geleden",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API-sleutels",
description: "Beheer API-sleutels voor programmatische toegang tot SnapOtter.",
@@ -1732,6 +1765,12 @@ export const nl: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Over",
+39
View File
@@ -276,6 +276,7 @@ export const pl: TranslationKeys = {
name: "Konstruktor Pipeline",
description: "Łączenie wielu narzędzi w przepływ pracy",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1458,6 +1459,7 @@ export const pl: TranslationKeys = {
teams: "Zespoły",
roles: "Role",
auditLog: "Dziennik audytu",
usage: "Usage",
apiKeys: "Klucze API",
aiFeatures: "Funkcje AI",
tools: "Narzędzia",
@@ -1519,6 +1521,10 @@ export const pl: TranslationKeys = {
maxSplitGrid: "Maks. siatka podziału",
maxPdfPages: "Maks. stron PDF",
sessionDuration: "Czas trwania sesji",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Bezpieczeństwo",
@@ -1673,6 +1679,33 @@ export const pl: TranslationKeys = {
hoursAgo: "{hrs} godz. temu",
daysAgo: "{days} dn. temu",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "Klucze API",
description: "Zarządzanie kluczami API do programowego dostępu do SnapOtter.",
@@ -1738,6 +1771,12 @@ export const pl: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Informacje",
+39
View File
@@ -273,6 +273,7 @@ export const ptBR: TranslationKeys = {
name: "Construtor de Pipeline",
description: "Encadeie varias ferramentas em um fluxo de trabalho",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1454,6 +1455,7 @@ export const ptBR: TranslationKeys = {
teams: "Equipes",
roles: "Funcoes",
auditLog: "Registro de auditoria",
usage: "Usage",
apiKeys: "Chaves API",
aiFeatures: "Recursos de AI",
tools: "Ferramentas",
@@ -1515,6 +1517,10 @@ export const ptBR: TranslationKeys = {
maxSplitGrid: "Grade maxima de divisao",
maxPdfPages: "Paginas maximas de PDF",
sessionDuration: "Duracao da sessao",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Seguranca",
@@ -1667,6 +1673,33 @@ export const ptBR: TranslationKeys = {
hoursAgo: "ha {hrs}h",
daysAgo: "ha {days}d",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "Chaves API",
description: "Gerencie as chaves API para acesso programatico ao SnapOtter.",
@@ -1731,6 +1764,12 @@ export const ptBR: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Sobre",
+39
View File
@@ -275,6 +275,7 @@ export const ru: TranslationKeys = {
name: "Конструктор Pipeline",
description: "Объединение нескольких инструментов в рабочий процесс",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1456,6 +1457,7 @@ export const ru: TranslationKeys = {
teams: "Команды",
roles: "Роли",
auditLog: "Журнал аудита",
usage: "Usage",
apiKeys: "API-ключи",
aiFeatures: "AI-функции",
tools: "Инструменты",
@@ -1515,6 +1517,10 @@ export const ru: TranslationKeys = {
maxSplitGrid: "Макс. сетка разделения",
maxPdfPages: "Макс. страниц PDF",
sessionDuration: "Длительность сессии",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Безопасность",
@@ -1666,6 +1672,33 @@ export const ru: TranslationKeys = {
hoursAgo: "{hrs} ч. назад",
daysAgo: "{days} дн. назад",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API-ключи",
description: "Управление API-ключами для программного доступа к SnapOtter.",
@@ -1731,6 +1764,12 @@ export const ru: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "О программе",
+39
View File
@@ -273,6 +273,7 @@ export const sv: TranslationKeys = {
name: "Pipeline-byggare",
description: "Kedja samman flera verktyg till ett arbetsflode",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1453,6 +1454,7 @@ export const sv: TranslationKeys = {
teams: "Team",
roles: "Roller",
auditLog: "Granskningslogg",
usage: "Usage",
apiKeys: "API-nycklar",
aiFeatures: "AI-funktioner",
tools: "Verktyg",
@@ -1512,6 +1514,10 @@ export const sv: TranslationKeys = {
maxSplitGrid: "Max uppdelningsrutnat",
maxPdfPages: "Max PDF-sidor",
sessionDuration: "Sessionslangd",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Sakerhet",
@@ -1664,6 +1670,33 @@ export const sv: TranslationKeys = {
hoursAgo: "{hrs} tim sedan",
daysAgo: "{days} dagar sedan",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API-nycklar",
description: "Hantera API-nycklar for programmatisk atkomst till SnapOtter.",
@@ -1727,6 +1760,12 @@ export const sv: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Om",
+39
View File
@@ -268,6 +268,7 @@ export const th: TranslationKeys = {
name: "ตัวสร้าง Pipeline",
description: "เชื่อมต่อหลายเครื่องมือเป็นขั้นตอนทำงาน",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1435,6 +1436,7 @@ export const th: TranslationKeys = {
teams: "ทีม",
roles: "บทบาท",
auditLog: "บันทึกการตรวจสอบ",
usage: "Usage",
apiKeys: "คีย์ API",
aiFeatures: "ฟีเจอร์ AI",
tools: "เครื่องมือ",
@@ -1494,6 +1496,10 @@ export const th: TranslationKeys = {
maxSplitGrid: "กริดแบ่งสูงสุด",
maxPdfPages: "จำนวนหน้า PDF สูงสุด",
sessionDuration: "ระยะเวลาเซสชัน",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "ความปลอดภัย",
@@ -1644,6 +1650,33 @@ export const th: TranslationKeys = {
hoursAgo: "{hrs} ชั่วโมงที่แล้ว",
daysAgo: "{days} วันที่แล้ว",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "คีย์ API",
description: "จัดการคีย์ API สำหรับเข้าถึง SnapOtter แบบโปรแกรม",
@@ -1705,6 +1738,12 @@ export const th: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "เกี่ยวกับ",
+39
View File
@@ -276,6 +276,7 @@ export const tr: TranslationKeys = {
name: "Pipeline Oluşturucu",
description: "Birden fazla aracı bir iş akışında zincirleyin",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1458,6 +1459,7 @@ export const tr: TranslationKeys = {
teams: "Takımlar",
roles: "Roller",
auditLog: "Denetim Günlüğü",
usage: "Usage",
apiKeys: "API Anahtarları",
aiFeatures: "AI Özellikleri",
tools: "Araçlar",
@@ -1518,6 +1520,10 @@ export const tr: TranslationKeys = {
maxSplitGrid: "Maksimum Bölme Izgarası",
maxPdfPages: "Maksimum PDF Sayfası",
sessionDuration: "Oturum Süresi",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Güvenlik",
@@ -1670,6 +1676,33 @@ export const tr: TranslationKeys = {
hoursAgo: "{hrs}sa önce",
daysAgo: "{days}g önce",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API Anahtarları",
description: "SnapOtter'a programatik erişim için API anahtarlarını yönetin.",
@@ -1735,6 +1768,12 @@ export const tr: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Hakkında",
+39
View File
@@ -275,6 +275,7 @@ export const uk: TranslationKeys = {
name: "Конструктор Pipeline",
description: "Об'єднання кількох інструментів у робочий процес",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1456,6 +1457,7 @@ export const uk: TranslationKeys = {
teams: "Команди",
roles: "Ролі",
auditLog: "Журнал аудиту",
usage: "Usage",
apiKeys: "API-ключі",
aiFeatures: "AI-функції",
tools: "Інструменти",
@@ -1515,6 +1517,10 @@ export const uk: TranslationKeys = {
maxSplitGrid: "Макс. сітка розділення",
maxPdfPages: "Макс. сторінок PDF",
sessionDuration: "Тривалість сесії",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Безпека",
@@ -1666,6 +1672,33 @@ export const uk: TranslationKeys = {
hoursAgo: "{hrs} год тому",
daysAgo: "{days} дн. тому",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API-ключі",
description: "Керування API-ключами для програмного доступу до SnapOtter.",
@@ -1731,6 +1764,12 @@ export const uk: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Про програму",
+39
View File
@@ -276,6 +276,7 @@ export const vi: TranslationKeys = {
name: "Trình xây dựng Pipeline",
description: "Kết nối nhiều công cụ thành một quy trình làm việc",
},
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1455,6 +1456,7 @@ export const vi: TranslationKeys = {
teams: "Nhóm",
roles: "Vai trò",
auditLog: "Nhật ký kiểm tra",
usage: "Usage",
apiKeys: "Khóa API",
aiFeatures: "Tính năng AI",
tools: "Công cụ",
@@ -1514,6 +1516,10 @@ export const vi: TranslationKeys = {
maxSplitGrid: "Lưới tách tối đa",
maxPdfPages: "Số trang PDF tối đa",
sessionDuration: "Thời lượng phiên",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "Bảo mật",
@@ -1666,6 +1672,33 @@ export const vi: TranslationKeys = {
hoursAgo: "{hrs} giờ trước",
daysAgo: "{days} ngày trước",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "Khóa API",
description: "Quản lý khóa API để truy cập SnapOtter theo chương trình.",
@@ -1727,6 +1760,12 @@ export const vi: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "Giới thiệu",
+39
View File
@@ -222,6 +222,7 @@ export const zhCN: TranslationKeys = {
description: "将图片转换为 Base64 字符串,可嵌入 HTML、CSS 等",
},
pipeline: { name: "Pipeline 构建器", description: "将多个工具串联为工作流" },
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1387,6 +1388,7 @@ export const zhCN: TranslationKeys = {
teams: "团队",
roles: "角色",
auditLog: "审计日志",
usage: "Usage",
apiKeys: "API 密钥",
aiFeatures: "AI 功能",
tools: "工具",
@@ -1446,6 +1448,10 @@ export const zhCN: TranslationKeys = {
maxSplitGrid: "最大分割网格",
maxPdfPages: "最大 PDF 页数",
sessionDuration: "会话持续时间",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "安全",
@@ -1596,6 +1602,33 @@ export const zhCN: TranslationKeys = {
hoursAgo: "{hrs} 小时前",
daysAgo: "{days} 天前",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API 密钥",
description: "管理用于程序化访问 SnapOtter 的 API 密钥。",
@@ -1657,6 +1690,12 @@ export const zhCN: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "关于",
+39
View File
@@ -221,6 +221,7 @@ export const zhTW: TranslationKeys = {
description: "將影像轉換為Base64字串,嵌入HTML、CSS等",
},
pipeline: { name: "Pipeline建構器", description: "將多個工具串聯為工作流程" },
processing: { canceled: "Processing canceled" },
},
toolSettings: {
compress: {
@@ -1385,6 +1386,7 @@ export const zhTW: TranslationKeys = {
teams: "團隊",
roles: "角色",
auditLog: "稽核記錄",
usage: "Usage",
apiKeys: "API金鑰",
aiFeatures: "AI功能",
tools: "工具",
@@ -1444,6 +1446,10 @@ export const zhTW: TranslationKeys = {
maxSplitGrid: "最大分割格線",
maxPdfPages: "最大PDF頁數",
sessionDuration: "工作階段時長",
supportBundleButton: "Download Support Bundle",
supportBundleDescription:
"Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.",
supportBundleFailed: "Failed to download support bundle.",
},
security: {
heading: "安全性",
@@ -1594,6 +1600,33 @@ export const zhTW: TranslationKeys = {
hoursAgo: "{hrs}小時前",
daysAgo: "{days}天前",
},
usage: {
heading: "Usage",
description: "Local usage statistics from jobs and file storage.",
periodLabel: "Period",
days7: "7 days",
days30: "30 days",
days90: "90 days",
jobsPerDayHeading: "Jobs per day",
topToolsHeading: "Top tools",
perUserHeading: "Per-user volume",
durationsHeading: "Duration percentiles",
noData: "No data for this period.",
dayColumn: "Day",
totalColumn: "Total",
completedColumn: "Completed",
failedColumn: "Failed",
toolColumn: "Tool",
runsColumn: "Runs",
userColumn: "User",
bytesInColumn: "Bytes in",
poolColumn: "Pool",
p50Column: "p50",
p95Column: "p95",
storageHeading: "Library storage",
storageFiles: "{count} files",
unknownUser: "(unknown)",
},
apiKeys: {
heading: "API金鑰",
description: "管理用於程式化存取SnapOtter的API金鑰。",
@@ -1655,6 +1688,12 @@ export const zhTW: TranslationKeys = {
repair: "Repair",
uninstall: "Uninstall",
installing: "Installing...",
importBundle: "Import Bundle",
importDescription: "Upload a .tar.gz bundle archive exported from another installation.",
importButton: "Import from file",
importing: "Importing...",
importSuccess: "Bundle imported successfully.",
importError: "Bundle import failed: {error}",
},
about: {
heading: "關於",