mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-06 17:46:23 +00:00
feat: add system task runner (#5680)
This commit is contained in:
+6
@@ -28,6 +28,12 @@ type BaseNavItem = {
|
||||
icon?: React.ElementType
|
||||
activeUrls?: (LinkProps['to'] | (string & {}))[]
|
||||
configUrls?: (LinkProps['to'] | (string & {}))[]
|
||||
/**
|
||||
* Minimum role required to see this item in the sidebar. When set, the item
|
||||
* is hidden for users whose role is below this threshold (see
|
||||
* `useSidebarView`). Route-level guards still enforce access independently.
|
||||
*/
|
||||
requiredRole?: number
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -251,7 +251,7 @@ export function useChannelUpstreamUpdates(refresh: () => Promise<void>) {
|
||||
{},
|
||||
upstreamUpdateRequestConfig
|
||||
)
|
||||
const { success, message, data } = res.data || {}
|
||||
const { success, message } = res.data || {}
|
||||
if (!success) {
|
||||
toast.error(message || t('Batch detection failed'))
|
||||
return
|
||||
@@ -259,13 +259,7 @@ export function useChannelUpstreamUpdates(refresh: () => Promise<void>) {
|
||||
|
||||
toast.success(
|
||||
t(
|
||||
'Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed',
|
||||
{
|
||||
channels: data?.processed_channels || 0,
|
||||
add: data?.detected_add_models || 0,
|
||||
remove: data?.detected_remove_models || 0,
|
||||
fails: (data?.failed_channel_ids || []).length,
|
||||
}
|
||||
'Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.'
|
||||
)
|
||||
)
|
||||
await refresh()
|
||||
|
||||
@@ -0,0 +1,349 @@
|
||||
/*
|
||||
Copyright (C) 2023-2026 QuantumNous
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
For commercial licensing, please contact support@quantumnous.com
|
||||
*/
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import { ListChecks, RefreshCw } from 'lucide-react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { formatTimestampToDate } from '@/lib/format'
|
||||
import { cn } from '@/lib/utils'
|
||||
import { ErrorState } from '@/components/error-state'
|
||||
import { Badge } from '@/components/ui/badge'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { Progress } from '@/components/ui/progress'
|
||||
import { Skeleton } from '@/components/ui/skeleton'
|
||||
import {
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableHead,
|
||||
TableHeader,
|
||||
TableRow,
|
||||
} from '@/components/ui/table'
|
||||
import { listSystemTasks } from '@/features/system-settings/api'
|
||||
import type {
|
||||
SystemTask,
|
||||
SystemTaskStatus,
|
||||
} from '@/features/system-settings/types'
|
||||
|
||||
const TASK_LIMIT = 20
|
||||
const ACTIVE_POLL_INTERVAL_MS = 8000
|
||||
|
||||
const STATUS_VARIANT: Record<SystemTaskStatus, 'secondary' | 'destructive'> = {
|
||||
pending: 'secondary',
|
||||
running: 'secondary',
|
||||
succeeded: 'secondary',
|
||||
failed: 'destructive',
|
||||
}
|
||||
|
||||
const STATUS_CLASS_NAME: Record<SystemTaskStatus, string> = {
|
||||
pending: 'bg-amber-50 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300',
|
||||
running:
|
||||
'bg-sky-50 text-sky-700 dark:bg-sky-500/15 dark:text-sky-300 [&_span]:bg-sky-500',
|
||||
succeeded:
|
||||
'bg-emerald-50 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300',
|
||||
failed: '',
|
||||
}
|
||||
|
||||
const STATUS_DOT_CLASS_NAME: Record<SystemTaskStatus, string> = {
|
||||
pending: 'bg-amber-500',
|
||||
running: 'bg-sky-500',
|
||||
succeeded: 'bg-emerald-500',
|
||||
failed: 'bg-destructive',
|
||||
}
|
||||
|
||||
const PROGRESS_BAR_CLASS_NAME: Record<SystemTaskStatus, string> = {
|
||||
pending: '[&_[data-slot=progress-indicator]]:bg-amber-500',
|
||||
running: '[&_[data-slot=progress-indicator]]:bg-sky-500',
|
||||
succeeded: '[&_[data-slot=progress-indicator]]:bg-emerald-500',
|
||||
failed: '[&_[data-slot=progress-indicator]]:bg-destructive',
|
||||
}
|
||||
|
||||
// Maps backend system task type constants to i18n source keys. Unknown/future
|
||||
// types fall back to their raw identifier so the panel never shows blank.
|
||||
const TYPE_LABEL: Record<string, string> = {
|
||||
log_cleanup: 'Log cleanup',
|
||||
channel_test: 'Batch channel test',
|
||||
model_update: 'Batch upstream model update',
|
||||
midjourney_poll: 'Midjourney task polling',
|
||||
async_task_poll: 'Async task polling',
|
||||
}
|
||||
|
||||
function isActiveStatus(status: SystemTaskStatus) {
|
||||
return status === 'pending' || status === 'running'
|
||||
}
|
||||
|
||||
function getProgress(task: SystemTask): number | null {
|
||||
const progress = (task.state as { progress?: unknown } | undefined)?.progress
|
||||
if (typeof progress !== 'number' || Number.isNaN(progress)) return null
|
||||
return Math.min(100, Math.max(0, progress))
|
||||
}
|
||||
|
||||
type SystemTasksTableProps = {
|
||||
tasks: SystemTask[]
|
||||
}
|
||||
|
||||
function SystemTasksTable(props: SystemTasksTableProps) {
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
<div className='overflow-x-auto rounded-md border'>
|
||||
<Table className='min-w-[900px]'>
|
||||
<TableHeader>
|
||||
<TableRow className='bg-muted/40 hover:bg-muted/40'>
|
||||
<TableHead className='h-9 w-[260px] px-4 text-xs'>
|
||||
{t('Type')}
|
||||
</TableHead>
|
||||
<TableHead className='h-9 w-[130px] text-xs'>
|
||||
{t('Status')}
|
||||
</TableHead>
|
||||
<TableHead className='h-9 w-[180px] text-xs'>
|
||||
{t('Progress')}
|
||||
</TableHead>
|
||||
<TableHead className='h-9 min-w-[260px] text-xs'>
|
||||
{t('Executor')}
|
||||
</TableHead>
|
||||
<TableHead className='h-9 w-[190px] text-xs'>
|
||||
{t('Updated')}
|
||||
</TableHead>
|
||||
<TableHead className='h-9 w-[220px] pr-4 text-xs'>
|
||||
{t('Detail')}
|
||||
</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{props.tasks.map((task) => {
|
||||
const progress = getProgress(task)
|
||||
return (
|
||||
<TableRow key={task.task_id} className='hover:bg-muted/30'>
|
||||
<TableCell className='px-4 py-3 align-middle'>
|
||||
<div className='space-y-0.5'>
|
||||
<div className='font-medium'>
|
||||
{t(TYPE_LABEL[task.type] ?? task.type)}
|
||||
</div>
|
||||
<div className='text-muted-foreground font-mono text-[11px]'>
|
||||
{task.type}
|
||||
</div>
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell className='py-3 align-middle'>
|
||||
<Badge
|
||||
variant={STATUS_VARIANT[task.status]}
|
||||
className={cn('gap-1.5', STATUS_CLASS_NAME[task.status])}
|
||||
>
|
||||
<span
|
||||
className={cn(
|
||||
'size-1.5 rounded-full',
|
||||
STATUS_DOT_CLASS_NAME[task.status]
|
||||
)}
|
||||
aria-hidden='true'
|
||||
/>
|
||||
{t(task.status)}
|
||||
</Badge>
|
||||
</TableCell>
|
||||
<TableCell className='py-3 align-middle'>
|
||||
<div className='flex items-center gap-2'>
|
||||
<Progress
|
||||
value={progress ?? 0}
|
||||
className={cn(
|
||||
'w-24',
|
||||
PROGRESS_BAR_CLASS_NAME[task.status]
|
||||
)}
|
||||
/>
|
||||
<span className='text-muted-foreground w-10 text-right text-xs tabular-nums'>
|
||||
{progress === null ? '-' : `${progress}%`}
|
||||
</span>
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell className='text-muted-foreground max-w-[280px] truncate py-3 font-mono text-xs align-middle'>
|
||||
{task.locked_by || '-'}
|
||||
</TableCell>
|
||||
<TableCell className='text-muted-foreground py-3 text-xs whitespace-nowrap align-middle'>
|
||||
{formatTimestampToDate(task.updated_at)}
|
||||
</TableCell>
|
||||
<TableCell
|
||||
className='text-destructive max-w-[220px] truncate py-3 pr-4 text-xs align-middle'
|
||||
title={task.error || undefined}
|
||||
>
|
||||
{task.error || '-'}
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
)
|
||||
})}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export function SystemTasksPanel() {
|
||||
const { t } = useTranslation()
|
||||
const tasksQuery = useQuery({
|
||||
queryKey: ['system-info', 'system-tasks'],
|
||||
queryFn: async () => {
|
||||
const res = await listSystemTasks(TASK_LIMIT)
|
||||
if (!res.success || !Array.isArray(res.data)) {
|
||||
throw new Error(res.message || t('We could not load system tasks.'))
|
||||
}
|
||||
return res.data
|
||||
},
|
||||
staleTime: 30 * 1000,
|
||||
retry: false,
|
||||
refetchInterval: (query) =>
|
||||
query.state.data?.some((task) => isActiveStatus(task.status))
|
||||
? ACTIVE_POLL_INTERVAL_MS
|
||||
: false,
|
||||
})
|
||||
|
||||
const tasks = tasksQuery.data ?? []
|
||||
const loading = tasksQuery.isLoading
|
||||
const refreshing = tasksQuery.isFetching && !tasksQuery.isLoading
|
||||
const hasActiveTasks = tasks.some((task) => isActiveStatus(task.status))
|
||||
const activeTasks = tasks.filter((task) => isActiveStatus(task.status))
|
||||
const historyTasks = tasks.filter((task) => !isActiveStatus(task.status))
|
||||
|
||||
return (
|
||||
<section className='bg-card overflow-hidden rounded-lg border shadow-xs'>
|
||||
<div className='flex flex-col gap-3 border-b px-4 py-3 sm:flex-row sm:items-center sm:justify-between sm:px-5'>
|
||||
<div className='min-w-0'>
|
||||
<div className='flex items-center gap-2'>
|
||||
<span className='bg-muted text-muted-foreground inline-flex size-7 items-center justify-center rounded-md'>
|
||||
<ListChecks className='size-4' aria-hidden='true' />
|
||||
</span>
|
||||
<div className='min-w-0'>
|
||||
<h3 className='text-sm font-semibold'>{t('System Tasks')}</h3>
|
||||
<p className='text-muted-foreground mt-0.5 text-xs'>
|
||||
{t(
|
||||
'Recent maintenance tasks running across instances and their execution status.'
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className='flex shrink-0 items-center gap-3'>
|
||||
<span
|
||||
className='text-muted-foreground inline-flex items-center gap-1.5 text-xs'
|
||||
aria-live='polite'
|
||||
>
|
||||
<span
|
||||
className={cn(
|
||||
'size-1.5 rounded-full',
|
||||
hasActiveTasks ? 'bg-emerald-500' : 'bg-muted-foreground/40'
|
||||
)}
|
||||
aria-hidden='true'
|
||||
/>
|
||||
{hasActiveTasks
|
||||
? t('Auto-refreshing every {{seconds}}s', {
|
||||
seconds: ACTIVE_POLL_INTERVAL_MS / 1000,
|
||||
})
|
||||
: t('Live refresh pauses when no task is running')}
|
||||
</span>
|
||||
<Button
|
||||
type='button'
|
||||
variant='outline'
|
||||
size='sm'
|
||||
onClick={() => void tasksQuery.refetch()}
|
||||
disabled={tasksQuery.isFetching}
|
||||
aria-label={t('Refresh')}
|
||||
>
|
||||
<RefreshCw
|
||||
data-icon='inline-start'
|
||||
className={cn('size-3.5', refreshing && 'animate-spin')}
|
||||
aria-hidden='true'
|
||||
/>
|
||||
{refreshing ? t('Refreshing...') : t('Refresh')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div aria-busy={tasksQuery.isFetching}>
|
||||
{loading ? (
|
||||
<div className='space-y-2 p-4 sm:p-5'>
|
||||
{Array.from({ length: 4 }).map((_, i) => (
|
||||
<Skeleton key={i} className='h-9 w-full rounded-md' />
|
||||
))}
|
||||
</div>
|
||||
) : tasksQuery.isError ? (
|
||||
<ErrorState
|
||||
title={t('We could not load system tasks.')}
|
||||
description={
|
||||
tasksQuery.error instanceof Error
|
||||
? tasksQuery.error.message
|
||||
: undefined
|
||||
}
|
||||
onRetry={() => {
|
||||
void tasksQuery.refetch()
|
||||
}}
|
||||
className='min-h-[260px]'
|
||||
/>
|
||||
) : tasks.length === 0 ? (
|
||||
<div className='px-4 py-10 text-center sm:px-5'>
|
||||
<div className='bg-muted mx-auto mb-3 flex size-10 items-center justify-center rounded-lg'>
|
||||
<ListChecks
|
||||
className='text-muted-foreground size-5'
|
||||
aria-hidden='true'
|
||||
/>
|
||||
</div>
|
||||
<p className='text-muted-foreground text-sm'>
|
||||
{t('No system tasks yet.')}
|
||||
</p>
|
||||
</div>
|
||||
) : (
|
||||
<div className='space-y-4 p-4 sm:p-5'>
|
||||
<div>
|
||||
<div className='mb-2 flex items-center justify-between gap-3'>
|
||||
<div>
|
||||
<h4 className='text-sm font-medium'>{t('Active Tasks')}</h4>
|
||||
<p className='text-muted-foreground mt-0.5 text-xs'>
|
||||
{t('Tasks currently pending or running.')}
|
||||
</p>
|
||||
</div>
|
||||
<Badge variant='outline'>{activeTasks.length}</Badge>
|
||||
</div>
|
||||
{activeTasks.length > 0 ? (
|
||||
<SystemTasksTable tasks={activeTasks} />
|
||||
) : (
|
||||
<div className='text-muted-foreground rounded-md border border-dashed px-4 py-6 text-center text-sm'>
|
||||
{t('No active system tasks.')}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div className='mb-2 flex items-center justify-between gap-3'>
|
||||
<div>
|
||||
<h4 className='text-sm font-medium'>{t('Task History')}</h4>
|
||||
<p className='text-muted-foreground mt-0.5 text-xs'>
|
||||
{t('Recently completed or failed system task runs.')}
|
||||
</p>
|
||||
</div>
|
||||
<Badge variant='outline'>{historyTasks.length}</Badge>
|
||||
</div>
|
||||
{historyTasks.length > 0 ? (
|
||||
<SystemTasksTable tasks={historyTasks} />
|
||||
) : (
|
||||
<div className='text-muted-foreground rounded-md border border-dashed px-4 py-6 text-center text-sm'>
|
||||
{t('No historical system tasks.')}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
Copyright (C) 2023-2026 QuantumNous
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
For commercial licensing, please contact support@quantumnous.com
|
||||
*/
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { SectionPageLayout } from '@/components/layout'
|
||||
import { SystemTasksPanel } from './components/system-tasks-panel'
|
||||
|
||||
export function SystemInfo() {
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
<SectionPageLayout>
|
||||
<SectionPageLayout.Title>{t('System Info')}</SectionPageLayout.Title>
|
||||
<SectionPageLayout.Content>
|
||||
<SystemTasksPanel />
|
||||
</SectionPageLayout.Content>
|
||||
</SectionPageLayout>
|
||||
)
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import type {
|
||||
FetchUpstreamRatiosRequest,
|
||||
LogCleanupTask,
|
||||
SystemOptionsResponse,
|
||||
SystemTaskListResponse,
|
||||
SystemTaskResponse,
|
||||
UpdateOptionRequest,
|
||||
UpdateOptionResponse,
|
||||
@@ -75,6 +76,13 @@ export async function getSystemTask(taskId: string) {
|
||||
return res.data
|
||||
}
|
||||
|
||||
export async function listSystemTasks(limit = 20) {
|
||||
const res = await api.get<SystemTaskListResponse>('/api/system-task/list', {
|
||||
params: { limit },
|
||||
})
|
||||
return res.data
|
||||
}
|
||||
|
||||
export async function resetModelRatios() {
|
||||
const res = await api.post<UpdateOptionResponse>(
|
||||
'/api/option/rest_model_ratio'
|
||||
|
||||
@@ -100,6 +100,12 @@ export type SystemTaskResponse<TTask = SystemTask | null> = {
|
||||
data?: TTask
|
||||
}
|
||||
|
||||
export type SystemTaskListResponse = {
|
||||
success: boolean
|
||||
message: string
|
||||
data?: SystemTask[]
|
||||
}
|
||||
|
||||
export type SiteSettings = {
|
||||
'theme.frontend': string
|
||||
Notice: string
|
||||
|
||||
+8
@@ -27,6 +27,7 @@ import {
|
||||
ListTodo,
|
||||
MessageSquare,
|
||||
Radio,
|
||||
ServerCog,
|
||||
Settings,
|
||||
Ticket,
|
||||
User,
|
||||
@@ -34,6 +35,7 @@ import {
|
||||
Wallet,
|
||||
} from 'lucide-react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { ROLE } from '@/lib/roles'
|
||||
import { type SidebarData } from '@/components/layout/types'
|
||||
|
||||
/**
|
||||
@@ -141,6 +143,12 @@ export function useSidebarData(): SidebarData {
|
||||
url: '/subscriptions',
|
||||
icon: CreditCard,
|
||||
},
|
||||
{
|
||||
title: t('System Info'),
|
||||
url: '/system-info',
|
||||
icon: ServerCog,
|
||||
requiredRole: ROLE.SUPER_ADMIN,
|
||||
},
|
||||
{
|
||||
title: t('System Settings'),
|
||||
url: '/system-settings/site',
|
||||
|
||||
+10
-4
@@ -50,10 +50,16 @@ export function useSidebarView(): ResolvedSidebarView {
|
||||
const configFilteredRoot = useSidebarConfig(rootSidebarData.navGroups)
|
||||
|
||||
const rootNavGroups = useMemo<NavGroup[]>(() => {
|
||||
const isAdmin = userRole !== undefined && userRole >= ROLE.ADMIN
|
||||
return configFilteredRoot.filter((group) =>
|
||||
group.id === 'admin' ? isAdmin : true
|
||||
)
|
||||
const role = userRole ?? ROLE.GUEST
|
||||
const isAdmin = role >= ROLE.ADMIN
|
||||
return configFilteredRoot
|
||||
.filter((group) => (group.id === 'admin' ? isAdmin : true))
|
||||
.map((group) => {
|
||||
const items = group.items.filter(
|
||||
(item) => item.requiredRole === undefined || role >= item.requiredRole
|
||||
)
|
||||
return items.length === group.items.length ? group : { ...group, items }
|
||||
})
|
||||
}, [configFilteredRoot, userRole])
|
||||
|
||||
const view = resolveSidebarView(pathname)
|
||||
|
||||
Vendored
+26
-1
@@ -137,6 +137,7 @@
|
||||
"Active Cache Count": "Active Cache Count",
|
||||
"Active Files": "Active Files",
|
||||
"Active models": "Active models",
|
||||
"Active Tasks": "Active Tasks",
|
||||
"active users": "active users",
|
||||
"Actual Amount": "Actual Amount",
|
||||
"Actual Model": "Actual Model",
|
||||
@@ -428,6 +429,7 @@
|
||||
"Ask anything": "Ask anything",
|
||||
"Assigned by administrator only": "Assigned by administrator only",
|
||||
"Assigned by administrators and used to represent a user level, such as default or vip.": "Assigned by administrators and used to represent a user level, such as default or vip.",
|
||||
"Async task polling": "Async task polling",
|
||||
"Async task refund": "Async task refund",
|
||||
"At least one model regex pattern is required": "At least one model regex pattern is required",
|
||||
"At least one valid key source is required": "At least one valid key source is required",
|
||||
@@ -483,6 +485,7 @@
|
||||
"Auto-discover": "Auto-discover",
|
||||
"Auto-discovers endpoints from the provider": "Auto-discovers endpoints from the provider",
|
||||
"Auto-fill when one field exists and another is missing": "Auto-fill when one field exists and another is missing",
|
||||
"Auto-refreshing every {{seconds}}s": "Auto-refreshing every {{seconds}}s",
|
||||
"Auto-retry status codes": "Auto-retry status codes",
|
||||
"Automatically disable channel on repeated failures": "Automatically disable channel on repeated failures",
|
||||
"Automatically disable channels exceeding this response time": "Automatically disable channels exceeding this response time",
|
||||
@@ -553,6 +556,7 @@
|
||||
"Basic Information": "Basic Information",
|
||||
"Basic Templates": "Basic Templates",
|
||||
"Batch Add (one key per line)": "Batch Add (one key per line)",
|
||||
"Batch channel test": "Batch channel test",
|
||||
"Batch delete failed": "Batch delete failed",
|
||||
"Batch deleted {{count}} channels": "Batch deleted {{count}} channels",
|
||||
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed",
|
||||
@@ -568,6 +572,7 @@
|
||||
"Batch test completed: {{success}} succeeded, {{failed}} failed": "Batch test completed: {{success}} succeeded, {{failed}} failed",
|
||||
"Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed": "Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed",
|
||||
"Batch testing models...": "Batch testing models...",
|
||||
"Batch upstream model update": "Batch upstream model update",
|
||||
"Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed": "Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed",
|
||||
"Best for single-tenant deployments. Pricing and billing options stay hidden.": "Best for single-tenant deployments. Pricing and billing options stay hidden.",
|
||||
"Best TTFT": "Best TTFT",
|
||||
@@ -1268,6 +1273,7 @@
|
||||
"Designed and Developed by": "Designed and Developed by",
|
||||
"designed for scale": "designed for scale",
|
||||
"Destroyed": "Destroyed",
|
||||
"Detail": "Detail",
|
||||
"Detailed request logs for investigations.": "Detailed request logs for investigations.",
|
||||
"Details": "Details",
|
||||
"Detect All Upstream Updates": "Detect All Upstream Updates",
|
||||
@@ -1635,6 +1641,7 @@
|
||||
"Exchange rate is required": "Exchange rate is required",
|
||||
"Exchange rate must be greater than 0": "Exchange rate must be greater than 0",
|
||||
"Execute code in a sandbox during the response": "Execute code in a sandbox during the response",
|
||||
"Executor": "Executor",
|
||||
"Exhausted": "Exhausted",
|
||||
"Existing account will be reused": "Existing account will be reused",
|
||||
"Existing Models ({{count}})": "Existing Models ({{count}})",
|
||||
@@ -1674,6 +1681,7 @@
|
||||
"extras": "extras",
|
||||
"Fail Reason": "Fail Reason",
|
||||
"Fail Reason Details": "Fail Reason Details",
|
||||
"failed": "failed",
|
||||
"Failed": "Failed",
|
||||
"Failed to {{action}} user": "Failed to {{action}} user",
|
||||
"Failed to adjust quota": "Failed to adjust quota",
|
||||
@@ -2335,6 +2343,7 @@
|
||||
"List of models supported by this channel. Use comma to separate multiple models.": "List of models supported by this channel. Use comma to separate multiple models.",
|
||||
"List of origins (one per line) allowed for Passkey registration and authentication.": "List of origins (one per line) allowed for Passkey registration and authentication.",
|
||||
"List view": "List view",
|
||||
"Live refresh pauses when no task is running": "Live refresh pauses when no task is running",
|
||||
"LLM Leaderboard": "LLM Leaderboard",
|
||||
"LLM prompt helper": "LLM prompt helper",
|
||||
"Load Balancing": "Load Balancing",
|
||||
@@ -2356,6 +2365,7 @@
|
||||
"Locations": "Locations",
|
||||
"Locked": "Locked",
|
||||
"log": "log",
|
||||
"Log cleanup": "Log cleanup",
|
||||
"Log cleanup progress": "Log cleanup progress",
|
||||
"Log cleanup task started.": "Log cleanup task started.",
|
||||
"Log Details": "Log Details",
|
||||
@@ -2446,6 +2456,7 @@
|
||||
"Merge into Other": "Merge into Other",
|
||||
"Message Priority": "Message Priority",
|
||||
"Metadata": "Metadata",
|
||||
"Midjourney task polling": "Midjourney task polling",
|
||||
"min downtime": "min downtime",
|
||||
"Min Top-up": "Min Top-up",
|
||||
"Min Top-up:": "Min Top-up:",
|
||||
@@ -2653,6 +2664,7 @@
|
||||
"No": "No",
|
||||
"No About Content Set": "No About Content Set",
|
||||
"No Active": "No Active",
|
||||
"No active system tasks.": "No active system tasks.",
|
||||
"No additional type-specific settings for this channel type.": "No additional type-specific settings for this channel type.",
|
||||
"No amount options configured. Add amounts below to get started.": "No amount options configured. Add amounts below to get started.",
|
||||
"No announcements at this time": "No announcements at this time",
|
||||
@@ -2708,6 +2720,7 @@
|
||||
"No groups match your search": "No groups match your search",
|
||||
"No groups yet. Add a group to get started.": "No groups yet. Add a group to get started.",
|
||||
"No header overrides configured.": "No header overrides configured.",
|
||||
"No historical system tasks.": "No historical system tasks.",
|
||||
"No history data available": "No history data available",
|
||||
"No incidents in the last 24 hours": "No incidents in the last 24 hours",
|
||||
"No incidents in the last 30 days": "No incidents in the last 30 days",
|
||||
@@ -2787,6 +2800,7 @@
|
||||
"No subscription records": "No subscription records",
|
||||
"No Sync": "No Sync",
|
||||
"No system announcements": "No system announcements",
|
||||
"No system tasks yet.": "No system tasks yet.",
|
||||
"No token found.": "No token found.",
|
||||
"No tools configured": "No tools configured",
|
||||
"No Upgrade": "No Upgrade",
|
||||
@@ -3083,6 +3097,7 @@
|
||||
"Peak": "Peak",
|
||||
"Peak throughput": "Peak throughput",
|
||||
"Penalises repetition of frequent tokens": "Penalises repetition of frequent tokens",
|
||||
"pending": "pending",
|
||||
"Pending": "Pending",
|
||||
"per": "per",
|
||||
"Per 1K tokens": "Per 1K tokens",
|
||||
@@ -3392,6 +3407,8 @@
|
||||
"Receive Upstream Model Update Notifications": "Receive Upstream Model Update Notifications",
|
||||
"Received": "Received",
|
||||
"Received amount": "Received amount",
|
||||
"Recent maintenance tasks running across instances and their execution status.": "Recent maintenance tasks running across instances and their execution status.",
|
||||
"Recently completed or failed system task runs.": "Recently completed or failed system task runs.",
|
||||
"Recently launched models": "Recently launched models",
|
||||
"Recently launched models gaining traction": "Recently launched models gaining traction",
|
||||
"Recharge": "Recharge",
|
||||
@@ -3649,6 +3666,7 @@
|
||||
"Rules JSON must be an array": "Rules JSON must be an array",
|
||||
"Run GC": "Run GC",
|
||||
"Run tests for the selected models": "Run tests for the selected models",
|
||||
"running": "running",
|
||||
"Running": "Running",
|
||||
"Runway": "Runway",
|
||||
"s": "s",
|
||||
@@ -3883,11 +3901,11 @@
|
||||
"Shorten": "Shorten",
|
||||
"Show": "Show",
|
||||
"Show All": "Show All",
|
||||
"Show sensitive data": "Show sensitive data",
|
||||
"Show all providers including unbound": "Show all providers including unbound",
|
||||
"Show only bound providers": "Show only bound providers",
|
||||
"Show or hide flow columns": "Show or hide flow columns",
|
||||
"Show prices in currency instead of quota.": "Show prices in currency instead of quota.",
|
||||
"Show sensitive data": "Show sensitive data",
|
||||
"Show setup guide": "Show setup guide",
|
||||
"Show token usage statistics in the UI": "Show token usage statistics in the UI",
|
||||
"Showcase core capabilities with demo credentials and limited access.": "Showcase core capabilities with demo credentials and limited access.",
|
||||
@@ -4029,6 +4047,7 @@
|
||||
"Subscription purchased successfully": "Subscription purchased successfully",
|
||||
"Subscriptions": "Subscriptions",
|
||||
"Subtract": "Subtract",
|
||||
"succeeded": "succeeded",
|
||||
"Success": "Success",
|
||||
"Success rate": "Success rate",
|
||||
"Successfully created {{count}} API Key(s)": "Successfully created {{count}} API Key(s)",
|
||||
@@ -4078,6 +4097,7 @@
|
||||
"System Behavior": "System Behavior",
|
||||
"System data statistics": "System data statistics",
|
||||
"System default": "System default",
|
||||
"System Info": "System Info",
|
||||
"System Information": "System Information",
|
||||
"System initialized successfully! Redirecting…": "System initialized successfully! Redirecting…",
|
||||
"System logo": "System logo",
|
||||
@@ -4096,6 +4116,7 @@
|
||||
"System Settings": "System Settings",
|
||||
"System setup wizard": "System setup wizard",
|
||||
"System task records": "System task records",
|
||||
"System Tasks": "System Tasks",
|
||||
"System Version": "System Version",
|
||||
"Table view": "Table view",
|
||||
"Tag": "Tag",
|
||||
@@ -4116,10 +4137,12 @@
|
||||
"Target Path (optional)": "Target Path (optional)",
|
||||
"Target User": "Target User",
|
||||
"Task": "Task",
|
||||
"Task History": "Task History",
|
||||
"Task ID": "Task ID",
|
||||
"Task ID:": "Task ID:",
|
||||
"Task logs": "Task logs",
|
||||
"Task Logs": "Task Logs",
|
||||
"Tasks currently pending or running.": "Tasks currently pending or running.",
|
||||
"Team Collaboration": "Team Collaboration",
|
||||
"Technical Support": "Technical Support",
|
||||
"Telegram": "Telegram",
|
||||
@@ -4498,6 +4521,7 @@
|
||||
"Upstream": "Upstream",
|
||||
"Upstream did not return reset credit details.": "Upstream did not return reset credit details.",
|
||||
"Upstream Model Detection Settings": "Upstream Model Detection Settings",
|
||||
"Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.": "Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.",
|
||||
"Upstream Model Update Check": "Upstream Model Update Check",
|
||||
"Upstream Model Updates": "Upstream Model Updates",
|
||||
"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models": "Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models",
|
||||
@@ -4711,6 +4735,7 @@
|
||||
"Warning: This action is permanent and irreversible!": "Warning: This action is permanent and irreversible!",
|
||||
"We apologize for the inconvenience.": "We apologize for the inconvenience.",
|
||||
"We could not load the setup status.": "We could not load the setup status.",
|
||||
"We could not load system tasks.": "We could not load system tasks.",
|
||||
"We will prompt your device to confirm using biometrics or your hardware key.": "We will prompt your device to confirm using biometrics or your hardware key.",
|
||||
"We'll be back online shortly.": "We'll be back online shortly.",
|
||||
"Web search": "Web search",
|
||||
|
||||
Vendored
+26
-1
@@ -137,6 +137,7 @@
|
||||
"Active Cache Count": "Nombre de caches actifs",
|
||||
"Active Files": "Fichiers actifs",
|
||||
"Active models": "Modèles actifs",
|
||||
"Active Tasks": "Tâches actives",
|
||||
"active users": "utilisateurs actifs",
|
||||
"Actual Amount": "Montant réel",
|
||||
"Actual Model": "Modèle réel",
|
||||
@@ -428,6 +429,7 @@
|
||||
"Ask anything": "Demandez n'importe quoi",
|
||||
"Assigned by administrator only": "Attribué uniquement par l'administrateur",
|
||||
"Assigned by administrators and used to represent a user level, such as default or vip.": "Attribué par les administrateurs pour représenter un niveau utilisateur, comme default ou vip.",
|
||||
"Async task polling": "Interrogation des tâches asynchrones",
|
||||
"Async task refund": "Remboursement de tâche asynchrone",
|
||||
"At least one model regex pattern is required": "Au moins un modèle de regex est requis",
|
||||
"At least one valid key source is required": "Au moins une source de clé valide est requise",
|
||||
@@ -483,6 +485,7 @@
|
||||
"Auto-discover": "Découverte automatique",
|
||||
"Auto-discovers endpoints from the provider": "Découvre automatiquement les points de terminaison du fournisseur",
|
||||
"Auto-fill when one field exists and another is missing": "Remplissage automatique si un champ existe et l'autre est manquant",
|
||||
"Auto-refreshing every {{seconds}}s": "Actualisation automatique toutes les {{seconds}} s",
|
||||
"Auto-retry status codes": "Codes de statut de nouvelle tentative auto",
|
||||
"Automatically disable channel on repeated failures": "Désactiver automatiquement le canal en cas d'échecs répétés",
|
||||
"Automatically disable channels exceeding this response time": "Désactiver automatiquement les canaux dépassant ce temps de réponse",
|
||||
@@ -553,6 +556,7 @@
|
||||
"Basic Information": "Informations de base",
|
||||
"Basic Templates": "Modèles de base",
|
||||
"Batch Add (one key per line)": "Ajout par lots (une clé par ligne)",
|
||||
"Batch channel test": "Test groupé des canaux",
|
||||
"Batch delete failed": "Échec de la suppression par lots",
|
||||
"Batch deleted {{count}} channels": "{{count}} canaux supprimés par lot",
|
||||
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "Détection par lots terminée : {{channels}} canaux, {{add}} à ajouter, {{remove}} à supprimer, {{fails}} échoués",
|
||||
@@ -568,6 +572,7 @@
|
||||
"Batch test completed: {{success}} succeeded, {{failed}} failed": "Test par lots terminé : {{success}} réussi(s), {{failed}} échoué(s)",
|
||||
"Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed": "Test par lots arrêté : {{completed}}/{{total}} terminé(s), {{success}} réussi(s), {{failed}} échoué(s)",
|
||||
"Batch testing models...": "Test des modèles par lots...",
|
||||
"Batch upstream model update": "Mise à jour groupée des modèles en amont",
|
||||
"Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed": "Mises à jour par lot des modèles en amont appliquées : {{channels}} canaux, {{added}} ajoutés, {{removed}} supprimés, {{fails}} échoués",
|
||||
"Best for single-tenant deployments. Pricing and billing options stay hidden.": "Idéal pour les déploiements mono-utilisateur. Les options de tarification et de facturation restent masquées.",
|
||||
"Best TTFT": "Meilleur TTFT",
|
||||
@@ -1268,6 +1273,7 @@
|
||||
"Designed and Developed by": "Conçu et développé par",
|
||||
"designed for scale": "conçu pour la scalabilité",
|
||||
"Destroyed": "Détruit",
|
||||
"Detail": "Détail",
|
||||
"Detailed request logs for investigations.": "Journaux détaillés des requêtes pour les enquêtes.",
|
||||
"Details": "Détails",
|
||||
"Detect All Upstream Updates": "Détecter toutes les mises à jour upstream",
|
||||
@@ -1635,6 +1641,7 @@
|
||||
"Exchange rate is required": "Le taux de change est requis",
|
||||
"Exchange rate must be greater than 0": "Le taux de change doit être supérieur à 0",
|
||||
"Execute code in a sandbox during the response": "Exécuter du code dans un bac à sable pendant la réponse",
|
||||
"Executor": "Exécuteur",
|
||||
"Exhausted": "Épuisé",
|
||||
"Existing account will be reused": "Le compte existant sera réutilisé",
|
||||
"Existing Models ({{count}})": "Modèles existants ({{count}})",
|
||||
@@ -1674,6 +1681,7 @@
|
||||
"extras": "suppléments",
|
||||
"Fail Reason": "Raison de l'échec",
|
||||
"Fail Reason Details": "Détails de la raison de l'échec",
|
||||
"failed": "échoué",
|
||||
"Failed": "Échec",
|
||||
"Failed to {{action}} user": "Échec de l'action {{action}} sur l'utilisateur",
|
||||
"Failed to adjust quota": "Échec de l'ajustement du quota",
|
||||
@@ -2335,6 +2343,7 @@
|
||||
"List of models supported by this channel. Use comma to separate multiple models.": "Liste des modèles pris en charge par ce canal. Utilisez une virgule pour séparer plusieurs modèles.",
|
||||
"List of origins (one per line) allowed for Passkey registration and authentication.": "Liste des origines (une par ligne) autorisées pour l'enregistrement et l'authentification des clés d'accès (Passkey).",
|
||||
"List view": "Vue en liste",
|
||||
"Live refresh pauses when no task is running": "L'actualisation en direct est suspendue lorsqu'aucune tâche n'est en cours",
|
||||
"LLM Leaderboard": "Classement des LLM",
|
||||
"LLM prompt helper": "Assistant prompt LLM",
|
||||
"Load Balancing": "Équilibrage de charge",
|
||||
@@ -2356,6 +2365,7 @@
|
||||
"Locations": "Emplacements",
|
||||
"Locked": "Verrouillé",
|
||||
"log": "journal",
|
||||
"Log cleanup": "Nettoyage des journaux",
|
||||
"Log cleanup progress": "Progression du nettoyage des journaux",
|
||||
"Log cleanup task started.": "La tâche de nettoyage des journaux a démarré.",
|
||||
"Log Details": "Détails du journal",
|
||||
@@ -2446,6 +2456,7 @@
|
||||
"Merge into Other": "Fusionner dans Autres",
|
||||
"Message Priority": "Priorité du message",
|
||||
"Metadata": "Métadonnées",
|
||||
"Midjourney task polling": "Interrogation des tâches Midjourney",
|
||||
"min downtime": "min d'interruption",
|
||||
"Min Top-up": "Recharge min.",
|
||||
"Min Top-up:": "Recharge min. :",
|
||||
@@ -2653,6 +2664,7 @@
|
||||
"No": "Non",
|
||||
"No About Content Set": "Aucun contenu « À propos » défini",
|
||||
"No Active": "Aucun actif",
|
||||
"No active system tasks.": "Aucune tâche système active.",
|
||||
"No additional type-specific settings for this channel type.": "Aucun paramètre supplémentaire spécifique au type pour ce type de canal.",
|
||||
"No amount options configured. Add amounts below to get started.": "Aucune option de montant configurée. Ajoutez des montants ci-dessous pour commencer.",
|
||||
"No announcements at this time": "Aucune annonce pour le moment",
|
||||
@@ -2708,6 +2720,7 @@
|
||||
"No groups match your search": "Aucun groupe ne correspond à votre recherche",
|
||||
"No groups yet. Add a group to get started.": "Aucun groupe pour le moment. Ajoutez un groupe pour commencer.",
|
||||
"No header overrides configured.": "Aucune surcharge d'en-têtes configurée.",
|
||||
"No historical system tasks.": "Aucune tâche système dans l’historique.",
|
||||
"No history data available": "Aucune donnée historique disponible",
|
||||
"No incidents in the last 24 hours": "Aucun incident au cours des dernières 24 heures",
|
||||
"No incidents in the last 30 days": "Aucun incident sur les 30 derniers jours",
|
||||
@@ -2787,6 +2800,7 @@
|
||||
"No subscription records": "Aucun enregistrement d'abonnement",
|
||||
"No Sync": "Pas de synchronisation",
|
||||
"No system announcements": "Aucune annonce système",
|
||||
"No system tasks yet.": "Aucune tâche système pour le moment.",
|
||||
"No token found.": "Aucun jeton trouvé.",
|
||||
"No tools configured": "Aucun outil configuré",
|
||||
"No Upgrade": "Pas de mise à niveau",
|
||||
@@ -3083,6 +3097,7 @@
|
||||
"Peak": "Pic",
|
||||
"Peak throughput": "Débit de pointe",
|
||||
"Penalises repetition of frequent tokens": "Pénalise la répétition des jetons fréquents",
|
||||
"pending": "en attente",
|
||||
"Pending": "En attente",
|
||||
"per": "par",
|
||||
"Per 1K tokens": "Par 1K tokens",
|
||||
@@ -3392,6 +3407,8 @@
|
||||
"Receive Upstream Model Update Notifications": "Recevoir les notifications de mise à jour des modèles en amont",
|
||||
"Received": "Reçu",
|
||||
"Received amount": "Montant reçu",
|
||||
"Recent maintenance tasks running across instances and their execution status.": "Tâches de maintenance récentes exécutées sur les instances et leur état d'exécution.",
|
||||
"Recently completed or failed system task runs.": "Exécutions de tâches système récemment terminées ou échouées.",
|
||||
"Recently launched models": "Modèles récemment lancés",
|
||||
"Recently launched models gaining traction": "Modèles récemment publiés et en forte progression",
|
||||
"Recharge": "Recharger",
|
||||
@@ -3649,6 +3666,7 @@
|
||||
"Rules JSON must be an array": "Le JSON des règles doit être un tableau",
|
||||
"Run GC": "Exécuter le GC",
|
||||
"Run tests for the selected models": "Exécuter les tests pour les modèles sélectionnés",
|
||||
"running": "en cours",
|
||||
"Running": "En cours",
|
||||
"Runway": "Durée restante",
|
||||
"s": "s",
|
||||
@@ -3883,11 +3901,11 @@
|
||||
"Shorten": "Raccourcir",
|
||||
"Show": "Afficher",
|
||||
"Show All": "Tout afficher",
|
||||
"Show sensitive data": "Afficher les données sensibles",
|
||||
"Show all providers including unbound": "Afficher tous les fournisseurs (y compris non liés)",
|
||||
"Show only bound providers": "Afficher uniquement les fournisseurs liés",
|
||||
"Show or hide flow columns": "Afficher ou masquer les colonnes du flux",
|
||||
"Show prices in currency instead of quota.": "Afficher les prix en devise au lieu du quota.",
|
||||
"Show sensitive data": "Afficher les données sensibles",
|
||||
"Show setup guide": "Afficher le guide de configuration",
|
||||
"Show token usage statistics in the UI": "Afficher les statistiques d'utilisation des jetons dans l'interface utilisateur",
|
||||
"Showcase core capabilities with demo credentials and limited access.": "Présenter les fonctionnalités principales avec des identifiants de démonstration et un accès limité.",
|
||||
@@ -4029,6 +4047,7 @@
|
||||
"Subscription purchased successfully": "Abonnement acheté avec succès",
|
||||
"Subscriptions": "Abonnements",
|
||||
"Subtract": "Soustraire",
|
||||
"succeeded": "réussi",
|
||||
"Success": "Succès",
|
||||
"Success rate": "Taux de réussite",
|
||||
"Successfully created {{count}} API Key(s)": "{{count}} clé(s) API créée(s) avec succès",
|
||||
@@ -4078,6 +4097,7 @@
|
||||
"System Behavior": "Comportement du système",
|
||||
"System data statistics": "Statistiques des données système",
|
||||
"System default": "Système par défaut",
|
||||
"System Info": "Infos système",
|
||||
"System Information": "Informations système",
|
||||
"System initialized successfully! Redirecting…": "Système initialisé avec succès ! Redirection…",
|
||||
"System logo": "Logo du système",
|
||||
@@ -4096,6 +4116,7 @@
|
||||
"System Settings": "Paramètres du système",
|
||||
"System setup wizard": "Assistant de configuration du système",
|
||||
"System task records": "Historique des tâches système",
|
||||
"System Tasks": "Tâches système",
|
||||
"System Version": "Version du système",
|
||||
"Table view": "Vue en tableau",
|
||||
"Tag": "Balise",
|
||||
@@ -4116,10 +4137,12 @@
|
||||
"Target Path (optional)": "Chemin cible (optionnel)",
|
||||
"Target User": "Utilisateur cible",
|
||||
"Task": "Tâche",
|
||||
"Task History": "Historique des tâches",
|
||||
"Task ID": "ID de la tâche",
|
||||
"Task ID:": "ID de tâche :",
|
||||
"Task logs": "Journaux des tâches",
|
||||
"Task Logs": "Journaux de tâches",
|
||||
"Tasks currently pending or running.": "Tâches actuellement en attente ou en cours d’exécution.",
|
||||
"Team Collaboration": "Collaboration d'équipe",
|
||||
"Technical Support": "Support technique",
|
||||
"Telegram": "Telegram",
|
||||
@@ -4498,6 +4521,7 @@
|
||||
"Upstream": "Amont",
|
||||
"Upstream did not return reset credit details.": "L'amont n'a renvoyé aucun détail de crédit de réinitialisation.",
|
||||
"Upstream Model Detection Settings": "Paramètres de détection des modèles en amont",
|
||||
"Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.": "Tâche de détection des modèles en amont démarrée. Suivez la progression dans Infos système, puis actualisez pour examiner les mises à jour en attente.",
|
||||
"Upstream Model Update Check": "Vérification des mises à jour des modèles en amont",
|
||||
"Upstream Model Updates": "Mises à jour des modèles en amont",
|
||||
"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models": "Mises à jour des modèles en amont appliquées : {{added}} ajoutés, {{removed}} supprimés, {{ignored}} ignorés cette fois, {{totalIgnored}} modèles ignorés au total",
|
||||
@@ -4711,6 +4735,7 @@
|
||||
"Warning: This action is permanent and irreversible!": "Avertissement : Cette action est permanente et irréversible !",
|
||||
"We apologize for the inconvenience.": "Nous nous excusons pour le désagrément.",
|
||||
"We could not load the setup status.": "Nous n'avons pas pu charger l'état de la configuration.",
|
||||
"We could not load system tasks.": "Impossible de charger les tâches système.",
|
||||
"We will prompt your device to confirm using biometrics or your hardware key.": "Nous allons demander à votre appareil de confirmer en utilisant la biométrie ou votre clé matérielle.",
|
||||
"We'll be back online shortly.": "Nous serons de retour en ligne sous peu.",
|
||||
"Web search": "Recherche web",
|
||||
|
||||
Vendored
+27
-2
@@ -137,6 +137,7 @@
|
||||
"Active Cache Count": "アクティブキャッシュ数",
|
||||
"Active Files": "アクティブファイル",
|
||||
"Active models": "アクティブなモデル",
|
||||
"Active Tasks": "進行中のタスク",
|
||||
"active users": "アクティブユーザー",
|
||||
"Actual Amount": "実際の金額",
|
||||
"Actual Model": "実際のモデル",
|
||||
@@ -428,6 +429,7 @@
|
||||
"Ask anything": "何でも質問する",
|
||||
"Assigned by administrator only": "管理者のみ割り当て",
|
||||
"Assigned by administrators and used to represent a user level, such as default or vip.": "管理者が割り当て、default や vip などのユーザーレベルを表します。",
|
||||
"Async task polling": "非同期タスクのポーリング",
|
||||
"Async task refund": "非同期タスク返金",
|
||||
"At least one model regex pattern is required": "少なくとも1つのモデル正規表現パターンが必要です",
|
||||
"At least one valid key source is required": "少なくとも1つの有効なキーソースが必要です",
|
||||
@@ -483,6 +485,7 @@
|
||||
"Auto-discover": "自動検出",
|
||||
"Auto-discovers endpoints from the provider": "プロバイダーからエンドポイントを自動検出します",
|
||||
"Auto-fill when one field exists and another is missing": "一方のフィールドがあり他方が欠けている場合に自動補完",
|
||||
"Auto-refreshing every {{seconds}}s": "{{seconds}} 秒ごとに自動更新",
|
||||
"Auto-retry status codes": "自動リトライするステータスコード",
|
||||
"Automatically disable channel on repeated failures": "繰り返しの失敗でチャネルを自動的に無効にする",
|
||||
"Automatically disable channels exceeding this response time": "この応答時間を超えるチャネルを自動的に無効にする",
|
||||
@@ -553,6 +556,7 @@
|
||||
"Basic Information": "基本情報",
|
||||
"Basic Templates": "基本テンプレート",
|
||||
"Batch Add (one key per line)": "一括追加(1行に1つのキー)",
|
||||
"Batch channel test": "チャネル一括テスト",
|
||||
"Batch delete failed": "一括削除に失敗しました",
|
||||
"Batch deleted {{count}} channels": "{{count}} 件のチャネルを一括削除しました",
|
||||
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "一括検出完了:{{channels}} チャネル、{{add}} 個追加、{{remove}} 個削除、{{fails}} 個失敗",
|
||||
@@ -568,6 +572,7 @@
|
||||
"Batch test completed: {{success}} succeeded, {{failed}} failed": "バッチテストが完了しました: {{success}} 件成功、{{failed}} 件失敗",
|
||||
"Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed": "バッチテストを停止しました: {{completed}}/{{total}} 完了、{{success}} 件成功、{{failed}} 件失敗",
|
||||
"Batch testing models...": "モデルをバッチテスト中...",
|
||||
"Batch upstream model update": "上流モデル一括更新",
|
||||
"Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed": "一括上流モデル更新を処理しました:{{channels}} チャネル、{{added}} 個追加、{{removed}} 個削除、{{fails}} 個失敗",
|
||||
"Best for single-tenant deployments. Pricing and billing options stay hidden.": "シングルテナント環境に最適です。料金設定や請求オプションは非表示になります。",
|
||||
"Best TTFT": "最良 TTFT",
|
||||
@@ -1268,6 +1273,7 @@
|
||||
"Designed and Developed by": "設計・開発",
|
||||
"designed for scale": "スケールのために設計",
|
||||
"Destroyed": "破棄済み",
|
||||
"Detail": "詳細",
|
||||
"Detailed request logs for investigations.": "調査のための詳細なリクエストログ。",
|
||||
"Details": "詳細",
|
||||
"Detect All Upstream Updates": "すべてのアップストリーム更新を検出",
|
||||
@@ -1635,6 +1641,7 @@
|
||||
"Exchange rate is required": "為替レートは必須です",
|
||||
"Exchange rate must be greater than 0": "為替レートは 0 より大きくする必要があります",
|
||||
"Execute code in a sandbox during the response": "応答中にサンドボックスでコードを実行",
|
||||
"Executor": "実行ノード",
|
||||
"Exhausted": "使い切り",
|
||||
"Existing account will be reused": "既存のアカウントが再利用されます",
|
||||
"Existing Models ({{count}})": "既存のモデル ({{count}})",
|
||||
@@ -1674,6 +1681,7 @@
|
||||
"extras": "追加項目",
|
||||
"Fail Reason": "失敗理由",
|
||||
"Fail Reason Details": "失敗理由の詳細",
|
||||
"failed": "失敗",
|
||||
"Failed": "失敗",
|
||||
"Failed to {{action}} user": "ユーザーの{{action}}に失敗しました",
|
||||
"Failed to adjust quota": "クォータの調整に失敗しました",
|
||||
@@ -2335,6 +2343,7 @@
|
||||
"List of models supported by this channel. Use comma to separate multiple models.": "このチャネルがサポートするモデルのリストです。複数のモデルはカンマで区切ってください。",
|
||||
"List of origins (one per line) allowed for Passkey registration and authentication.": "Passkeyの登録と認証が許可されているオリジン(1行に1つ)のリスト。",
|
||||
"List view": "リスト表示",
|
||||
"Live refresh pauses when no task is running": "実行中のタスクがない場合、自動更新は一時停止します",
|
||||
"LLM Leaderboard": "LLM リーダーボード",
|
||||
"LLM prompt helper": "LLMプロンプトヘルパー",
|
||||
"Load Balancing": "ロードバランシング",
|
||||
@@ -2356,6 +2365,7 @@
|
||||
"Locations": "場所",
|
||||
"Locked": "ロック済み",
|
||||
"log": "ログ",
|
||||
"Log cleanup": "ログクリーンアップ",
|
||||
"Log cleanup progress": "ログクリーンアップの進行状況",
|
||||
"Log cleanup task started.": "ログクリーンアップタスクを開始しました。",
|
||||
"Log Details": "ログの詳細",
|
||||
@@ -2446,6 +2456,7 @@
|
||||
"Merge into Other": "その他にまとめる",
|
||||
"Message Priority": "メッセージの優先度",
|
||||
"Metadata": "メタデータ",
|
||||
"Midjourney task polling": "Midjourney タスクのポーリング",
|
||||
"min downtime": "分のダウンタイム",
|
||||
"Min Top-up": "最低チャージ額",
|
||||
"Min Top-up:": "最小チャージ額:",
|
||||
@@ -2653,6 +2664,7 @@
|
||||
"No": "いいえ",
|
||||
"No About Content Set": "概要コンテンツが設定されていません",
|
||||
"No Active": "アクティブなし",
|
||||
"No active system tasks.": "進行中のシステムタスクはありません。",
|
||||
"No additional type-specific settings for this channel type.": "このチャネルタイプには、追加のタイプ固有の設定はありません。",
|
||||
"No amount options configured. Add amounts below to get started.": "金額オプションは設定されていません。開始するには、以下の金額を追加してください。",
|
||||
"No announcements at this time": "現在のお知らせはありません",
|
||||
@@ -2708,6 +2720,7 @@
|
||||
"No groups match your search": "検索に一致するグループがありません",
|
||||
"No groups yet. Add a group to get started.": "グループはまだありません。グループを追加して開始してください。",
|
||||
"No header overrides configured.": "ヘッダーのオーバーライドが設定されていません。",
|
||||
"No historical system tasks.": "システムタスク履歴はありません。",
|
||||
"No history data available": "履歴データがありません",
|
||||
"No incidents in the last 24 hours": "過去 24 時間にインシデントはありません",
|
||||
"No incidents in the last 30 days": "過去 30 日間でインシデントはありません",
|
||||
@@ -2787,6 +2800,7 @@
|
||||
"No subscription records": "サブスクリプション記録がありません",
|
||||
"No Sync": "同期なし",
|
||||
"No system announcements": "システムのお知らせがありません",
|
||||
"No system tasks yet.": "システムタスクはまだありません。",
|
||||
"No token found.": "トークンが見つかりません。",
|
||||
"No tools configured": "ツールが未設定です",
|
||||
"No Upgrade": "アップグレードなし",
|
||||
@@ -3083,6 +3097,7 @@
|
||||
"Peak": "ピーク",
|
||||
"Peak throughput": "ピークスループット",
|
||||
"Penalises repetition of frequent tokens": "頻出トークンの繰り返しを抑制します",
|
||||
"pending": "保留中",
|
||||
"Pending": "保留中",
|
||||
"per": "あたり",
|
||||
"Per 1K tokens": "1Kトークンあたり",
|
||||
@@ -3392,6 +3407,8 @@
|
||||
"Receive Upstream Model Update Notifications": "アップストリームモデル更新通知を受け取る",
|
||||
"Received": "受信済み",
|
||||
"Received amount": "受け取り額",
|
||||
"Recent maintenance tasks running across instances and their execution status.": "各インスタンスで実行された最近のメンテナンスタスクとその実行状態。",
|
||||
"Recently completed or failed system task runs.": "最近完了または失敗したシステムタスク実行です。",
|
||||
"Recently launched models": "最近リリースされたモデル",
|
||||
"Recently launched models gaining traction": "最近リリースされ勢いのあるモデル",
|
||||
"Recharge": "チャージ",
|
||||
@@ -3649,6 +3666,7 @@
|
||||
"Rules JSON must be an array": "ルール JSON は配列である必要があります",
|
||||
"Run GC": "GC 実行",
|
||||
"Run tests for the selected models": "選択したモデルのテストを実行",
|
||||
"running": "実行中",
|
||||
"Running": "実行中",
|
||||
"Runway": "残り期間",
|
||||
"s": "s",
|
||||
@@ -3883,11 +3901,11 @@
|
||||
"Shorten": "短縮",
|
||||
"Show": "表示",
|
||||
"Show All": "すべて表示",
|
||||
"Show sensitive data": "機密データを表示",
|
||||
"Show all providers including unbound": "未バインドを含むすべてのプロバイダーを表示",
|
||||
"Show only bound providers": "バインド済みのプロバイダーのみ表示",
|
||||
"Show or hide flow columns": "フロー列の表示・非表示",
|
||||
"Show prices in currency instead of quota.": "クォータではなく通貨で価格を表示。",
|
||||
"Show sensitive data": "機密データを表示",
|
||||
"Show setup guide": "セットアップガイドを表示",
|
||||
"Show token usage statistics in the UI": "UIでトークン使用統計を表示",
|
||||
"Showcase core capabilities with demo credentials and limited access.": "デモ用の認証情報と制限付きアクセスでコア機能を紹介します。",
|
||||
@@ -4029,6 +4047,7 @@
|
||||
"Subscription purchased successfully": "サブスクリプションを購入しました",
|
||||
"Subscriptions": "サブスクリプション",
|
||||
"Subtract": "減算",
|
||||
"succeeded": "成功",
|
||||
"Success": "成功",
|
||||
"Success rate": "成功率",
|
||||
"Successfully created {{count}} API Key(s)": "{{count}}個のAPIキーが正常に作成されました",
|
||||
@@ -4078,6 +4097,7 @@
|
||||
"System Behavior": "システムの動作",
|
||||
"System data statistics": "システムデータ統計",
|
||||
"System default": "システムデフォルト",
|
||||
"System Info": "システム情報",
|
||||
"System Information": "システム情報",
|
||||
"System initialized successfully! Redirecting…": "システムが正常に初期化されました!リダイレクト中…",
|
||||
"System logo": "システムロゴ",
|
||||
@@ -4096,6 +4116,7 @@
|
||||
"System Settings": "システム設定",
|
||||
"System setup wizard": "システムセットアップウィザード",
|
||||
"System task records": "システムタスク記録",
|
||||
"System Tasks": "システムタスク",
|
||||
"System Version": "システムバージョン",
|
||||
"Table view": "テーブル表示",
|
||||
"Tag": "タグ",
|
||||
@@ -4116,10 +4137,12 @@
|
||||
"Target Path (optional)": "ターゲットパス(任意)",
|
||||
"Target User": "対象ユーザー",
|
||||
"Task": "タスク",
|
||||
"Task History": "タスク履歴",
|
||||
"Task ID": "タスクID",
|
||||
"Task ID:": "タスクID:",
|
||||
"Task logs": "タスクログ",
|
||||
"Task Logs": "タスク履歴",
|
||||
"Task Logs": "タスクログ",
|
||||
"Tasks currently pending or running.": "現在待機中または実行中のタスクです。",
|
||||
"Team Collaboration": "チームコラボレーション",
|
||||
"Technical Support": "テクニカルサポート",
|
||||
"Telegram": "Telegram",
|
||||
@@ -4498,6 +4521,7 @@
|
||||
"Upstream": "アップストリーム",
|
||||
"Upstream did not return reset credit details.": "上流からリセット回数の詳細が返されませんでした。",
|
||||
"Upstream Model Detection Settings": "アップストリームモデル検出設定",
|
||||
"Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.": "上流モデル検出タスクを開始しました。システム情報で進捗を確認し、完了後に更新してステージングされた変更をご確認ください。",
|
||||
"Upstream Model Update Check": "アップストリームモデル更新チェック",
|
||||
"Upstream Model Updates": "上流モデルの更新",
|
||||
"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models": "上流モデル更新を処理しました:{{added}} 個追加、{{removed}} 個削除、今回 {{ignored}} 個無視、合計 {{totalIgnored}} 個の無視モデル",
|
||||
@@ -4711,6 +4735,7 @@
|
||||
"Warning: This action is permanent and irreversible!": "警告: この操作は永続的で元に戻せません!",
|
||||
"We apologize for the inconvenience.": "ご不便をおかけして申し訳ありません。",
|
||||
"We could not load the setup status.": "セットアップステータスを読み込めませんでした。",
|
||||
"We could not load system tasks.": "システムタスクを読み込めませんでした。",
|
||||
"We will prompt your device to confirm using biometrics or your hardware key.": "生体認証またはハードウェアキーを使用して確認するよう、デバイスにプロンプトが表示されます。",
|
||||
"We'll be back online shortly.": "まもなくオンラインに戻ります。",
|
||||
"Web search": "ウェブ検索",
|
||||
|
||||
Vendored
+26
-1
@@ -137,6 +137,7 @@
|
||||
"Active Cache Count": "Активных кэшей",
|
||||
"Active Files": "Активных файлов",
|
||||
"Active models": "Активные модели",
|
||||
"Active Tasks": "Активные задачи",
|
||||
"active users": "активных пользователей",
|
||||
"Actual Amount": "Фактическая сумма",
|
||||
"Actual Model": "Фактическая модель",
|
||||
@@ -428,6 +429,7 @@
|
||||
"Ask anything": "Спросите что угодно",
|
||||
"Assigned by administrator only": "Назначается только администратором",
|
||||
"Assigned by administrators and used to represent a user level, such as default or vip.": "Назначается администраторами и обозначает уровень пользователя, например default или vip.",
|
||||
"Async task polling": "Опрос асинхронных задач",
|
||||
"Async task refund": "Возврат асинхронной задачи",
|
||||
"At least one model regex pattern is required": "Требуется хотя бы один шаблон регулярного выражения модели",
|
||||
"At least one valid key source is required": "Требуется хотя бы один действительный источник ключа",
|
||||
@@ -483,6 +485,7 @@
|
||||
"Auto-discover": "Автообнаружение",
|
||||
"Auto-discovers endpoints from the provider": "Автоматически обнаруживает конечные точки от провайдера",
|
||||
"Auto-fill when one field exists and another is missing": "Автозаполнение, когда одно поле есть, а другое отсутствует",
|
||||
"Auto-refreshing every {{seconds}}s": "Автообновление каждые {{seconds}} с",
|
||||
"Auto-retry status codes": "Коды авто-повтора",
|
||||
"Automatically disable channel on repeated failures": "Автоматически отключать канал при повторных неудачах",
|
||||
"Automatically disable channels exceeding this response time": "Автоматически отключать каналы, превышающие это время ответа",
|
||||
@@ -553,6 +556,7 @@
|
||||
"Basic Information": "Основная информация",
|
||||
"Basic Templates": "Базовые шаблоны",
|
||||
"Batch Add (one key per line)": "Пакетное добавление (один ключ на строку)",
|
||||
"Batch channel test": "Пакетное тестирование каналов",
|
||||
"Batch delete failed": "Пакетное удаление не удалось",
|
||||
"Batch deleted {{count}} channels": "Пакетно удалено каналов: {{count}}",
|
||||
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "Пакетное обнаружение завершено: {{channels}} каналов, {{add}} для добавления, {{remove}} для удаления, {{fails}} ошибок",
|
||||
@@ -568,6 +572,7 @@
|
||||
"Batch test completed: {{success}} succeeded, {{failed}} failed": "Пакетный тест завершен: {{success}} успешно, {{failed}} с ошибкой",
|
||||
"Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed": "Пакетный тест остановлен: {{completed}}/{{total}} завершено, {{success}} успешно, {{failed}} с ошибкой",
|
||||
"Batch testing models...": "Пакетное тестирование моделей...",
|
||||
"Batch upstream model update": "Пакетное обновление вышестоящих моделей",
|
||||
"Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed": "Пакетное обновление моделей: {{channels}} каналов, {{added}} добавлено, {{removed}} удалено, {{fails}} ошибок",
|
||||
"Best for single-tenant deployments. Pricing and billing options stay hidden.": "Лучший вариант для однопользовательских развёртываний. Опции ценообразования и биллинга будут скрыты.",
|
||||
"Best TTFT": "Лучший TTFT",
|
||||
@@ -1268,6 +1273,7 @@
|
||||
"Designed and Developed by": "Разработано и создано",
|
||||
"designed for scale": "спроектировано для масштабирования",
|
||||
"Destroyed": "Уничтожено",
|
||||
"Detail": "Подробности",
|
||||
"Detailed request logs for investigations.": "Подробные журналы запросов для расследований.",
|
||||
"Details": "Детали",
|
||||
"Detect All Upstream Updates": "Обнаружить все обновления из upstream",
|
||||
@@ -1635,6 +1641,7 @@
|
||||
"Exchange rate is required": "Требуется курс обмена",
|
||||
"Exchange rate must be greater than 0": "Курс обмена должен быть больше 0",
|
||||
"Execute code in a sandbox during the response": "Выполнять код в песочнице во время ответа",
|
||||
"Executor": "Исполнитель",
|
||||
"Exhausted": "Исчерпано",
|
||||
"Existing account will be reused": "Существующая учётная запись будет использована повторно",
|
||||
"Existing Models ({{count}})": "Существующие модели ({{count}})",
|
||||
@@ -1674,6 +1681,7 @@
|
||||
"extras": "доп. пункты",
|
||||
"Fail Reason": "Причина сбоя",
|
||||
"Fail Reason Details": "Детали причины сбоя",
|
||||
"failed": "ошибка",
|
||||
"Failed": "Неудача",
|
||||
"Failed to {{action}} user": "Не удалось выполнить {{action}} для пользователя",
|
||||
"Failed to adjust quota": "Не удалось изменить квоту",
|
||||
@@ -2335,6 +2343,7 @@
|
||||
"List of models supported by this channel. Use comma to separate multiple models.": "Список моделей, поддерживаемых этим каналом. Используйте запятую для разделения нескольких моделей.",
|
||||
"List of origins (one per line) allowed for Passkey registration and authentication.": "Список источников (один на строку), разрешенных для регистрации и аутентификации Passkey.",
|
||||
"List view": "Вид списка",
|
||||
"Live refresh pauses when no task is running": "Автообновление приостанавливается, когда нет выполняемых задач",
|
||||
"LLM Leaderboard": "Рейтинг LLM",
|
||||
"LLM prompt helper": "Помощник с промптом для LLM",
|
||||
"Load Balancing": "Балансировка нагрузки",
|
||||
@@ -2356,6 +2365,7 @@
|
||||
"Locations": "Местоположения",
|
||||
"Locked": "Заблокировано",
|
||||
"log": "записи",
|
||||
"Log cleanup": "Очистка журналов",
|
||||
"Log cleanup progress": "Ход очистки журнала",
|
||||
"Log cleanup task started.": "Задача очистки журнала запущена.",
|
||||
"Log Details": "Детали журнала",
|
||||
@@ -2446,6 +2456,7 @@
|
||||
"Merge into Other": "Объединить в «Другое»",
|
||||
"Message Priority": "Приоритет сообщения",
|
||||
"Metadata": "Метаданные",
|
||||
"Midjourney task polling": "Опрос задач Midjourney",
|
||||
"min downtime": "мин простоя",
|
||||
"Min Top-up": "Мин. пополнение",
|
||||
"Min Top-up:": "Мин. пополнение:",
|
||||
@@ -2653,6 +2664,7 @@
|
||||
"No": "Нет",
|
||||
"No About Content Set": "Содержимое раздела \"О нас\" не установлено",
|
||||
"No Active": "Нет активных",
|
||||
"No active system tasks.": "Нет активных системных задач.",
|
||||
"No additional type-specific settings for this channel type.": "Нет дополнительных настроек, специфичных для этого типа канала.",
|
||||
"No amount options configured. Add amounts below to get started.": "Не настроены параметры суммы. Добавьте суммы ниже, чтобы начать.",
|
||||
"No announcements at this time": "Нет объявлений на данный момент",
|
||||
@@ -2708,6 +2720,7 @@
|
||||
"No groups match your search": "Нет групп, соответствующих вашему поиску",
|
||||
"No groups yet. Add a group to get started.": "Групп пока нет. Добавьте группу, чтобы начать.",
|
||||
"No header overrides configured.": "Нет настроенных переопределений заголовков.",
|
||||
"No historical system tasks.": "Нет исторических системных задач.",
|
||||
"No history data available": "Исторические данные недоступны",
|
||||
"No incidents in the last 24 hours": "За последние 24 часа инцидентов не было",
|
||||
"No incidents in the last 30 days": "За последние 30 дней инцидентов не было",
|
||||
@@ -2787,6 +2800,7 @@
|
||||
"No subscription records": "Нет записей подписок",
|
||||
"No Sync": "Без синхронизации",
|
||||
"No system announcements": "Нет системных объявлений",
|
||||
"No system tasks yet.": "Пока нет системных задач.",
|
||||
"No token found.": "Токен не найден.",
|
||||
"No tools configured": "Нет настроенных инструментов",
|
||||
"No Upgrade": "Без повышения",
|
||||
@@ -3083,6 +3097,7 @@
|
||||
"Peak": "Пик",
|
||||
"Peak throughput": "Пиковая пропускная способность",
|
||||
"Penalises repetition of frequent tokens": "Штрафует повторение частых токенов",
|
||||
"pending": "ожидание",
|
||||
"Pending": "Ожидает",
|
||||
"per": "за",
|
||||
"Per 1K tokens": "За 1K токенов",
|
||||
@@ -3392,6 +3407,8 @@
|
||||
"Receive Upstream Model Update Notifications": "Получать уведомления об обновлениях вышестоящих моделей",
|
||||
"Received": "Получено",
|
||||
"Received amount": "Полученная сумма",
|
||||
"Recent maintenance tasks running across instances and their execution status.": "Недавние задачи обслуживания, выполняемые на всех экземплярах, и их статус выполнения.",
|
||||
"Recently completed or failed system task runs.": "Недавние запуски системных задач, завершенные или завершившиеся с ошибкой.",
|
||||
"Recently launched models": "Недавно запущенные модели",
|
||||
"Recently launched models gaining traction": "Недавно вышедшие модели, набирающие популярность",
|
||||
"Recharge": "Пополнение",
|
||||
@@ -3649,6 +3666,7 @@
|
||||
"Rules JSON must be an array": "JSON правил должен быть массивом",
|
||||
"Run GC": "Запустить GC",
|
||||
"Run tests for the selected models": "Запустить тесты для выбранных моделей",
|
||||
"running": "выполняется",
|
||||
"Running": "Выполняется",
|
||||
"Runway": "Запас",
|
||||
"s": "s",
|
||||
@@ -3883,11 +3901,11 @@
|
||||
"Shorten": "Сократить",
|
||||
"Show": "Показать",
|
||||
"Show All": "Показать все",
|
||||
"Show sensitive data": "Показать конфиденциальные данные",
|
||||
"Show all providers including unbound": "Показать всех провайдеров (включая непривязанные)",
|
||||
"Show only bound providers": "Показать только привязанных провайдеров",
|
||||
"Show or hide flow columns": "Показать или скрыть столбцы потока",
|
||||
"Show prices in currency instead of quota.": "Показывать цены в валюте вместо квоты.",
|
||||
"Show sensitive data": "Показать конфиденциальные данные",
|
||||
"Show setup guide": "Показать руководство по настройке",
|
||||
"Show token usage statistics in the UI": "Показывать статистику использования токенов в пользовательском интерфейсе",
|
||||
"Showcase core capabilities with demo credentials and limited access.": "Демонстрация основных возможностей с демо-учётными данными и ограниченным доступом.",
|
||||
@@ -4029,6 +4047,7 @@
|
||||
"Subscription purchased successfully": "Подписка успешно приобретена",
|
||||
"Subscriptions": "Подписки",
|
||||
"Subtract": "Вычесть",
|
||||
"succeeded": "успешно",
|
||||
"Success": "Успешно",
|
||||
"Success rate": "Доля успешных запросов",
|
||||
"Successfully created {{count}} API Key(s)": "Успешно создано {{count}} API-ключ(а/ей)",
|
||||
@@ -4078,6 +4097,7 @@
|
||||
"System Behavior": "Поведение системы",
|
||||
"System data statistics": "Статистика системных данных",
|
||||
"System default": "По умолчанию",
|
||||
"System Info": "Информация о системе",
|
||||
"System Information": "Системная информация",
|
||||
"System initialized successfully! Redirecting…": "Система успешно инициализирована! Перенаправление…",
|
||||
"System logo": "Логотип системы",
|
||||
@@ -4096,6 +4116,7 @@
|
||||
"System Settings": "Настройки системы",
|
||||
"System setup wizard": "Мастер настройки системы",
|
||||
"System task records": "Записи системных задач",
|
||||
"System Tasks": "Системные задачи",
|
||||
"System Version": "Версия системы",
|
||||
"Table view": "Вид таблицы",
|
||||
"Tag": "Тег",
|
||||
@@ -4116,10 +4137,12 @@
|
||||
"Target Path (optional)": "Целевой путь (необязательно)",
|
||||
"Target User": "Целевой пользователь",
|
||||
"Task": "Задача",
|
||||
"Task History": "История задач",
|
||||
"Task ID": "ID задачи",
|
||||
"Task ID:": "ID задачи:",
|
||||
"Task logs": "Журналы задач",
|
||||
"Task Logs": "Журнал задач",
|
||||
"Tasks currently pending or running.": "Задачи, которые ожидают выполнения или выполняются сейчас.",
|
||||
"Team Collaboration": "Совместная работа в команде",
|
||||
"Technical Support": "Техническая поддержка",
|
||||
"Telegram": "Telegram",
|
||||
@@ -4498,6 +4521,7 @@
|
||||
"Upstream": "Источник",
|
||||
"Upstream did not return reset credit details.": "Вышестоящий сервис не вернул сведения о сбросах лимита.",
|
||||
"Upstream Model Detection Settings": "Настройки обнаружения моделей провайдера",
|
||||
"Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.": "Задача обнаружения моделей вышестоящего источника запущена. Следите за ходом в разделе «Информация о системе», затем обновите, чтобы просмотреть подготовленные изменения.",
|
||||
"Upstream Model Update Check": "Проверка обновлений моделей провайдера",
|
||||
"Upstream Model Updates": "Обновления моделей источника",
|
||||
"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models": "Обновления моделей применены: {{added}} добавлено, {{removed}} удалено, {{ignored}} проигнорировано, всего {{totalIgnored}} проигнорированных моделей",
|
||||
@@ -4711,6 +4735,7 @@
|
||||
"Warning: This action is permanent and irreversible!": "Внимание: Это действие является постоянным и необратимым!",
|
||||
"We apologize for the inconvenience.": "Приносим извинения за неудобства.",
|
||||
"We could not load the setup status.": "Не удалось загрузить статус настройки.",
|
||||
"We could not load system tasks.": "Не удалось загрузить системные задачи.",
|
||||
"We will prompt your device to confirm using biometrics or your hardware key.": "Мы предложим вашему устройству подтвердить действие с помощью биометрии или аппаратного ключа.",
|
||||
"We'll be back online shortly.": "Мы скоро вернемся в сеть.",
|
||||
"Web search": "Веб-поиск",
|
||||
|
||||
Vendored
+26
-1
@@ -137,6 +137,7 @@
|
||||
"Active Cache Count": "Số bộ nhớ đệm hoạt động",
|
||||
"Active Files": "Tệp đang hoạt động",
|
||||
"Active models": "Mô hình đang hoạt động",
|
||||
"Active Tasks": "Tác vụ đang hoạt động",
|
||||
"active users": "Người dùng tích cực",
|
||||
"Actual Amount": "Số tiền thực tế",
|
||||
"Actual Model": "Mô hình thực tế",
|
||||
@@ -428,6 +429,7 @@
|
||||
"Ask anything": "Hỏi gì cũng được",
|
||||
"Assigned by administrator only": "Chỉ quản trị viên gán",
|
||||
"Assigned by administrators and used to represent a user level, such as default or vip.": "Do quản trị viên gán và dùng để biểu thị cấp người dùng, ví dụ default hoặc vip.",
|
||||
"Async task polling": "Thăm dò tác vụ bất đồng bộ",
|
||||
"Async task refund": "Hoàn tiền tác vụ bất đồng bộ",
|
||||
"At least one model regex pattern is required": "Cần ít nhất một mẫu regex mô hình",
|
||||
"At least one valid key source is required": "Cần ít nhất một nguồn khóa hợp lệ",
|
||||
@@ -483,6 +485,7 @@
|
||||
"Auto-discover": "Tự động khám phá",
|
||||
"Auto-discovers endpoints from the provider": "Tự động khám phá các điểm cuối từ nhà cung cấp",
|
||||
"Auto-fill when one field exists and another is missing": "Tự động điền khi một trường có giá trị và trường khác thiếu",
|
||||
"Auto-refreshing every {{seconds}}s": "Tự động làm mới mỗi {{seconds}} giây",
|
||||
"Auto-retry status codes": "Mã trạng thái tự thử lại",
|
||||
"Automatically disable channel on repeated failures": "Tự động vô hiệu hóa kênh khi xảy ra lỗi lặp lại",
|
||||
"Automatically disable channels exceeding this response time": "Tự động vô hiệu hóa các kênh vượt quá thời gian phản hồi này",
|
||||
@@ -553,6 +556,7 @@
|
||||
"Basic Information": "Thông tin cơ bản",
|
||||
"Basic Templates": "Mẫu cơ bản",
|
||||
"Batch Add (one key per line)": "Thêm hàng loạt (mỗi khóa một dòng)",
|
||||
"Batch channel test": "Kiểm tra kênh hàng loạt",
|
||||
"Batch delete failed": "Xóa hàng loạt thất bại",
|
||||
"Batch deleted {{count}} channels": "Đã xóa hàng loạt {{count}} kênh",
|
||||
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "Phát hiện hàng loạt hoàn tất: {{channels}} kênh, {{add}} để thêm, {{remove}} để xóa, {{fails}} thất bại",
|
||||
@@ -568,6 +572,7 @@
|
||||
"Batch test completed: {{success}} succeeded, {{failed}} failed": "Kiểm thử hàng loạt hoàn tất: {{success}} thành công, {{failed}} thất bại",
|
||||
"Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed": "Đã dừng kiểm thử hàng loạt: hoàn tất {{completed}}/{{total}}, {{success}} thành công, {{failed}} thất bại",
|
||||
"Batch testing models...": "Đang kiểm thử mô hình hàng loạt...",
|
||||
"Batch upstream model update": "Cập nhật mô hình thượng nguồn hàng loạt",
|
||||
"Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed": "Đã áp dụng cập nhật hàng loạt mô hình upstream: {{channels}} kênh, {{added}} đã thêm, {{removed}} đã xóa, {{fails}} thất bại",
|
||||
"Best for single-tenant deployments. Pricing and billing options stay hidden.": "Phù hợp nhất cho triển khai đơn người dùng. Các tùy chọn giá và thanh toán sẽ được ẩn.",
|
||||
"Best TTFT": "TTFT tốt nhất",
|
||||
@@ -1268,6 +1273,7 @@
|
||||
"Designed and Developed by": "Thiết kế và Phát triển bởi",
|
||||
"designed for scale": "thiết kế cho quy mô lớn",
|
||||
"Destroyed": "Đã hủy",
|
||||
"Detail": "Chi tiết",
|
||||
"Detailed request logs for investigations.": "Nhật ký yêu cầu chi tiết cho các cuộc điều tra.",
|
||||
"Details": "Chi tiết",
|
||||
"Detect All Upstream Updates": "Phát hiện Tất cả Cập nhật Upstream",
|
||||
@@ -1635,6 +1641,7 @@
|
||||
"Exchange rate is required": "Cần có tỷ giá",
|
||||
"Exchange rate must be greater than 0": "Tỷ giá phải lớn hơn 0",
|
||||
"Execute code in a sandbox during the response": "Thực thi mã trong sandbox trong quá trình phản hồi",
|
||||
"Executor": "Trình thực thi",
|
||||
"Exhausted": "Đã cạn kiệt",
|
||||
"Existing account will be reused": "Tài khoản hiện có sẽ được sử dụng lại",
|
||||
"Existing Models ({{count}})": "Các mô hình hiện có ({{count}})",
|
||||
@@ -1674,6 +1681,7 @@
|
||||
"extras": "mục bổ sung",
|
||||
"Fail Reason": "Lý do thất bại",
|
||||
"Fail Reason Details": "Chi tiết lý do thất bại",
|
||||
"failed": "thất bại",
|
||||
"Failed": "Thất bại",
|
||||
"Failed to {{action}} user": "Không thể {{action}} người dùng",
|
||||
"Failed to adjust quota": "Không thể điều chỉnh hạn mức",
|
||||
@@ -2335,6 +2343,7 @@
|
||||
"List of models supported by this channel. Use comma to separate multiple models.": "Danh sách các mô hình được hỗ trợ bởi kênh này. Sử dụng dấu phẩy để phân tách nhiều mô hình.",
|
||||
"List of origins (one per line) allowed for Passkey registration and authentication.": "Danh sách các nguồn gốc (mỗi dòng một mục) được phép đăng ký và xác thực Passkey.",
|
||||
"List view": "Xem dạng danh sách",
|
||||
"Live refresh pauses when no task is running": "Tự động làm mới tạm dừng khi không có tác vụ nào đang chạy",
|
||||
"LLM Leaderboard": "Bảng xếp hạng LLM",
|
||||
"LLM prompt helper": "Trợ lý prompt LLM",
|
||||
"Load Balancing": "Tải cân bằng",
|
||||
@@ -2356,6 +2365,7 @@
|
||||
"Locations": "Vị trí",
|
||||
"Locked": "Đã khóa",
|
||||
"log": "nhật ký",
|
||||
"Log cleanup": "Dọn dẹp nhật ký",
|
||||
"Log cleanup progress": "Tiến trình dọn dẹp nhật ký",
|
||||
"Log cleanup task started.": "Đã bắt đầu tác vụ dọn dẹp nhật ký.",
|
||||
"Log Details": "Chi tiết Nhật ký",
|
||||
@@ -2446,6 +2456,7 @@
|
||||
"Merge into Other": "Gộp vào Khác",
|
||||
"Message Priority": "Ưu tiên tin nhắn",
|
||||
"Metadata": "Siêu dữ liệu",
|
||||
"Midjourney task polling": "Thăm dò tác vụ Midjourney",
|
||||
"min downtime": "phút gián đoạn",
|
||||
"Min Top-up": "Nạp tối thiểu",
|
||||
"Min Top-up:": "Nạp tối thiểu:",
|
||||
@@ -2653,6 +2664,7 @@
|
||||
"No": "Không",
|
||||
"No About Content Set": "Chưa đặt nội dung Giới thiệu",
|
||||
"No Active": "Không hoạt động",
|
||||
"No active system tasks.": "Không có tác vụ hệ thống đang hoạt động.",
|
||||
"No additional type-specific settings for this channel type.": "Không có cài đặt bổ sung cụ thể theo loại cho loại kênh này.",
|
||||
"No amount options configured. Add amounts below to get started.": "Chưa có tùy chọn số tiền nào được cấu hình. Thêm các số tiền bên dưới để bắt đầu.",
|
||||
"No announcements at this time": "Hiện tại chưa có thông báo nào.",
|
||||
@@ -2708,6 +2720,7 @@
|
||||
"No groups match your search": "Không có nhóm nào khớp với tìm kiếm của bạn",
|
||||
"No groups yet. Add a group to get started.": "Chưa có nhóm nào. Thêm một nhóm để bắt đầu.",
|
||||
"No header overrides configured.": "Không có ghi đè tiêu đề nào được cấu hình.",
|
||||
"No historical system tasks.": "Không có tác vụ hệ thống trong lịch sử.",
|
||||
"No history data available": "Không có dữ liệu lịch sử",
|
||||
"No incidents in the last 24 hours": "Không có sự cố trong 24 giờ qua",
|
||||
"No incidents in the last 30 days": "Không có sự cố trong 30 ngày qua",
|
||||
@@ -2787,6 +2800,7 @@
|
||||
"No subscription records": "Không có bản ghi đăng ký",
|
||||
"No Sync": "Không đồng bộ",
|
||||
"No system announcements": "Không có thông báo hệ thống",
|
||||
"No system tasks yet.": "Chưa có tác vụ hệ thống nào.",
|
||||
"No token found.": "Không tìm thấy mã thông báo.",
|
||||
"No tools configured": "Chưa cấu hình công cụ nào",
|
||||
"No Upgrade": "Không nâng cấp",
|
||||
@@ -3083,6 +3097,7 @@
|
||||
"Peak": "Đỉnh",
|
||||
"Peak throughput": "Thông lượng đỉnh",
|
||||
"Penalises repetition of frequent tokens": "Phạt việc lặp các token phổ biến",
|
||||
"pending": "đang chờ",
|
||||
"Pending": "Đang chờ",
|
||||
"per": "per",
|
||||
"Per 1K tokens": "Mỗi 1K tokens",
|
||||
@@ -3392,6 +3407,8 @@
|
||||
"Receive Upstream Model Update Notifications": "Nhận thông báo cập nhật mô hình nguồn",
|
||||
"Received": "Đã nhận",
|
||||
"Received amount": "Số tiền đã nhận",
|
||||
"Recent maintenance tasks running across instances and their execution status.": "Các tác vụ bảo trì gần đây chạy trên các phiên bản và trạng thái thực thi của chúng.",
|
||||
"Recently completed or failed system task runs.": "Các lần chạy tác vụ hệ thống gần đây đã hoàn tất hoặc thất bại.",
|
||||
"Recently launched models": "Các mô hình ra mắt gần đây",
|
||||
"Recently launched models gaining traction": "Mô hình mới phát hành đang được ưa chuộng",
|
||||
"Recharge": "Nạp lại",
|
||||
@@ -3649,6 +3666,7 @@
|
||||
"Rules JSON must be an array": "JSON quy tắc phải là một mảng",
|
||||
"Run GC": "Chạy GC",
|
||||
"Run tests for the selected models": "Chạy kiểm thử cho các mô hình đã chọn",
|
||||
"running": "đang chạy",
|
||||
"Running": "Đang chạy",
|
||||
"Runway": "Thời gian còn lại",
|
||||
"s": "s",
|
||||
@@ -3883,11 +3901,11 @@
|
||||
"Shorten": "Rút gọn",
|
||||
"Show": "Hiển thị",
|
||||
"Show All": "Hiển thị tất cả",
|
||||
"Show sensitive data": "Hiển thị dữ liệu nhạy cảm",
|
||||
"Show all providers including unbound": "Hiển thị tất cả nhà cung cấp (bao gồm chưa liên kết)",
|
||||
"Show only bound providers": "Chỉ hiển thị nhà cung cấp đã liên kết",
|
||||
"Show or hide flow columns": "Hiện hoặc ẩn các cột luồng",
|
||||
"Show prices in currency instead of quota.": "Hiển thị giá bằng tiền tệ thay vì hạn ngạch.",
|
||||
"Show sensitive data": "Hiển thị dữ liệu nhạy cảm",
|
||||
"Show setup guide": "Hiển thị hướng dẫn thiết lập",
|
||||
"Show token usage statistics in the UI": "Hiển thị thống kê sử dụng token trong giao diện người dùng",
|
||||
"Showcase core capabilities with demo credentials and limited access.": "Trình diễn các tính năng cốt lõi với thông tin đăng nhập demo và quyền truy cập hạn chế.",
|
||||
@@ -4029,6 +4047,7 @@
|
||||
"Subscription purchased successfully": "Đã mua gói đăng ký thành công",
|
||||
"Subscriptions": "Đăng ký",
|
||||
"Subtract": "Trừ",
|
||||
"succeeded": "thành công",
|
||||
"Success": "Thành công",
|
||||
"Success rate": "Tỷ lệ thành công",
|
||||
"Successfully created {{count}} API Key(s)": "Đã tạo thành công {{count}} khóa API",
|
||||
@@ -4078,6 +4097,7 @@
|
||||
"System Behavior": "Hành vi hệ thống",
|
||||
"System data statistics": "Thống kê dữ liệu hệ thống",
|
||||
"System default": "Mặc định hệ thống",
|
||||
"System Info": "Thông tin hệ thống",
|
||||
"System Information": "Thông tin hệ thống",
|
||||
"System initialized successfully! Redirecting…": "Hệ thống đã được khởi tạo thành công! Đang chuyển hướng…",
|
||||
"System logo": "Logo hệ thống",
|
||||
@@ -4096,6 +4116,7 @@
|
||||
"System Settings": "Cài đặt hệ thống",
|
||||
"System setup wizard": "Trình hướng dẫn thiết lập hệ thống",
|
||||
"System task records": "Lịch sử tác vụ hệ thống",
|
||||
"System Tasks": "Tác vụ hệ thống",
|
||||
"System Version": "Phiên bản hệ thống",
|
||||
"Table view": "Xem dạng bảng",
|
||||
"Tag": "Tag",
|
||||
@@ -4116,10 +4137,12 @@
|
||||
"Target Path (optional)": "Đường dẫn đích (tùy chọn)",
|
||||
"Target User": "Người dùng mục tiêu",
|
||||
"Task": "Nhiệm vụ",
|
||||
"Task History": "Lịch sử tác vụ",
|
||||
"Task ID": "Mã nhiệm vụ",
|
||||
"Task ID:": "ID nhiệm vụ:",
|
||||
"Task logs": "Nhật ký tác vụ",
|
||||
"Task Logs": "Nhật ký tác vụ",
|
||||
"Tasks currently pending or running.": "Các tác vụ hiện đang chờ hoặc đang chạy.",
|
||||
"Team Collaboration": "Teamwork",
|
||||
"Technical Support": "Hỗ trợ kỹ thuật",
|
||||
"Telegram": "Telegram",
|
||||
@@ -4498,6 +4521,7 @@
|
||||
"Upstream": "Thượng nguồn",
|
||||
"Upstream did not return reset credit details.": "Upstream không trả về chi tiết lượt đặt lại.",
|
||||
"Upstream Model Detection Settings": "Cài đặt phát hiện mô hình nguồn",
|
||||
"Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.": "Đã bắt đầu tác vụ phát hiện mô hình thượng nguồn. Theo dõi tiến trình trong Thông tin hệ thống, sau đó làm mới để xem các cập nhật đang chờ.",
|
||||
"Upstream Model Update Check": "Kiểm tra cập nhật mô hình nguồn",
|
||||
"Upstream Model Updates": "Cập nhật mô hình upstream",
|
||||
"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models": "Đã áp dụng cập nhật mô hình upstream: {{added}} đã thêm, {{removed}} đã xóa, {{ignored}} bỏ qua lần này, {{totalIgnored}} tổng mô hình đã bỏ qua",
|
||||
@@ -4711,6 +4735,7 @@
|
||||
"Warning: This action is permanent and irreversible!": "Cảnh báo: Hành động này là vĩnh viễn và không thể đảo ngược!",
|
||||
"We apologize for the inconvenience.": "Chúng tôi xin lỗi vì sự bất tiện này.",
|
||||
"We could not load the setup status.": "Chúng tôi không thể tải trạng thái thiết lập.",
|
||||
"We could not load system tasks.": "Không thể tải tác vụ hệ thống.",
|
||||
"We will prompt your device to confirm using biometrics or your hardware key.": "Chúng tôi sẽ yêu cầu thiết bị của bạn xác nhận bằng cách sử dụng sinh trắc học hoặc khóa bảo mật phần cứng của bạn.",
|
||||
"We'll be back online shortly.": "Chúng tôi sẽ sớm trực tuyến trở lại.",
|
||||
"Web search": "Tìm kiếm web",
|
||||
|
||||
Vendored
+26
-1
@@ -137,6 +137,7 @@
|
||||
"Active Cache Count": "活跃缓存数",
|
||||
"Active Files": "活跃文件",
|
||||
"Active models": "活跃模型",
|
||||
"Active Tasks": "进行中任务",
|
||||
"active users": "活跃用户",
|
||||
"Actual Amount": "实付金额",
|
||||
"Actual Model": "实际模型",
|
||||
@@ -428,6 +429,7 @@
|
||||
"Ask anything": "随便问",
|
||||
"Assigned by administrator only": "仅管理员分配",
|
||||
"Assigned by administrators and used to represent a user level, such as default or vip.": "由管理员分配,用于表示用户等级,例如 default 或 vip。",
|
||||
"Async task polling": "异步任务轮询",
|
||||
"Async task refund": "异步任务退款",
|
||||
"At least one model regex pattern is required": "至少需要一个模型正则匹配模式",
|
||||
"At least one valid key source is required": "至少需要一个有效的密钥来源",
|
||||
@@ -483,6 +485,7 @@
|
||||
"Auto-discover": "自动发现",
|
||||
"Auto-discovers endpoints from the provider": "自动从提供商发现端点",
|
||||
"Auto-fill when one field exists and another is missing": "在一个字段有值、另一个缺失时自动补齐",
|
||||
"Auto-refreshing every {{seconds}}s": "每 {{seconds}} 秒自动刷新",
|
||||
"Auto-retry status codes": "自动重试状态码",
|
||||
"Automatically disable channel on repeated failures": "重复失败时自动禁用渠道",
|
||||
"Automatically disable channels exceeding this response time": "自动禁用超出此响应时间的渠道",
|
||||
@@ -553,6 +556,7 @@
|
||||
"Basic Information": "基本信息",
|
||||
"Basic Templates": "基础模板",
|
||||
"Batch Add (one key per line)": "批量添加(每行一个密钥)",
|
||||
"Batch channel test": "渠道批量测试",
|
||||
"Batch delete failed": "批量删除失败",
|
||||
"Batch deleted {{count}} channels": "批量删除 {{count}} 个渠道",
|
||||
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "批量检测完成:渠道 {{channels}} 个,新增 {{add}} 个,删除 {{remove}} 个,失败 {{fails}} 个",
|
||||
@@ -568,6 +572,7 @@
|
||||
"Batch test completed: {{success}} succeeded, {{failed}} failed": "批量测试完成:{{success}} 个成功,{{failed}} 个失败",
|
||||
"Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed": "批量测试已停止:已完成 {{completed}}/{{total}},{{success}} 个成功,{{failed}} 个失败",
|
||||
"Batch testing models...": "正在批量测试模型...",
|
||||
"Batch upstream model update": "上游模型批量更新",
|
||||
"Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed": "已批量处理上游模型更新:渠道 {{channels}} 个,加入 {{added}} 个,删除 {{removed}} 个,失败 {{fails}} 个",
|
||||
"Best for single-tenant deployments. Pricing and billing options stay hidden.": "适合单用户部署。定价和计费选项将被隐藏。",
|
||||
"Best TTFT": "最优 TTFT",
|
||||
@@ -1268,6 +1273,7 @@
|
||||
"Designed and Developed by": "设计与开发",
|
||||
"designed for scale": "为规模而设计",
|
||||
"Destroyed": "已销毁",
|
||||
"Detail": "详情",
|
||||
"Detailed request logs for investigations.": "用于调查的详细请求日志。",
|
||||
"Details": "详情",
|
||||
"Detect All Upstream Updates": "检测所有上游更新",
|
||||
@@ -1635,6 +1641,7 @@
|
||||
"Exchange rate is required": "汇率为必填项",
|
||||
"Exchange rate must be greater than 0": "汇率必须大于 0",
|
||||
"Execute code in a sandbox during the response": "在响应过程中沙箱执行代码",
|
||||
"Executor": "执行实例",
|
||||
"Exhausted": "已耗尽",
|
||||
"Existing account will be reused": "将使用现有账户",
|
||||
"Existing Models ({{count}})": "现有模型 ({{count}})",
|
||||
@@ -1674,6 +1681,7 @@
|
||||
"extras": "额外项",
|
||||
"Fail Reason": "失败原因",
|
||||
"Fail Reason Details": "失败原因详情",
|
||||
"failed": "已失败",
|
||||
"Failed": "失败",
|
||||
"Failed to {{action}} user": "{{action}}用户失败",
|
||||
"Failed to adjust quota": "调整额度失败",
|
||||
@@ -2335,6 +2343,7 @@
|
||||
"List of models supported by this channel. Use comma to separate multiple models.": "此渠道支持的模型列表。使用逗号分隔多个模型。",
|
||||
"List of origins (one per line) allowed for Passkey registration and authentication.": "允许用于 Passkey 注册和身份验证的来源列表(每行一个)。",
|
||||
"List view": "列表视图",
|
||||
"Live refresh pauses when no task is running": "无任务运行时暂停自动刷新",
|
||||
"LLM Leaderboard": "LLM 排行榜",
|
||||
"LLM prompt helper": "LLM 辅助设计提示词",
|
||||
"Load Balancing": "负载均衡",
|
||||
@@ -2356,6 +2365,7 @@
|
||||
"Locations": "位置",
|
||||
"Locked": "锁定",
|
||||
"log": "日志的完整详情",
|
||||
"Log cleanup": "日志清理",
|
||||
"Log cleanup progress": "日志清理进度",
|
||||
"Log cleanup task started.": "日志清理任务已启动。",
|
||||
"Log Details": "日志详情",
|
||||
@@ -2446,6 +2456,7 @@
|
||||
"Merge into Other": "合并为其他",
|
||||
"Message Priority": "消息优先级",
|
||||
"Metadata": "元信息",
|
||||
"Midjourney task polling": "Midjourney 任务轮询",
|
||||
"min downtime": "分钟停机",
|
||||
"Min Top-up": "最低充值",
|
||||
"Min Top-up:": "最低充值:",
|
||||
@@ -2653,6 +2664,7 @@
|
||||
"No": "否",
|
||||
"No About Content Set": "未设置关于内容",
|
||||
"No Active": "无生效",
|
||||
"No active system tasks.": "暂无进行中的系统任务。",
|
||||
"No additional type-specific settings for this channel type.": "此渠道类型没有额外的特定类型设置。",
|
||||
"No amount options configured. Add amounts below to get started.": "未配置金额选项。在下方添加金额即可开始使用。",
|
||||
"No announcements at this time": "目前暂无公告",
|
||||
@@ -2708,6 +2720,7 @@
|
||||
"No groups match your search": "没有组匹配您的搜索",
|
||||
"No groups yet. Add a group to get started.": "暂无分组,添加一个分组开始配置。",
|
||||
"No header overrides configured.": "未配置标头覆盖。",
|
||||
"No historical system tasks.": "暂无历史系统任务。",
|
||||
"No history data available": "暂无历史数据",
|
||||
"No incidents in the last 24 hours": "最近 24 小时无异常",
|
||||
"No incidents in the last 30 days": "最近 30 天无事件",
|
||||
@@ -2787,6 +2800,7 @@
|
||||
"No subscription records": "暂无订阅记录",
|
||||
"No Sync": "不同步",
|
||||
"No system announcements": "暂无系统公告",
|
||||
"No system tasks yet.": "暂无系统任务。",
|
||||
"No token found.": "未找到令牌。",
|
||||
"No tools configured": "未配置工具",
|
||||
"No Upgrade": "不升级",
|
||||
@@ -3083,6 +3097,7 @@
|
||||
"Peak": "峰值",
|
||||
"Peak throughput": "峰值吞吐",
|
||||
"Penalises repetition of frequent tokens": "惩罚高频 token 的重复出现",
|
||||
"pending": "等待中",
|
||||
"Pending": "待确认",
|
||||
"per": "每",
|
||||
"Per 1K tokens": "每 1K tokens",
|
||||
@@ -3392,6 +3407,8 @@
|
||||
"Receive Upstream Model Update Notifications": "接收上游模型更新通知",
|
||||
"Received": "获得",
|
||||
"Received amount": "已收额度",
|
||||
"Recent maintenance tasks running across instances and their execution status.": "跨实例运行的近期维护任务及其执行状态。",
|
||||
"Recently completed or failed system task runs.": "最近已完成或失败的系统任务运行记录。",
|
||||
"Recently launched models": "近期发布的模型",
|
||||
"Recently launched models gaining traction": "近期发布并快速增长的模型",
|
||||
"Recharge": "充值",
|
||||
@@ -3649,6 +3666,7 @@
|
||||
"Rules JSON must be an array": "规则 JSON 必须是数组",
|
||||
"Run GC": "执行 GC",
|
||||
"Run tests for the selected models": "运行所选模型的测试",
|
||||
"running": "运行中",
|
||||
"Running": "运行中",
|
||||
"Runway": "可用时长",
|
||||
"s": "秒",
|
||||
@@ -3883,11 +3901,11 @@
|
||||
"Shorten": "缩词",
|
||||
"Show": "显示",
|
||||
"Show All": "显示全部",
|
||||
"Show sensitive data": "显示敏感数据",
|
||||
"Show all providers including unbound": "显示所有提供商(包括未绑定)",
|
||||
"Show only bound providers": "仅显示已绑定的提供商",
|
||||
"Show or hide flow columns": "显示或隐藏分流列",
|
||||
"Show prices in currency instead of quota.": "以货币而非配额显示价格。",
|
||||
"Show sensitive data": "显示敏感数据",
|
||||
"Show setup guide": "显示设置引导",
|
||||
"Show token usage statistics in the UI": "在用户界面中显示令牌使用统计信息",
|
||||
"Showcase core capabilities with demo credentials and limited access.": "使用演示凭据和有限访问权限展示核心功能。",
|
||||
@@ -4029,6 +4047,7 @@
|
||||
"Subscription purchased successfully": "订阅购买成功",
|
||||
"Subscriptions": "订阅",
|
||||
"Subtract": "减少",
|
||||
"succeeded": "已成功",
|
||||
"Success": "成功",
|
||||
"Success rate": "成功率",
|
||||
"Successfully created {{count}} API Key(s)": "成功创建了 {{count}} 个 API 密钥",
|
||||
@@ -4078,6 +4097,7 @@
|
||||
"System Behavior": "系统行为",
|
||||
"System data statistics": "系统数据统计",
|
||||
"System default": "系统默认",
|
||||
"System Info": "系统信息",
|
||||
"System Information": "系统信息",
|
||||
"System initialized successfully! Redirecting…": "系统初始化成功!正在重定向…",
|
||||
"System logo": "系统徽标",
|
||||
@@ -4096,6 +4116,7 @@
|
||||
"System Settings": "系统设置",
|
||||
"System setup wizard": "系统设置向导",
|
||||
"System task records": "系统任务记录",
|
||||
"System Tasks": "系统任务",
|
||||
"System Version": "系统版本",
|
||||
"Table view": "表格视图",
|
||||
"Tag": "标签",
|
||||
@@ -4116,10 +4137,12 @@
|
||||
"Target Path (optional)": "目标路径(可选)",
|
||||
"Target User": "目标用户",
|
||||
"Task": "任务",
|
||||
"Task History": "历史任务",
|
||||
"Task ID": "任务 ID",
|
||||
"Task ID:": "任务 ID:",
|
||||
"Task logs": "任务日志",
|
||||
"Task Logs": "任务日志",
|
||||
"Tasks currently pending or running.": "当前等待中或运行中的任务。",
|
||||
"Team Collaboration": "团队协作",
|
||||
"Technical Support": "技术支持",
|
||||
"Telegram": "Telegram",
|
||||
@@ -4498,6 +4521,7 @@
|
||||
"Upstream": "上游",
|
||||
"Upstream did not return reset credit details.": "上游未返回重置次数详情。",
|
||||
"Upstream Model Detection Settings": "检测上游模型设置",
|
||||
"Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.": "上游模型检测任务已开始。可在「系统信息」中查看进度,完成后刷新以查看待处理的更新。",
|
||||
"Upstream Model Update Check": "上游模型更新检查",
|
||||
"Upstream Model Updates": "上游模型更新",
|
||||
"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models": "已处理上游模型更新:加入 {{added}} 个,删除 {{removed}} 个,本次忽略 {{ignored}} 个,当前已忽略模型 {{totalIgnored}} 个",
|
||||
@@ -4711,6 +4735,7 @@
|
||||
"Warning: This action is permanent and irreversible!": "警告:此操作是永久且不可逆的!",
|
||||
"We apologize for the inconvenience.": "对于由此造成的不便,我们深表歉意。",
|
||||
"We could not load the setup status.": "我们无法加载设置状态。",
|
||||
"We could not load system tasks.": "无法加载系统任务。",
|
||||
"We will prompt your device to confirm using biometrics or your hardware key.": "我们将提示您的设备使用生物识别或硬件密钥进行确认。",
|
||||
"We'll be back online shortly.": "我们将很快恢复在线。",
|
||||
"Web search": "网络搜索",
|
||||
|
||||
Vendored
+22
@@ -40,6 +40,7 @@ import { Route as AuthenticatedWalletIndexRouteImport } from './routes/_authenti
|
||||
import { Route as AuthenticatedUsersIndexRouteImport } from './routes/_authenticated/users/index'
|
||||
import { Route as AuthenticatedUsageLogsIndexRouteImport } from './routes/_authenticated/usage-logs/index'
|
||||
import { Route as AuthenticatedSystemSettingsIndexRouteImport } from './routes/_authenticated/system-settings/index'
|
||||
import { Route as AuthenticatedSystemInfoIndexRouteImport } from './routes/_authenticated/system-info/index'
|
||||
import { Route as AuthenticatedSubscriptionsIndexRouteImport } from './routes/_authenticated/subscriptions/index'
|
||||
import { Route as AuthenticatedRedemptionCodesIndexRouteImport } from './routes/_authenticated/redemption-codes/index'
|
||||
import { Route as AuthenticatedProfileIndexRouteImport } from './routes/_authenticated/profile/index'
|
||||
@@ -226,6 +227,12 @@ const AuthenticatedSystemSettingsIndexRoute =
|
||||
path: '/',
|
||||
getParentRoute: () => AuthenticatedSystemSettingsRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedSystemInfoIndexRoute =
|
||||
AuthenticatedSystemInfoIndexRouteImport.update({
|
||||
id: '/system-info/',
|
||||
path: '/system-info/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedSubscriptionsIndexRoute =
|
||||
AuthenticatedSubscriptionsIndexRouteImport.update({
|
||||
id: '/subscriptions/',
|
||||
@@ -431,6 +438,7 @@ export interface FileRoutesByFullPath {
|
||||
'/profile/': typeof AuthenticatedProfileIndexRoute
|
||||
'/redemption-codes/': typeof AuthenticatedRedemptionCodesIndexRoute
|
||||
'/subscriptions/': typeof AuthenticatedSubscriptionsIndexRoute
|
||||
'/system-info/': typeof AuthenticatedSystemInfoIndexRoute
|
||||
'/system-settings/': typeof AuthenticatedSystemSettingsIndexRoute
|
||||
'/usage-logs/': typeof AuthenticatedUsageLogsIndexRoute
|
||||
'/users/': typeof AuthenticatedUsersIndexRoute
|
||||
@@ -489,6 +497,7 @@ export interface FileRoutesByTo {
|
||||
'/profile': typeof AuthenticatedProfileIndexRoute
|
||||
'/redemption-codes': typeof AuthenticatedRedemptionCodesIndexRoute
|
||||
'/subscriptions': typeof AuthenticatedSubscriptionsIndexRoute
|
||||
'/system-info': typeof AuthenticatedSystemInfoIndexRoute
|
||||
'/system-settings': typeof AuthenticatedSystemSettingsIndexRoute
|
||||
'/usage-logs': typeof AuthenticatedUsageLogsIndexRoute
|
||||
'/users': typeof AuthenticatedUsersIndexRoute
|
||||
@@ -551,6 +560,7 @@ export interface FileRoutesById {
|
||||
'/_authenticated/profile/': typeof AuthenticatedProfileIndexRoute
|
||||
'/_authenticated/redemption-codes/': typeof AuthenticatedRedemptionCodesIndexRoute
|
||||
'/_authenticated/subscriptions/': typeof AuthenticatedSubscriptionsIndexRoute
|
||||
'/_authenticated/system-info/': typeof AuthenticatedSystemInfoIndexRoute
|
||||
'/_authenticated/system-settings/': typeof AuthenticatedSystemSettingsIndexRoute
|
||||
'/_authenticated/usage-logs/': typeof AuthenticatedUsageLogsIndexRoute
|
||||
'/_authenticated/users/': typeof AuthenticatedUsersIndexRoute
|
||||
@@ -612,6 +622,7 @@ export interface FileRouteTypes {
|
||||
| '/profile/'
|
||||
| '/redemption-codes/'
|
||||
| '/subscriptions/'
|
||||
| '/system-info/'
|
||||
| '/system-settings/'
|
||||
| '/usage-logs/'
|
||||
| '/users/'
|
||||
@@ -670,6 +681,7 @@ export interface FileRouteTypes {
|
||||
| '/profile'
|
||||
| '/redemption-codes'
|
||||
| '/subscriptions'
|
||||
| '/system-info'
|
||||
| '/system-settings'
|
||||
| '/usage-logs'
|
||||
| '/users'
|
||||
@@ -731,6 +743,7 @@ export interface FileRouteTypes {
|
||||
| '/_authenticated/profile/'
|
||||
| '/_authenticated/redemption-codes/'
|
||||
| '/_authenticated/subscriptions/'
|
||||
| '/_authenticated/system-info/'
|
||||
| '/_authenticated/system-settings/'
|
||||
| '/_authenticated/usage-logs/'
|
||||
| '/_authenticated/users/'
|
||||
@@ -992,6 +1005,13 @@ declare module '@tanstack/react-router' {
|
||||
preLoaderRoute: typeof AuthenticatedSystemSettingsIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedSystemSettingsRouteRoute
|
||||
}
|
||||
'/_authenticated/system-info/': {
|
||||
id: '/_authenticated/system-info/'
|
||||
path: '/system-info'
|
||||
fullPath: '/system-info/'
|
||||
preLoaderRoute: typeof AuthenticatedSystemInfoIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/subscriptions/': {
|
||||
id: '/_authenticated/subscriptions/'
|
||||
path: '/subscriptions'
|
||||
@@ -1290,6 +1310,7 @@ interface AuthenticatedRouteRouteChildren {
|
||||
AuthenticatedProfileIndexRoute: typeof AuthenticatedProfileIndexRoute
|
||||
AuthenticatedRedemptionCodesIndexRoute: typeof AuthenticatedRedemptionCodesIndexRoute
|
||||
AuthenticatedSubscriptionsIndexRoute: typeof AuthenticatedSubscriptionsIndexRoute
|
||||
AuthenticatedSystemInfoIndexRoute: typeof AuthenticatedSystemInfoIndexRoute
|
||||
AuthenticatedUsageLogsIndexRoute: typeof AuthenticatedUsageLogsIndexRoute
|
||||
AuthenticatedUsersIndexRoute: typeof AuthenticatedUsersIndexRoute
|
||||
AuthenticatedWalletIndexRoute: typeof AuthenticatedWalletIndexRoute
|
||||
@@ -1313,6 +1334,7 @@ const AuthenticatedRouteRouteChildren: AuthenticatedRouteRouteChildren = {
|
||||
AuthenticatedRedemptionCodesIndexRoute:
|
||||
AuthenticatedRedemptionCodesIndexRoute,
|
||||
AuthenticatedSubscriptionsIndexRoute: AuthenticatedSubscriptionsIndexRoute,
|
||||
AuthenticatedSystemInfoIndexRoute: AuthenticatedSystemInfoIndexRoute,
|
||||
AuthenticatedUsageLogsIndexRoute: AuthenticatedUsageLogsIndexRoute,
|
||||
AuthenticatedUsersIndexRoute: AuthenticatedUsersIndexRoute,
|
||||
AuthenticatedWalletIndexRoute: AuthenticatedWalletIndexRoute,
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
Copyright (C) 2023-2026 QuantumNous
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
For commercial licensing, please contact support@quantumnous.com
|
||||
*/
|
||||
import { createFileRoute, redirect } from '@tanstack/react-router'
|
||||
import { useAuthStore } from '@/stores/auth-store'
|
||||
import { ROLE } from '@/lib/roles'
|
||||
import { SystemInfo } from '@/features/system-info'
|
||||
|
||||
export const Route = createFileRoute('/_authenticated/system-info/')({
|
||||
beforeLoad: () => {
|
||||
const { auth } = useAuthStore.getState()
|
||||
|
||||
if (auth.user?.role !== ROLE.SUPER_ADMIN) {
|
||||
throw redirect({
|
||||
to: '/403',
|
||||
})
|
||||
}
|
||||
},
|
||||
component: SystemInfo,
|
||||
})
|
||||
Reference in New Issue
Block a user