diff --git a/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx b/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx index 9019249aaa..9f8c44d6b6 100644 --- a/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx +++ b/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx @@ -131,7 +131,7 @@ export default function FilesListTab({
setSearchQuery(e.target.value)} className="flex-1 min-w-[200px] px-3 py-2 rounded-lg text-sm bg-[var(--color-bg)] border border-[var(--color-border)] text-[var(--color-text-main)] placeholder:text-[var(--color-text-muted)] focus:outline-2 focus:outline-[var(--color-accent)]" @@ -151,7 +151,7 @@ export default function FilesListTab({ {/* Table */}
- +
- + diff --git a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx index 096406ca41..54156e0658 100644 --- a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx +++ b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx @@ -1335,7 +1335,7 @@ export default function APIPageClient({ machineId }: Readonly
- Cloud OmniRoute + {t("cloudOmniroute")}
void copy(fullUrl, copyId)} className="shrink-0 flex items-center justify-center size-6 rounded hover:bg-sidebar transition-colors" - title="Copy URL" + title={t("copyUrl")} > {copied === copyId ? "check" : "content_copy"} diff --git a/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx b/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx index 0de01dab8e..df7fd922de 100644 --- a/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx +++ b/src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx @@ -849,7 +849,7 @@ export default function ProxyRegistryManager() { onClose={() => { if (!bulkSaving) setBulkOpen(false); }} - title="Bulk Proxy Assignment" + title={t("bulkProxyAssignment")} maxWidth="lg" >
diff --git a/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx b/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx index dcad7652f4..91dc1fd2bb 100644 --- a/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx +++ b/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx @@ -960,7 +960,7 @@ function BudgetRowExpanded({
- +
setForm({ ...form, resetTime: e.target.value })} diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 6d83f7aeb4..862dcb27e8 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -702,7 +702,10 @@ "leaderboardLoading": "Loading leaderboard...", "batchFileDetailCopyId": "Copy ID", "batchFileDetailClose": "Close", - "batchFileDetailFailedToLoad": "Failed to load file contents" + "batchFileDetailFailedToLoad": "Failed to load file contents", + "batchFilesListSearchPlaceholder": "Search by ID or filename…", + "batchFilesListFilesTable": "Files", + "batchPageLoadingMore": "Loading more…" }, "sidebar": { "home": "Home", @@ -2505,7 +2508,10 @@ "apiEndpointsCatalogUnavailable": "API catalog unavailable", "apiEndpointsSearchPlaceholder": "Search endpoints...", "apiEndpointsRequiresAuth": "Requires auth", - "apiEndpointsNoMatch": "No endpoints match your filter" + "apiEndpointsNoMatch": "No endpoints match your filter", + "localServer": "Local Server", + "cloudOmniroute": "Cloud OmniRoute", + "copyUrl": "Copy URL" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -2724,7 +2730,8 @@ "q": "Q", "filterSkillsPlaceholder": "Filter skills by name, description, or tag", "allModes": "All modes", - "skillsMarketplace": "Skills Marketplace" + "skillsMarketplace": "Skills Marketplace", + "installSkill": "Install Skill" }, "health": { "title": "System Health", @@ -5150,7 +5157,8 @@ "budgetMonthlyDollar": "Monthly $", "budgetWarnAtPct": "Warn at %", "quotaAlerts": "Quota alerts", - "quotaTableRefreshing": "⟳ Refreshing..." + "quotaTableRefreshing": "⟳ Refreshing...", + "noSpendLast30Days": "No spend in last 30 days" }, "modals": { "waitingAuth": "Waiting for Authorization", @@ -5914,7 +5922,10 @@ "reasoningNoData": "No reasoning entries cached yet. Entries appear when thinking models use tool calling.", "cachePerformanceRetry": "Retry", "cachePerformanceHitRate": "Hit Rate", - "cachePerformanceAvgLatency": "Avg Latency (ms)" + "cachePerformanceAvgLatency": "Avg Latency (ms)", + "cachePerformanceP95Latency": "p95 Latency (ms)", + "retry": "Retry", + "reasoningAvgChars": "Avg Chars" }, "proxyConfigModal": { "levelGlobal": "Global", @@ -6095,7 +6106,8 @@ "bulkImportErrorInvalidPort": "Invalid PORT (must be 1-65535)", "bulkImportErrorInvalidType": "Invalid TYPE (use http, https, or socks5)", "bulkImportErrorInvalidStatus": "Invalid STATUS (use active or inactive)", - "clearAssignment": "(clear assignment)" + "clearAssignment": "(clear assignment)", + "bulkProxyAssignment": "Bulk Proxy Assignment" }, "playground": { "title": "Model Playground",
diff --git a/src/app/(dashboard)/dashboard/batch/page.tsx b/src/app/(dashboard)/dashboard/batch/page.tsx index 13ba9de876..4dd03784af 100644 --- a/src/app/(dashboard)/dashboard/batch/page.tsx +++ b/src/app/(dashboard)/dashboard/batch/page.tsx @@ -1,12 +1,14 @@ "use client"; import { useState, useEffect, useCallback, useRef } from "react"; +import { useTranslations } from "next-intl"; import BatchListTab from "./BatchListTab"; import { FileRecord } from "@/lib/db/files"; import { BatchRecord } from "@/lib/db/batches"; import { mapBatchApiToRecord, mapFileApiToRecord } from "./batch-utils"; export default function BatchPage() { + const t = useTranslations("common"); const [batches, setBatches] = useState([]); const [files, setFiles] = useState([]); const [batchesTotal, setBatchesTotal] = useState(0); @@ -174,7 +176,7 @@ export default function BatchPage() { onRefresh={() => fetchData(false)} /> {loadingMore && batchesCount > 0 && ( -
Loading more…
+
{t("batchPageLoadingMore")}
)}
diff --git a/src/app/(dashboard)/dashboard/cache/components/IdempotencyLayer.tsx b/src/app/(dashboard)/dashboard/cache/components/IdempotencyLayer.tsx index 6c7830d663..e3f4ad976f 100644 --- a/src/app/(dashboard)/dashboard/cache/components/IdempotencyLayer.tsx +++ b/src/app/(dashboard)/dashboard/cache/components/IdempotencyLayer.tsx @@ -62,7 +62,7 @@ export default function IdempotencyLayer({ diff --git a/src/app/(dashboard)/dashboard/cache/components/ReasoningCacheTab.tsx b/src/app/(dashboard)/dashboard/cache/components/ReasoningCacheTab.tsx index e4d3ad6d22..790269b753 100644 --- a/src/app/(dashboard)/dashboard/cache/components/ReasoningCacheTab.tsx +++ b/src/app/(dashboard)/dashboard/cache/components/ReasoningCacheTab.tsx @@ -336,7 +336,7 @@ export default function ReasoningCacheTab() {
Model {t("reasoningEntries")}Avg Chars{t("reasoningAvgChars")} {t("reasoningChars")}