@@ -4791,7 +4839,7 @@ export function ChannelMutateDrawer({
- {paramOverrideEditorOpen && !sensitiveLocked && (
+ {paramOverrideEditorOpen && !configurationLocked && (
)}
- {advancedCustomEditorOpen && !sensitiveLocked && (
+ {advancedCustomEditorOpen && !configurationLocked && (
.
+
+For commercial licensing, please contact support@quantumnous.com
+*/
+import assert from 'node:assert/strict'
+import { describe, test } from 'node:test'
+
+import { hasDisallowedContributionChannelChanges } from '../contribution-channel-edit'
+
+describe('contribution channel edit restrictions', () => {
+ test('allows only tag, priority, and weight changes', () => {
+ assert.equal(
+ hasDisallowedContributionChannelChanges({
+ tag: true,
+ priority: true,
+ weight: true,
+ }),
+ false
+ )
+ })
+
+ test('rejects connection, model, group, name, and remark changes', () => {
+ for (const dirtyFields of [
+ { name: true },
+ { base_url: true },
+ { key: true },
+ { models: true },
+ { model_mapping: true },
+ { group: true },
+ { remark: true },
+ ]) {
+ assert.equal(hasDisallowedContributionChannelChanges(dirtyFields), true)
+ }
+ })
+
+ test('ignores fields that are present but not dirty', () => {
+ assert.equal(
+ hasDisallowedContributionChannelChanges({
+ name: false,
+ models: false,
+ tag: true,
+ }),
+ false
+ )
+ })
+})
diff --git a/web/src/features/channels/lib/contribution-channel-edit.ts b/web/src/features/channels/lib/contribution-channel-edit.ts
new file mode 100644
index 000000000000..05d83a3dfa80
--- /dev/null
+++ b/web/src/features/channels/lib/contribution-channel-edit.ts
@@ -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
.
+
+For commercial licensing, please contact support@quantumnous.com
+*/
+import type { ChannelFormValues } from './channel-form'
+
+const contributionChannelEditableFields = new Set
([
+ 'tag',
+ 'priority',
+ 'weight',
+])
+
+export function hasDisallowedContributionChannelChanges(
+ dirtyFields: Partial>
+): boolean {
+ return Object.entries(dirtyFields).some(
+ ([field, dirty]) =>
+ Boolean(dirty) &&
+ !contributionChannelEditableFields.has(field as keyof ChannelFormValues)
+ )
+}
diff --git a/web/src/features/channels/lib/index.ts b/web/src/features/channels/lib/index.ts
index 8c18151ceb5f..4d7c2c970c2e 100644
--- a/web/src/features/channels/lib/index.ts
+++ b/web/src/features/channels/lib/index.ts
@@ -19,6 +19,7 @@ For commercial licensing, please contact support@quantumnous.com
// Re-export all library functions
export * from './channel-actions'
export * from './channel-field-update'
+export * from './contribution-channel-edit'
export * from './advanced-custom'
export * from './channel-form-errors'
export * from './channel-form'
diff --git a/web/src/features/channels/types.ts b/web/src/features/channels/types.ts
index f7747fa21210..17abcd1d1a29 100644
--- a/web/src/features/channels/types.ts
+++ b/web/src/features/channels/types.ts
@@ -64,6 +64,7 @@ export const channelSchema = z.object({
header_override: z.string().nullish(),
remark: z.string().default(''),
max_input_tokens: z.number().default(0),
+ is_contribution: z.boolean().default(false),
channel_info: channelInfoSchema.default({
is_multi_key: false,
multi_key_size: 0,
diff --git a/web/src/features/system-settings/maintenance/config.ts b/web/src/features/system-settings/maintenance/config.ts
index 0edc503de993..aab42202adbf 100644
--- a/web/src/features/system-settings/maintenance/config.ts
+++ b/web/src/features/system-settings/maintenance/config.ts
@@ -26,6 +26,7 @@ export type HeaderNavModulesConfig = {
console: boolean
pricing: HeaderNavAccessConfig
rankings: HeaderNavAccessConfig
+ contribution: HeaderNavAccessConfig
docs: boolean
about: boolean
[key: string]: boolean | HeaderNavAccessConfig
@@ -49,6 +50,10 @@ export const HEADER_NAV_DEFAULT: HeaderNavModulesConfig = {
enabled: true,
requireAuth: false,
},
+ contribution: {
+ enabled: true,
+ requireAuth: true,
+ },
docs: true,
about: true,
}
@@ -80,6 +85,7 @@ export const SIDEBAR_MODULES_DEFAULT: SidebarModulesAdminConfig = {
user: true,
setting: true,
subscription: true,
+ channel_contribution: true,
},
}
@@ -98,6 +104,7 @@ const cloneHeaderNavDefault = (): HeaderNavModulesConfig => ({
...HEADER_NAV_DEFAULT,
pricing: { ...HEADER_NAV_DEFAULT.pricing },
rankings: { ...HEADER_NAV_DEFAULT.rankings },
+ contribution: { ...HEADER_NAV_DEFAULT.contribution },
})
const parseAccessModule = (
@@ -146,6 +153,7 @@ export function parseHeaderNavModules(
...base,
pricing: { ...base.pricing },
rankings: { ...base.rankings },
+ contribution: { ...base.contribution },
}
Object.entries(parsed).forEach(([key, raw]) => {
@@ -157,6 +165,11 @@ export function parseHeaderNavModules(
result.rankings = parseAccessModule(raw, base.rankings)
return
}
+ if (key === 'contribution') {
+ result.contribution = parseAccessModule(raw, base.contribution)
+ result.contribution.requireAuth = true
+ return
+ }
if (typeof raw === 'boolean') {
result[key] = raw
diff --git a/web/src/features/system-settings/maintenance/header-navigation-section.tsx b/web/src/features/system-settings/maintenance/header-navigation-section.tsx
index 43f0085244ee..88f3884cc100 100644
--- a/web/src/features/system-settings/maintenance/header-navigation-section.tsx
+++ b/web/src/features/system-settings/maintenance/header-navigation-section.tsx
@@ -55,6 +55,7 @@ const headerNavSchema = z.object({
pricingRequireAuth: z.boolean(),
rankingsEnabled: z.boolean(),
rankingsRequireAuth: z.boolean(),
+ contributionEnabled: z.boolean(),
docs: z.boolean(),
about: z.boolean(),
})
@@ -89,6 +90,10 @@ const toFormValues = (config: HeaderNavModulesConfig): HeaderNavFormValues => ({
config.rankings?.requireAuth === undefined
? HEADER_NAV_DEFAULT.rankings.requireAuth
: Boolean(config.rankings.requireAuth),
+ contributionEnabled:
+ config.contribution?.enabled === undefined
+ ? HEADER_NAV_DEFAULT.contribution.enabled
+ : Boolean(config.contribution.enabled),
docs:
config.docs === undefined ? HEADER_NAV_DEFAULT.docs : Boolean(config.docs),
about:
@@ -131,6 +136,11 @@ export function HeaderNavigationSection({
enabled: values.rankingsEnabled,
requireAuth: values.rankingsRequireAuth,
},
+ contribution: {
+ ...(config.contribution ?? HEADER_NAV_DEFAULT.contribution),
+ enabled: values.contributionEnabled,
+ requireAuth: true,
+ },
}
const serialized = serializeHeaderNavModules(payload)
@@ -163,6 +173,13 @@ export function HeaderNavigationSection({
title: t('Console'),
description: t('User dashboard and quota controls.'),
},
+ {
+ key: 'contributionEnabled',
+ title: t('Channel Contributions'),
+ description: t(
+ 'Authenticated channel contribution and reward workspace.'
+ ),
+ },
{
key: 'docs',
title: t('Docs'),
diff --git a/web/src/features/system-settings/maintenance/sidebar-modules-section.tsx b/web/src/features/system-settings/maintenance/sidebar-modules-section.tsx
index cc4c9b34feef..f6f4bdaaaf4c 100644
--- a/web/src/features/system-settings/maintenance/sidebar-modules-section.tsx
+++ b/web/src/features/system-settings/maintenance/sidebar-modules-section.tsx
@@ -130,6 +130,12 @@ export function SidebarModulesSection({
},
},
admin: {
+ channel_contribution: {
+ title: t('Channel Contributions'),
+ description: t(
+ 'Review contributed channels and configure contribution policy.'
+ ),
+ },
channel: {
title: t('Channels'),
description: t('Configure upstream providers and routing.'),
diff --git a/web/src/hooks/use-sidebar-config.ts b/web/src/hooks/use-sidebar-config.ts
index a026e43ddce7..adfd9341466a 100644
--- a/web/src/hooks/use-sidebar-config.ts
+++ b/web/src/hooks/use-sidebar-config.ts
@@ -63,6 +63,7 @@ const DEFAULT_SIDEBAR_MODULES: SidebarModulesAdminConfig = {
user: true,
setting: true,
subscription: true,
+ channel_contribution: true,
},
}
@@ -108,6 +109,10 @@ const URL_TO_CONFIG_MAP: Record = {
'/wallet': { section: 'personal', module: 'topup' },
'/profile': { section: 'personal', module: 'personal' },
'/channels': { section: 'admin', module: 'channel' },
+ '/channel-contributions/admin': {
+ section: 'admin',
+ module: 'channel_contribution',
+ },
'/models': { section: 'admin', module: 'models' },
'/models/metadata': { section: 'admin', module: 'models' },
'/models/deployments': { section: 'admin', module: 'models' },
diff --git a/web/src/hooks/use-sidebar-data.ts b/web/src/hooks/use-sidebar-data.ts
index 40a0615aa347..b77984fcaf8d 100644
--- a/web/src/hooks/use-sidebar-data.ts
+++ b/web/src/hooks/use-sidebar-data.ts
@@ -22,6 +22,7 @@ import {
CreditCard,
FileText,
FlaskConical,
+ HeartHandshake,
Key,
LayoutDashboard,
ListTodo,
@@ -36,7 +37,7 @@ import {
} from 'lucide-react'
import { useTranslation } from 'react-i18next'
-import { type SidebarData } from '@/components/layout/types'
+import type { SidebarData } from '@/components/layout/types'
import { ROLE } from '@/lib/roles'
/**
@@ -119,6 +120,11 @@ export function useSidebarData(): SidebarData {
id: 'admin',
title: t('Admin'),
items: [
+ {
+ title: t('Channel Contributions'),
+ url: '/channel-contributions/admin',
+ icon: HeartHandshake,
+ },
{
title: t('Channels'),
url: '/channels',
diff --git a/web/src/hooks/use-top-nav-links.ts b/web/src/hooks/use-top-nav-links.ts
index 5a5baa2db98b..c518331167ef 100644
--- a/web/src/hooks/use-top-nav-links.ts
+++ b/web/src/hooks/use-top-nav-links.ts
@@ -39,6 +39,7 @@ export type TopNavLink = {
* console: true,
* pricing: { enabled: true, requireAuth: false },
* rankings: { enabled: true, requireAuth: false },
+ * contribution: { enabled: true, requireAuth: true },
* docs: true,
* about: true
* }
@@ -86,6 +87,21 @@ export function useTopNavLinks(): TopNavLink[] {
links.push({ title: t('Rankings'), href: '/rankings', requiresAuth })
}
+ // Contribution is always protected by the authenticated route. Omitting
+ // requiresAuth here avoids the public header countdown and redirects to
+ // sign-in immediately with the destination preserved.
+ const contribution = modules?.contribution
+ if (
+ contribution &&
+ typeof contribution === 'object' &&
+ contribution.enabled
+ ) {
+ links.push({
+ title: t('Channel Contributions'),
+ href: '/channel-contributions',
+ })
+ }
+
// Docs (supports external links)
if (modules?.docs !== false) {
if (docsLink) {
diff --git a/web/src/i18n/locales/en.json b/web/src/i18n/locales/en.json
index b3fec13839ec..ecefa3fd7051 100644
--- a/web/src/i18n/locales/en.json
+++ b/web/src/i18n/locales/en.json
@@ -61,6 +61,7 @@
"{{field}} updated to {{value}}": "{{field}} updated to {{value}}",
"{{field}} updated to {{value}} for tag: {{tag}}": "{{field}} updated to {{value}} for tag: {{tag}}",
"{{method}} {{route}}": "{{method}} {{route}}",
+ "{{milliseconds}} ms": "{{milliseconds}} ms",
"{{modality}} not supported": "{{modality}} not supported",
"{{modality}} supported": "{{modality}} supported",
"{{n}} model(s) selected": "{{n}} model(s) selected",
@@ -98,6 +99,7 @@
"1. Create an application in your Gotify server": "1. Create an application in your Gotify server",
"10 / page": "10 / page",
"100 / page": "100 / page",
+ "100 basis points equals 1% of billed quota.": "100 basis points equals 1% of billed quota.",
"14 Days": "14 Days",
"192.168.1.1
10.0.0.0/8": "192.168.1.1
10.0.0.0/8",
"1M": "1M",
@@ -118,9 +120,11 @@
"7 days ago": "7 days ago",
"80,443,8080": "80,443,8080",
"A billing multiplier. Lower ratios mean lower API call costs.": "A billing multiplier. Lower ratios mean lower API call costs.",
+ "A contribution can contain at most 100 models": "A contribution can contain at most 100 models",
"A focused home for keys, balance, routing, and service health.": "A focused home for keys, balance, routing, and service health.",
"About": "About",
"About {{days}} days left": "About {{days}} days left",
+ "Accept the channel contribution agreement": "Accept the channel contribution agreement",
"Accept Unpriced Models": "Accept Unpriced Models",
"Accepts a JSON array of model identifiers that support the Imagine API.": "Accepts a JSON array of model identifiers that support the Imagine API.",
"Accepts comma-separated status codes and inclusive ranges.": "Accepts comma-separated status codes and inclusive ranges.",
@@ -167,6 +171,7 @@
"Add a new model to the system by providing the necessary information.": "Add a new model to the system by providing the necessary information.",
"Add a new user by providing necessary info.": "Add a new user by providing necessary info.",
"Add a new vendor to the system": "Add a new vendor to the system",
+ "Add an allowed group": "Add an allowed group",
"Add an extra layer of security to your account": "Add an extra layer of security to your account",
"Add and submit": "Add and submit",
"Add Announcement": "Add Announcement",
@@ -244,6 +249,8 @@
"Administer user accounts and roles.": "Administer user accounts and roles.",
"Administrator account": "Administrator account",
"Administrator username": "Administrator username",
+ "Administrator verification": "Administrator verification",
+ "Administrator verification started": "Administrator verification started",
"Advance next reset time": "Advance next reset time",
"Advanced": "Advanced",
"Advanced Configuration": "Advanced Configuration",
@@ -272,6 +279,12 @@
"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.": "aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.",
"Aggregation bucket": "Aggregation bucket",
"AGPL v3.0 License": "AGPL v3.0 License",
+ "Agreement content is required": "Agreement content is required",
+ "Agreement Markdown": "Agreement Markdown",
+ "Agreement version": "Agreement version",
+ "Agreement version is required": "Agreement version is required",
+ "Agreement version must not exceed 64 characters": "Agreement version must not exceed 64 characters",
+ "Agreement version: {{version}}": "Agreement version: {{version}}",
"AI Application Infrastructure Foundation": "AI Application Infrastructure Foundation",
"AI model testing environment": "AI model testing environment",
"AI models": "AI models",
@@ -287,6 +300,7 @@
"All API tokens": "All API tokens",
"All categories": "All categories",
"All conditions must match before this tier is used.": "All conditions must match before this tier is used.",
+ "All contributions": "All contributions",
"All edits are overwrite operations. Leave fields empty to keep current values unchanged.": "All edits are overwrite operations. Leave fields empty to keep current values unchanged.",
"All files exceed the maximum size.": "All files exceed the maximum size.",
"All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.": "All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.",
@@ -302,6 +316,7 @@
"All Sync Status": "All Sync Status",
"All systems operational": "All systems operational",
"All Tags": "All Tags",
+ "All tests passed": "All tests passed",
"All Types": "All Types",
"All upstream data is trusted": "All upstream data is trusted",
"All users": "All users",
@@ -341,6 +356,8 @@
"Allow using models without price configuration": "Allow using models without price configuration",
"Allow wallet balance after quota used up": "Allow wallet balance after quota used up",
"Allowed": "Allowed",
+ "Allowed channel types": "Allowed channel types",
+ "Allowed groups": "Allowed groups",
"Allowed Origins": "Allowed Origins",
"Allowed Ports": "Allowed Ports",
"Already have an account?": "Already have an account?",
@@ -378,6 +395,8 @@
"API Addresses": "API Addresses",
"API Base URL (Important: Not Chat API) *": "API Base URL (Important: Not Chat API) *",
"API Base URL *": "API Base URL *",
+ "API endpoint": "API endpoint",
+ "API endpoint is too long": "API endpoint is too long",
"API Endpoints": "API Endpoints",
"API Info": "API Info",
"API info added. Click \"Save Settings\" to apply.": "API info added. Click \"Save Settings\" to apply.",
@@ -397,8 +416,10 @@
"API key from the provider": "API key from the provider",
"API key is loading, please try again in a moment": "API key is loading, please try again in a moment",
"API key is required": "API key is required",
+ "API key is too long": "API key is too long",
"API Key mode (does not support batch creation)": "API Key mode (does not support batch creation)",
"API Key mode: use APIKey|Region": "API Key mode: use APIKey|Region",
+ "API key must be a single line": "API key must be a single line",
"API Key updated successfully": "API Key updated successfully",
"API Keys": "API Keys",
"API Private Key": "API Private Key",
@@ -420,6 +441,7 @@
"appended": "appended",
"Application": "Application",
"Applied {{name}} pricing to {{count}} models": "Applied {{name}} pricing to {{count}} models",
+ "Applied automatically when a contribution is approved.": "Applied automatically when a contribution is approved.",
"Applied upstream model changes to {{count}} channels": "Applied upstream model changes to {{count}} channels",
"Applied upstream model changes to channel (ID: {{id}})": "Applied upstream model changes to channel (ID: {{id}})",
"Applies to custom completion endpoints. JSON map of model → ratio.": "Applies to custom completion endpoints. JSON map of model → ratio.",
@@ -430,6 +452,11 @@
"Apply reset": "Apply reset",
"Apply Sync": "Apply Sync",
"Applying...": "Applying...",
+ "Approval is bound to this administrator test run ID.": "Approval is bound to this administrator test run ID.",
+ "Approve": "Approve",
+ "Approved": "Approved",
+ "Approved channel tag": "Approved channel tag",
+ "Approved channels are created with these routing and removal defaults.": "Approved channels are created with these routing and removal defaults.",
"Approx.": "Approx.",
"apps": "apps",
"Apps": "Apps",
@@ -460,6 +487,7 @@
"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 is selected": "At least one model is selected",
"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",
"Attach": "Attach",
@@ -493,6 +521,7 @@
"auth.resetPasswordConfirm.description": "Confirm the reset request to generate a new password.",
"auth.resetPasswordConfirm.retry": "Retry ({{seconds}}s)",
"auth.resetPasswordConfirm.success": "Your password has been reset successfully",
+ "Authenticated channel contribution and reward workspace.": "Authenticated channel contribution and reward workspace.",
"Authentication": "Authentication",
"Authentication Method": "Authentication Method",
"Authenticator code": "Authenticator code",
@@ -513,12 +542,16 @@
"Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.": "Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.",
"Auto refresh": "Auto refresh",
"Auto Sync Upstream Models": "Auto Sync Upstream Models",
+ "Auto-disable models with no available channels": "Auto-disable models with no available channels",
"Auto-disable rules": "Auto-disable rules",
"Auto-disable status codes": "Auto-disable status codes",
"Auto-disable-enabled channels only": "Auto-disable-enabled channels only",
"Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.": "Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.",
+ "Auto-disabled": "Auto-disabled",
"Auto-discover": "Auto-discover",
"Auto-discovers endpoints from the provider": "Auto-discovers endpoints from the provider",
+ "Auto-enable models disabled by this setting when a channel recovers": "Auto-enable models disabled by this setting when a channel recovers",
+ "Auto-enabled": "Auto-enabled",
"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",
@@ -535,8 +568,9 @@
"Available disk space": "Available disk space",
"Available Models": "Available Models",
"Available reset credits": "Available reset credits",
+ "Available reward": "Available reward",
"Available Rewards": "Available Rewards",
- "Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.": "Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.",
+ "Available: {{amount}}": "Available: {{amount}}",
"Average latency": "Average latency",
"Average latency, TTFT, and success rate by group": "Average latency, TTFT, and success rate by group",
"Average latency, TTFT, TPS, and success rate": "Average latency, TTFT, TPS, and success rate",
@@ -599,10 +633,12 @@
"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",
"Batch detection failed": "Batch detection failed",
"Batch disable failed": "Batch disable failed",
+ "Batch Disable Models with No Channels": "Disable Models with No Channels",
"Batch Edit": "Batch Edit",
"Batch edit all channels with this tag. Leave fields empty to keep current values.": "Batch edit all channels with this tag. Leave fields empty to keep current values.",
"Batch Edit by Tag": "Batch Edit by Tag",
"Batch enable failed": "Batch enable failed",
+ "Batch Enable Models with Recovered Channels": "Enable Models with Available Channels",
"Batch Operations": "Batch Operations",
"Batch processing failed": "Batch processing failed",
"Batch set tag for {{count}} channels": "Batch set tag for {{count}} channels",
@@ -743,6 +779,7 @@
"Change To": "Change To",
"Changed Fields": "Changed Fields",
"Changes are written to the settings draft on save.": "Changes are written to the settings draft on save.",
+ "Changing the version requires acceptance on the next submission.": "Changing the version requires acceptance on the next submission.",
"Changing...": "Changing...",
"Channel": "Channel",
"Channel {{name}}": "Channel {{name}}",
@@ -751,6 +788,10 @@
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.": "Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.",
"Channel Affinity: Upstream Cache Hit": "Channel Affinity: Upstream Cache Hit",
"Channel consistency repaired: {{success}} succeeded, {{fails}} failed": "Channel consistency repaired: {{success}} succeeded, {{fails}} failed",
+ "Channel Contribution Agreement": "Channel Contribution Agreement",
+ "Channel Contribution Review": "Channel Contribution Review",
+ "Channel contribution settings": "Channel contribution settings",
+ "Channel Contributions": "Channel Contributions",
"Channel copied successfully": "Channel copied successfully",
"Channel created successfully": "Channel created successfully",
"Channel deleted successfully": "Channel deleted successfully",
@@ -764,9 +805,14 @@
"Channel key unlocked": "Channel key unlocked",
"Channel Management": "Channel Management",
"Channel models": "Channel models",
+ "Channel name": "Channel name",
"Channel name is required": "Channel name is required",
+ "Channel name must not exceed 128 characters": "Channel name must not exceed 128 characters",
+ "Channel tag is required": "Channel tag is required",
+ "Channel tag must not exceed 64 characters": "Channel tag must not exceed 64 characters",
"Channel test completed": "Channel test completed",
"Channel test mode": "Channel test mode",
+ "Channel type": "Channel type",
"Channel type is required": "Channel type is required",
"Channel updated successfully": "Channel updated successfully",
"Channel-specific settings (JSON format)": "Channel-specific settings (JSON format)",
@@ -956,6 +1002,7 @@
"Conditions (AND)": "Conditions (AND)",
"Confidence": "Confidence",
"Configuration": "Configuration",
+ "Configuration changes invalidate the previous test result.": "Configuration changes invalidate the previous test result.",
"Configuration File": "Configuration File",
"Configuration for Creem payment integration": "Configuration for Creem payment integration",
"Configuration for Epay payment integration": "Configuration for Epay payment integration",
@@ -991,6 +1038,7 @@
"Configure Waffo payment aggregation platform integration": "Configure Waffo payment aggregation platform integration",
"Configure your account behavior preferences": "Configure your account behavior preferences",
"Configure your account preferences and integrations": "Configure your account preferences and integrations",
+ "Configured": "Configured",
"Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.": "Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.",
"Configured routes and latency checks": "Configured routes and latency checks",
"Confirm": "Confirm",
@@ -1029,6 +1077,7 @@
"Connect through OpenAI, Claude, Gemini, and other compatible API routes": "Connect through OpenAI, Claude, Gemini, and other compatible API routes",
"Connected to io.net service normally.": "Connected to io.net service normally.",
"Connection closed": "Connection closed",
+ "Connection details": "Connection details",
"Connection error": "Connection error",
"Connection failed": "Connection failed",
"Connection info detected in clipboard": "Connection info detected in clipboard",
@@ -1059,7 +1108,26 @@
"Continue with OIDC": "Continue with OIDC",
"Continue with Telegram": "Continue with Telegram",
"Continue with WeChat": "Continue with WeChat",
+ "Continuous failure time before automatic deletion.": "Continuous failure time before automatic deletion.",
"Contract review, compliance, summarisation": "Contract review, compliance, summarisation",
+ "Contribute": "Contribute",
+ "Contribute a channel": "Contribute a channel",
+ "Contribution approved": "Contribution approved",
+ "Contribution channel connection settings are read-only here. Submit sensitive changes through channel contribution review; only tag, priority, and weight can be edited.": "Contribution channel connection settings are read-only here. Submit sensitive changes through channel contribution review; only tag, priority, and weight can be edited.",
+ "Contribution deleted": "Contribution deleted",
+ "Contribution details": "Contribution details",
+ "Contribution details are incomplete": "Contribution details are incomplete",
+ "Contribution draft saved": "Contribution draft saved",
+ "Contribution eligibility": "Contribution eligibility",
+ "Contribution rejected": "Contribution rejected",
+ "Contribution review": "Contribution review",
+ "Contribution settings saved": "Contribution settings saved",
+ "Contribution settings unavailable": "Contribution settings unavailable",
+ "Contribution submitted for review": "Contribution submitted for review",
+ "Contribution withdrawn": "Contribution withdrawn",
+ "Contributions will appear here when users create drafts.": "Contributions will appear here when users create drafts.",
+ "Contributor": "Contributor",
+ "Control eligibility, routing defaults, health removal, rewards, and the agreement.": "Control eligibility, routing defaults, health removal, rewards, and the agreement.",
"Control which models are exposed and which groups may use them.": "Control which models are exposed and which groups may use them.",
"Controls how much the model thinks before answering": "Controls how much the model thinks before answering",
"Controls randomness and creativity": "Controls randomness and creativity",
@@ -1198,6 +1266,7 @@
"Current Billing": "Current Billing",
"Current Cache Size": "Current Cache Size",
"Current domain": "Current domain",
+ "Current draft is saved": "Current draft is saved",
"Current email: {{email}}. Enter a new email to change.": "Current email: {{email}}. Enter a new email to change.",
"Current key": "Current key",
"Current legacy JSON is invalid, cannot append": "Current legacy JSON is invalid, cannot append",
@@ -1206,6 +1275,7 @@
"Current Password": "Current Password",
"Current Price": "Current Price",
"Current quota": "Current quota",
+ "Current reward rate": "Current reward rate",
"Current Value": "Current Value",
"Current version": "Current version",
"Current:": "Current:",
@@ -1270,6 +1340,7 @@
"Default Bearer": "Default Bearer",
"Default Collapse Sidebar": "Default Collapse Sidebar",
"Default consumption chart": "Default consumption chart",
+ "Default is 0 until routing is intentionally enabled.": "Default is 0 until routing is intentionally enabled.",
"Default Max Tokens": "Default Max Tokens",
"Default model call chart": "Default model call chart",
"Default range": "Default range",
@@ -1295,6 +1366,7 @@
"Delete all stale": "Delete all stale",
"Delete Auto-Disabled": "Delete Auto-Disabled",
"Delete Channel": "Delete Channel",
+ "Delete channel contribution?": "Delete channel contribution?",
"Delete Channels?": "Delete Channels?",
"Delete condition": "Delete condition",
"Delete Condition": "Delete Condition",
@@ -1359,6 +1431,7 @@
"Describe": "Describe",
"Describe this model...": "Describe this model...",
"Describe this vendor...": "Describe this vendor...",
+ "Describe what must be corrected": "Describe what must be corrected",
"Description": "Description",
"Description is required": "Description is required",
"Designed and Developed by": "Designed and Developed by",
@@ -1385,6 +1458,7 @@
"Disable": "Disable",
"Disable 2FA": "Disable 2FA",
"Disable All": "Disable All",
+ "Disable Models with No Channels?": "Disable Models with No Channels?",
"Disable on failure": "Disable on failure",
"Disable selected channels": "Disable selected channels",
"Disable selected models": "Disable selected models",
@@ -1457,6 +1531,7 @@
"Downgrade to pre-purchase group": "Downgrade to pre-purchase group",
"Downgrade to this group after the subscription expires": "Downgrade to this group after the subscription expires",
"Download": "Download",
+ "Draft": "Draft",
"Drag {{group}} to reorder": "Drag {{group}} to reorder",
"Draw": "Draw",
"Drawing": "Drawing",
@@ -1488,7 +1563,6 @@
"e.g. my-gitlab": "e.g. my-gitlab",
"e.g. New API Console": "e.g. New API Console",
"e.g. openid profile email": "e.g. openid profile email",
- "e.g. Requires level {{required}}; your current level is {{current}}": "e.g. Requires level {{required}}; your current level is {{current}}",
"e.g. Suitable for light usage": "e.g. Suitable for light usage",
"e.g. This request does not meet access policy": "e.g. This request does not meet access policy",
"e.g., 0.95": "e.g., 0.95",
@@ -1532,10 +1606,12 @@
"Edit": "Edit",
"Edit {{title}}": "Edit {{title}}",
"Edit all channels with tag:": "Edit all channels with tag:",
+ "Edit and resubmit": "Edit and resubmit",
"Edit Announcement": "Edit Announcement",
"Edit API Shortcut": "Edit API Shortcut",
"Edit billing ratios and user-selectable groups in one table.": "Edit billing ratios and user-selectable groups in one table.",
"Edit Channel": "Edit Channel",
+ "Edit channel contribution": "Edit channel contribution",
"Edit channel routing": "Edit channel routing",
"Edit chat preset": "Edit chat preset",
"Edit discount tier": "Edit discount tier",
@@ -1596,6 +1672,7 @@
"Enable io.net model deployment service in console": "Enable io.net model deployment service in console",
"Enable LinuxDO OAuth": "Enable LinuxDO OAuth",
"Enable model performance metrics": "Enable model performance metrics",
+ "Enable Models with Recovered Channels?": "Enable Models with Recovered Channels?",
"Enable OIDC": "Enable OIDC",
"Enable or disable this channel": "Enable or disable this channel",
"Enable or disable this model": "Enable or disable this model",
@@ -1624,6 +1701,7 @@
"Enabled all channels with tag: {{tag}}": "Enabled all channels with tag: {{tag}}",
"Enabled channels with tag {{tag}}": "Enabled channels with tag {{tag}}",
"Enabled Status": "Enabled Status",
+ "Enabling this setting immediately disables all currently enabled models with no available channels. Turning it off later will not automatically re-enable those models. Continue?": "Enabling this setting immediately disables all currently enabled models with no available channels. Turning it off later will not automatically re-enable those models. Continue?",
"Enabling...": "Enabling...",
"Encourages introducing new topics": "Encourages introducing new topics",
"Encourages new topics": "Encourages new topics",
@@ -1635,6 +1713,7 @@
"Endpoint": "Endpoint",
"Endpoint config": "Endpoint config",
"Endpoint Configuration": "Endpoint Configuration",
+ "Endpoint type": "Endpoint type",
"Endpoint Type": "Endpoint Type",
"Endpoint, provider-specific settings, and credentials.": "Endpoint, provider-specific settings, and credentials.",
"Endpoint:": "Endpoint:",
@@ -1650,8 +1729,10 @@
"Enter a positive integer": "Enter a positive integer",
"Enter a positive or negative amount to adjust the quota": "Enter a positive or negative amount to adjust the quota",
"Enter a react-icons component name. Invalid names show no icon.": "Enter a react-icons component name. Invalid names show no icon.",
+ "Enter a valid API endpoint": "Enter a valid API endpoint",
"Enter a valid email or leave blank": "Enter a valid email or leave blank",
"Enter a value and press Enter": "Enter a value and press Enter",
+ "Enter a whole number within the allowed range": "Enter a whole number within the allowed range",
"Enter amount in {{currency}}": "Enter amount in {{currency}}",
"Enter amount in tokens": "Enter amount in tokens",
"Enter announcement content (supports Markdown & HTML)": "Enter announcement content (supports Markdown & HTML)",
@@ -1689,6 +1770,7 @@
"Enter password (8-20 characters)": "Enter password (8-20 characters)",
"Enter quota in {{currency}}": "Enter quota in {{currency}}",
"Enter quota in tokens": "Enter quota in tokens",
+ "Enter reward quota": "Enter reward quota",
"Enter secret key": "Enter secret key",
"Enter system prompt (user prompt takes priority)": "Enter system prompt (user prompt takes priority)",
"Enter tag name (optional)": "Enter tag name (optional)",
@@ -1699,6 +1781,7 @@
"Enter the full URL of your Gotify server": "Enter the full URL of your Gotify server",
"Enter the knowledge base ID": "Enter the knowledge base ID",
"Enter the path before /suno, usually just the domain": "Enter the path before /suno, usually just the domain",
+ "Enter the provider API key": "Enter the provider API key",
"Enter the quota amount in {{currency}}": "Enter the quota amount in {{currency}}",
"Enter the quota amount in tokens": "Enter the quota amount in tokens",
"Enter the verification code": "Enter the verification code",
@@ -1738,8 +1821,8 @@
"Error Type (optional)": "Error Type (optional)",
"Estimated cost": "Estimated cost",
"Estimated quota cost": "Estimated quota cost",
- "Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.": "Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.",
"Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.": "Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.",
+ "Every model has administrator pricing": "Every model has administrator pricing",
"Every other device will lose access immediately. This device will remain signed in.": "Every other device will lose access immediately. This device will remain signed in.",
"Everything configured for this group, in one place.": "Everything configured for this group, in one place.",
"Exact": "Exact",
@@ -1802,6 +1885,9 @@
"Failed to {{action}} user": "Failed to {{action}} user",
"Failed to adjust quota": "Failed to adjust quota",
"Failed to apply overwrite.": "Failed to apply overwrite.",
+ "Failed to approve contribution": "Failed to approve contribution",
+ "Failed to batch disable models": "Failed to batch disable models",
+ "Failed to batch enable models": "Failed to batch enable models",
"Failed to bind email": "Failed to bind email",
"Failed to change password": "Failed to change password",
"Failed to check for updates": "Failed to check for updates",
@@ -1827,6 +1913,7 @@
"Failed to delete API key": "Failed to delete API key",
"Failed to delete API keys": "Failed to delete API keys",
"Failed to delete channel": "Failed to delete channel",
+ "Failed to delete contribution": "Failed to delete contribution",
"Failed to delete disabled channels": "Failed to delete disabled channels",
"Failed to delete failed models": "Failed to delete failed models",
"Failed to delete group": "Failed to delete group",
@@ -1864,6 +1951,10 @@
"Failed to load": "Failed to load",
"Failed to load API keys": "Failed to load API keys",
"Failed to load billing history": "Failed to load billing history",
+ "Failed to load contribution": "Failed to load contribution",
+ "Failed to load contribution rewards": "Failed to load contribution rewards",
+ "Failed to load contribution settings": "Failed to load contribution settings",
+ "Failed to load contributions": "Failed to load contributions",
"Failed to load enabled models": "Failed to load enabled models",
"Failed to load home page content": "Failed to load home page content",
"Failed to load image": "Failed to load image",
@@ -1886,6 +1977,7 @@
"Failed to refresh credential": "Failed to refresh credential",
"Failed to regenerate backup codes": "Failed to regenerate backup codes",
"Failed to register Passkey": "Failed to register Passkey",
+ "Failed to reject contribution": "Failed to reject contribution",
"Failed to remove Passkey": "Failed to remove Passkey",
"Failed to repair channel consistency": "Failed to repair channel consistency",
"Failed to reset 2FA": "Failed to reset 2FA",
@@ -1895,6 +1987,8 @@
"Failed to save": "Failed to save",
"Failed to save announcements": "Failed to save announcements",
"Failed to save API info": "Failed to save API info",
+ "Failed to save contribution draft": "Failed to save contribution draft",
+ "Failed to save contribution settings": "Failed to save contribution settings",
"Failed to save FAQ": "Failed to save FAQ",
"Failed to save Uptime Kuma groups": "Failed to save Uptime Kuma groups",
"Failed to search API keys": "Failed to search API keys",
@@ -1911,16 +2005,19 @@
"Failed to start Discord login": "Failed to start Discord login",
"Failed to start GitHub login": "Failed to start GitHub login",
"Failed to start LinuxDO login": "Failed to start LinuxDO login",
+ "Failed to start model tests": "Failed to start model tests",
"Failed to start OIDC login": "Failed to start OIDC login",
"Failed to start Passkey login": "Failed to start Passkey login",
"Failed to start Passkey registration": "Failed to start Passkey registration",
"Failed to start Telegram binding": "Failed to start Telegram binding",
"Failed to start testing all channels": "Failed to start testing all channels",
"Failed to start verification": "Failed to start verification",
+ "Failed to submit contribution": "Failed to submit contribution",
"Failed to sync prices": "Failed to sync prices",
"Failed to sync ratios": "Failed to sync ratios",
"Failed to test all channels": "Failed to test all channels",
"Failed to test channel": "Failed to test channel",
+ "Failed to transfer rewards": "Failed to transfer rewards",
"Failed to update all balances": "Failed to update all balances",
"Failed to update API key": "Failed to update API key",
"Failed to update API key status": "Failed to update API key status",
@@ -1935,7 +2032,9 @@
"Failed to update settings": "Failed to update settings",
"Failed to update tag": "Failed to update tag",
"Failed to update user": "Failed to update user",
+ "Failed to withdraw contribution": "Failed to withdraw contribution",
"Failure keywords": "Failure keywords",
+ "Failure since": "Failure since",
"Fair": "Fair",
"Fallback": "Fallback",
"Fallback base URL": "Fallback base URL",
@@ -1955,9 +2054,12 @@
"Fetch available models for:": "Fetch available models for:",
"Fetch available models from upstream": "Fetch available models from upstream",
"Fetch from Upstream": "Fetch from Upstream",
+ "Fetch models": "Fetch models",
"Fetch Models": "Fetch Models",
+ "Fetch models or enter model IDs": "Fetch models or enter model IDs",
"Fetched {{count}} model(s) from upstream": "Fetched {{count}} model(s) from upstream",
"Fetched {{count}} models": "Fetched {{count}} models",
+ "Fetched and saved {{count}} models": "Fetched and saved {{count}} models",
"Fetching prefill groups...": "Fetching prefill groups...",
"Fetching upstream prices...": "Fetching upstream prices...",
"Fetching upstream ratios...": "Fetching upstream ratios...",
@@ -1978,10 +2080,6 @@
"Fill in the following info to create a new subscription plan": "Fill in the following info to create a new subscription plan",
"Fill Related Models": "Fill Related Models",
"Fill Template": "Fill Template",
- "Fill template: level and active": "Fill template: level and active",
- "Fill template: level message": "Fill template: level message",
- "Fill template: organization message": "Fill template: organization message",
- "Fill template: organization or role": "Fill template: organization or role",
"Fill Templates": "Fill Templates",
"Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.": "Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.",
"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format": "Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format",
@@ -2092,6 +2190,7 @@
"Full Code": "Full Code",
"Full input length": "Full input length",
"Full layout": "Full layout",
+ "Full model test started": "Full model test started",
"Full width": "Full width",
"Function calling": "Function calling",
"Functions": "Functions",
@@ -2122,7 +2221,9 @@
"Get started": "Get started",
"Get Started": "Get Started",
"GitHub": "GitHub",
+ "Give the contributor a clear reason they can address before resubmitting.": "Give the contributor a clear reason they can address before resubmitting.",
"Give the group a recognizable name and optional description.": "Give the group a recognizable name and optional description.",
+ "Give this contribution a recognizable name": "Give this contribution a recognizable name",
"Give this group a recognizable name.": "Give this group a recognizable name.",
"Global configuration and administrative tools.": "Global configuration and administrative tools.",
"Global Coverage": "Global Coverage",
@@ -2166,6 +2267,7 @@
"Group details": "Group details",
"Group identifier": "Group identifier",
"Group is required": "Group is required",
+ "Group must not exceed 64 characters": "Group must not exceed 64 characters",
"Group name": "Group name",
"Group Name": "Group Name",
"Group name cannot be changed when editing.": "Group name cannot be changed when editing.",
@@ -2205,6 +2307,8 @@
"Header Value (supports string or JSON mapping)": "Header Value (supports string or JSON mapping)",
"header. Anthropic-formatted endpoints accept the": "header. Anthropic-formatted endpoints accept the",
"Health": "Health",
+ "Health check interval (minutes)": "Health check interval (minutes)",
+ "Health checks continue while the contributed channel is active.": "Health checks continue while the contributed channel is active.",
"Healthy": "Healthy",
"Hidden": "Hidden",
"Hidden — verify to reveal": "Hidden — verify to reveal",
@@ -2224,6 +2328,7 @@
"High-risk status code retry risk check 4": "I voluntarily accept the system stability risks, including severe client timeouts and possible service crashes, and take responsibility for any resulting request backlog or service outage.",
"High-risk status code retry risk disclaimer": "### ⚠️ High-risk operation: 504/524 status code retry risk notice and disclaimer\n\nBy default, this project does not retry status codes `400` (bad request), `504` (gateway timeout), or `524` (a timeout occurred). Status codes 504 and 524 usually mean that **the request successfully reached the upstream AI service and upstream processing had begun, but the connection was closed because upstream processing took too long**. This usually points to an upstream service bottleneck.\n\nEnabling redirection/retry for these timeout status codes is an **extremely high-risk operation**. Before enabling it, you must carefully read and understand the following consequences:\n\n#### 1. Core risks (read carefully)\n\n1. 💸 Duplicate or multiple billing: Most upstream AI providers **still charge** for requests that started processing but were interrupted by a network timeout (504/524). A retry sends a brand-new upstream request and can result in **duplicate or multiple charges**.\n2. ⏳ Severe client timeout: Once a request has already timed out, adding retries can multiply total latency and cause severe or unacceptable timeouts for the final client or caller.\n3. 💥 Request backlog and service crash: Forced retries keep threads and connections occupied for longer. Under high concurrency, this can cause a serious **request backlog**, exhaust system resources, trigger cascading failures, and crash the proxy service.\n\n#### 2. Risk acknowledgement\n\nIf you still choose to enable this feature, you acknowledge all of the following:",
"Higher priority channels are selected first": "Higher priority channels are selected first",
+ "Higher values are selected first.": "Higher values are selected first.",
"Historical Usage": "Historical Usage",
"History of MjProxy-style image tasks.": "History of MjProxy-style image tasks.",
"Hit criteria: If cached tokens exist in usage, it counts as a hit.": "Hit criteria: If cached tokens exist in usage, it counts as a hit.",
@@ -2245,6 +2350,7 @@
"How It Works": "How It Works",
"How model mapping works": "How model mapping works",
"How much to charge for each US dollar of balance (Epay)": "How much to charge for each US dollar of balance (Epay)",
+ "How often contributed channels are checked.": "How often contributed channels are checked.",
"How this model name should match requests": "How this model name should match requests",
"How to deliver the resulting image": "How to deliver the resulting image",
"How to get an io.net API Key": "How to get an io.net API Key",
@@ -2280,6 +2386,7 @@
"https://your-server.example.com": "https://your-server.example.com",
"Human-readable name shown to users during Passkey prompts.": "Human-readable name shown to users during Passkey prompts.",
"I confirm enabling high-risk retry": "I Confirm Enabling High-risk Retry",
+ "I have read and agree to": "I have read and agree to",
"I have read and agree to the": "I have read and agree to the",
"I have read and understood the above compliance reminder": "I have read and understood the above compliance reminder",
"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.": "I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.",
@@ -2348,6 +2455,7 @@
"Input tokens": "Input tokens",
"Input Tokens": "Input Tokens",
"Inset": "Inset",
+ "Inspect drafts, approved channels, rejected revisions, and health removals.": "Inspect drafts, approved channels, rejected revisions, and health removals.",
"Inspect requests, errors, and billing details": "Inspect requests, errors, and billing details",
"Inspect user prompts": "Inspect user prompts",
"Instance": "Instance",
@@ -2456,9 +2564,13 @@
"Last 30 days uptime": "Last 30 days uptime",
"Last active {{time}} · Expires {{expires}}": "Last active {{time}} · Expires {{expires}}",
"Last check time": "Last check time",
+ "Last checked": "Last checked",
"Last detected addable models": "Last detected addable models",
+ "Last error": "Last error",
+ "Last failure": "Last failure",
"Last Login": "Last Login",
"Last Seen": "Last Seen",
+ "Last success": "Last success",
"Last Tested": "Last Tested",
"Last updated:": "Last updated:",
"Last Used": "Last Used",
@@ -2475,6 +2587,7 @@
"Learn more": "Learn more",
"Learn more:": "Learn more:",
"Leave": "Leave",
+ "Leave blank to keep the current key": "Leave blank to keep the current key",
"Leave blank to keep the existing credential": "Leave blank to keep the existing credential",
"Leave blank to keep the existing key": "Leave blank to keep the existing key",
"Leave blank unless rotating the secret": "Leave blank unless rotating the secret",
@@ -2505,6 +2618,7 @@
"Less than or equal": "Less than or equal",
"Less Than or Equal": "Less Than or Equal",
"License": "License",
+ "Lifetime earned": "Lifetime earned",
"Light": "Light",
"Lightning Fast": "Lightning Fast",
"Limit period": "Limit period",
@@ -2593,6 +2707,7 @@
"Manual Disabled": "Manual Disabled",
"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).": "Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).",
"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.": "Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.",
+ "Map public model IDs to the provider model IDs when needed.": "Map public model IDs to the provider model IDs when needed.",
"Map request model names to actual provider model names (JSON format)": "Map request model names to actual provider model names (JSON format)",
"Map response status codes (JSON format)": "Map response status codes (JSON format)",
"Map upstream status codes to different codes": "Map upstream status codes to different codes",
@@ -2672,6 +2787,7 @@
"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.": "Mint a fresh pair below — or pick an existing one further down. Click Save when ready.",
"Minute": "Minute",
"minutes": "minutes",
+ "Missing": "Missing",
"Missing code": "Missing code",
"Missing Models": "Missing Models",
"Missing user data from Passkey login response": "Missing user data from Passkey login response",
@@ -2701,6 +2817,7 @@
"Model enabled successfully": "Model enabled successfully",
"Model fixed pricing": "Model fixed pricing",
"Model Group": "Model Group",
+ "Model health": "Model health",
"Model Limits": "Model Limits",
"Model Mapping": "Model Mapping",
"Model Mapping (JSON)": "Model Mapping (JSON)",
@@ -2786,6 +2903,7 @@
"Move {{group}} up": "Move {{group}} up",
"Move a request header": "Move a request header",
"Move affiliate rewards to your main balance": "Move affiliate rewards to your main balance",
+ "Move available contribution rewards into your wallet balance.": "Move available contribution rewards into your wallet balance.",
"Move fallback to end": "Move fallback to end",
"Move Field": "Move Field",
"Move Header": "Move Header",
@@ -2818,6 +2936,7 @@
"Multipliers for recharge pricing based on user groups.": "Multipliers for recharge pricing based on user groups.",
"Must be a valid URL": "Must be a valid URL",
"Must be at least 8 characters": "Must be at least 8 characters",
+ "My contributions": "My contributions",
"My Subscriptions": "My Subscriptions",
"my-status": "my-status",
"MySQL detected": "MySQL detected",
@@ -2851,6 +2970,7 @@
"New API": "New API",
"New API <noreply@example.com>": "New API <noreply@example.com>",
"New API Project Repository:": "New API Project Repository:",
+ "New contribution": "New contribution",
"New Format Template": "New Format Template",
"New Group": "New Group",
"New model": "New model",
@@ -2885,6 +3005,7 @@
"No app usage data available for this model.": "No app usage data available for this model.",
"No apps match the selected filters": "No apps match the selected filters",
"No Auth": "No Auth",
+ "No auto-disabled models with recovered channels found": "No auto-disabled models with recovered channels found",
"No available groups in the global Auto order.": "No available groups in the global Auto order.",
"No available models": "No available models",
"No available Web chat links": "No available Web chat links",
@@ -2896,6 +3017,7 @@
"No changes": "No changes",
"No changes made": "No changes made",
"No changes to save": "No changes to save",
+ "No channel contributions yet": "No channel contributions yet",
"No channel selected": "No channel selected",
"No channel type found.": "No channel type found.",
"No channels available. Create your first channel to get started.": "No channels available. Create your first channel to get started.",
@@ -2910,6 +3032,7 @@
"No console output": "No console output",
"No containers": "No containers",
"No content to copy": "No content to copy",
+ "No contribution rewards yet": "No contribution rewards yet",
"No custom groups. Saving will inherit the complete global Auto order.": "No custom groups. Saving will inherit the complete global Auto order.",
"No custom OAuth providers configured yet.": "No custom OAuth providers configured yet.",
"No data": "No data",
@@ -2946,13 +3069,16 @@
"No Logs Found": "No Logs Found",
"No mappings configured. Click \"Add Row\" to get started.": "No mappings configured. Click \"Add Row\" to get started.",
"No matches found": "No matches found",
+ "No matching contributions": "No matching contributions",
"No matching items": "No matching items",
+ "No matching models": "No matching models",
"No matching results": "No matching results",
"No matching rules": "No matching rules",
"No matching token and channel usage was found.": "No matching token and channel usage was found.",
"No messages yet": "No messages yet",
"No missing models found.": "No missing models found.",
"No model found.": "No model found.",
+ "No model health observations": "No model health observations",
"No model mappings configured. Click \"Add Mapping\" to get started.": "No model mappings configured. Click \"Add Mapping\" to get started.",
"No model price changes to save": "No model price changes to save",
"No models available": "No models available",
@@ -2972,6 +3098,7 @@
"No models to add": "No models to add",
"No models to copy": "No models to copy",
"No models to remove": "No models to remove",
+ "No models with unavailable channels found": "No models with unavailable channels found",
"No models with unset prices": "No models with unset prices",
"No new models to add": "No new models to add",
"No new models yet": "No new models yet",
@@ -3021,6 +3148,7 @@
"No Sync": "No Sync",
"No system announcements": "No system announcements",
"No system tasks yet.": "No system tasks yet.",
+ "No test results": "No test results",
"No token found.": "No token found.",
"No tools configured": "No tools configured",
"No Upgrade": "No Upgrade",
@@ -3054,6 +3182,7 @@
"Not Equals": "Not Equals",
"Not in pricing table": "Not in pricing table",
"Not included": "Not included",
+ "Not required": "Not required",
"Not set": "Not set",
"Not Set": "Not Set",
"Not set yet": "Not set yet",
@@ -3077,6 +3206,7 @@
"Number of tokens per unit quota": "Number of tokens per unit quota",
"Number of top log probabilities returned per token": "Number of top log probabilities returned per token",
"Number of users invited": "Number of users invited",
+ "OAuth": "OAuth",
"OAuth binding timed out. Please try again.": "OAuth binding timed out. Please try again.",
"OAuth binding window is no longer available": "OAuth binding window is no longer available",
"OAuth callback URL": "OAuth callback URL",
@@ -3139,7 +3269,9 @@
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.",
"Only successful requests": "Only successful requests",
"Only successful requests count toward this limit.": "Only successful requests count toward this limit.",
+ "Only the connection details required for review are collected.": "Only the connection details required for review are collected.",
"Only the last {{value}} log files will be retained; the rest will be deleted.": "Only the last {{value}} log files will be retained; the rest will be deleted.",
+ "Only these groups and provider types can be submitted.": "Only these groups and provider types can be submitted.",
"Oops! Page Not Found!": "Oops! Page Not Found!",
"Oops! Something went wrong": "Oops! Something went wrong",
"Open": "Open",
@@ -3150,6 +3282,7 @@
"Open in New Tab": "Open in New Tab",
"Open menu": "Open menu",
"Open release": "Open release",
+ "Open review": "Open review",
"Open source": "Open source",
"Open Source": "Open Source",
"Open the io.net console API Keys page": "Open the io.net console API Keys page",
@@ -3247,6 +3380,7 @@
"Overwritten": "Overwritten",
"Page": "Page",
"Page {{current}} of {{total}}": "Page {{current}} of {{total}}",
+ "Page {{page}} of {{pages}}": "Page {{page}} of {{pages}}",
"PaLM": "PaLM",
"Pan": "Pan",
"Pancake": "Pancake",
@@ -3278,6 +3412,7 @@
"Pass when key is missing": "Pass when key is missing",
"Pass-Through": "Pass-Through",
"Pass-through Headers (comma-separated or JSON array)": "Pass-through Headers (comma-separated or JSON array)",
+ "Passed": "Passed",
"Passive recovery only": "Passive recovery only",
"Passkey": "Passkey",
"Passkey Authentication": "Passkey Authentication",
@@ -3348,6 +3483,7 @@
"Penalises repetition of frequent tokens": "Penalises repetition of frequent tokens",
"pending": "pending",
"Pending": "Pending",
+ "Pending review": "Pending review",
"per": "per",
"Per 1K tokens": "Per 1K tokens",
"Per 1M tokens": "Per 1M tokens",
@@ -3679,6 +3815,7 @@
"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.",
+ "Recent transfers": "Recent transfers",
"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",
@@ -3750,7 +3887,10 @@
"Registry (optional)": "Registry (optional)",
"Registry secret": "Registry secret",
"Registry username": "Registry username",
+ "Reject": "Reject",
+ "Reject contribution": "Reject contribution",
"Reject Reason": "Reject Reason",
+ "Rejection reason": "Rejection reason",
"Release details": "Release details",
"Released": "Released",
"Relying Party Display Name": "Relying Party Display Name",
@@ -3846,6 +3986,7 @@
"Required": "Required",
"Required events:": "Required events:",
"Required provider, authentication, model, and group settings": "Required provider, authentication, model, and group settings",
+ "Required tests passed within the last 30 minutes": "Required tests passed within the last 30 minutes",
"Required to expose MjProxy-style image generation to end users.": "Required to expose MjProxy-style image generation to end users.",
"Rerank": "Rerank",
"Reroll": "Reroll",
@@ -3889,6 +4030,7 @@
"Reset usage window": "Reset usage window",
"Resets in:": "Resets in:",
"Resetting...": "Resetting...",
+ "Resize column": "Resize column",
"Resolve Conflicts": "Resolve Conflicts",
"Resource Configuration": "Resource Configuration",
"Resources": "Resources",
@@ -3921,11 +4063,22 @@
"Revenue": "Revenue",
"Review & initialize": "Review & initialize",
"Review and sign out devices currently using your account.": "Review and sign out devices currently using your account.",
+ "Review contributed channels and configure contribution policy.": "Review contributed channels and configure contribution policy.",
+ "Review contributions": "Review contributions",
"Review model rates before scaling traffic": "Review model rates before scaling traffic",
+ "Review note": "Review note",
+ "Review rejected": "Review rejected",
+ "Review status and per-model channel health history.": "Review status and per-model channel health history.",
"Review your payment details": "Review your payment details",
"Review your purchase details before proceeding.": "Review your purchase details before proceeding.",
+ "Revision": "Revision",
"Revoke": "Revoke",
"Revoke session?": "Revoke session?",
+ "Reward basis points": "Reward basis points",
+ "Reward ledger": "Reward ledger",
+ "Rewards": "Rewards",
+ "Rewards are credited after billable requests use an approved channel.": "Rewards are credited after billable requests use an approved channel.",
+ "Rewards transferred to your wallet": "Rewards transferred to your wallet",
"Rewards will be added directly to your balance": "Rewards will be added directly to your balance",
"Rewrite callback URLs to the local server": "Rewrite callback URLs to the local server",
"Right to Left": "Right to Left",
@@ -3946,6 +4099,7 @@
"Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.": "Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.",
"Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.": "Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.",
"Routing & Overrides": "Routing & Overrides",
+ "Routing and health": "Routing and health",
"Routing Reliability": "Routing Reliability",
"Routing Strategy": "Routing Strategy",
"Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.": "Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.",
@@ -3970,8 +4124,11 @@
"Rules JSON": "Rules JSON",
"Rules JSON must be an array": "Rules JSON must be an array",
"Rules match the original model value from the client request body.": "Rules match the original model value from the client request body.",
+ "Run admin test": "Run admin test",
+ "Run an independent administrator test before approving this revision.": "Run an independent administrator test before approving this revision.",
"Run GC": "Run GC",
"Run tests for the selected models": "Run tests for the selected models",
+ "Run the full model test before submitting.": "Run the full model test before submitting.",
"running": "running",
"Running": "Running",
"Runtime": "Runtime",
@@ -3990,6 +4147,7 @@
"Save chat settings": "Save chat settings",
"Save check-in settings": "Save check-in settings",
"Save Creem settings": "Save Creem settings",
+ "Save draft": "Save draft",
"Save drawing settings": "Save drawing settings",
"Save Epay settings": "Save Epay settings",
"Save failed": "Save failed",
@@ -4008,11 +4166,13 @@
"Save preview": "Save preview",
"Save rate limits": "Save rate limits",
"Save sensitive words": "Save sensitive words",
+ "Save settings": "Save settings",
"Save Settings": "Save Settings",
"Save sidebar modules": "Save sidebar modules",
"Save SMTP settings": "Save SMTP settings",
"Save SSRF settings": "Save SSRF settings",
"Save Stripe settings": "Save Stripe settings",
+ "Save the draft, test every model, then submit it for review.": "Save the draft, test every model, then submit it for review.",
"Save these backup codes in a safe place. Each code can only be used once.": "Save these backup codes in a safe place. Each code can only be used once.",
"Save these codes in a safe place. Each code can only be used once.": "Save these codes in a safe place. Each code can only be used once.",
"Save this token now. You won't be able to view it again after closing this dialog.": "Save this token now. You won't be able to view it again after closing this dialog.",
@@ -4020,6 +4180,7 @@
"Save tool prices": "Save tool prices",
"Save Waffo Pancake settings": "Save Waffo Pancake settings",
"Save Worker settings": "Save Worker settings",
+ "Saved drafts and submitted channels will appear here.": "Saved drafts and submitted channels will appear here.",
"Saved successfully": "Saved successfully",
"Saving...": "Saving...",
"Scan QR Code": "Scan QR Code",
@@ -4089,15 +4250,20 @@
"Select all (filtered)": "Select all (filtered)",
"Select all models": "Select all models",
"Select All Visible": "Select All Visible",
+ "Select an allowed group": "Select an allowed group",
"Select an operation mode and enter the amount": "Select an operation mode and enter the amount",
"Select announcement type": "Select announcement type",
+ "Select at least one allowed channel type": "Select at least one allowed channel type",
+ "Select at least one allowed group": "Select at least one allowed group",
"Select at least one Auto group or restore global Auto.": "Select at least one Auto group or restore global Auto.",
"Select at least one field to overwrite.": "Select at least one field to overwrite.",
+ "Select at least one model": "Select at least one model",
"Select at least one target model": "Select at least one target model",
"Select at most {{max}} Auto groups": "Select at most {{max}} Auto groups",
"Select body font": "Select body font",
"Select border radius": "Select border radius",
"Select channel type": "Select channel type",
+ "Select channel types": "Select channel types",
"Select color preset": "Select color preset",
"Select content width": "Select content width",
"Select corner radius": "Select corner radius",
@@ -4363,6 +4529,7 @@
"Structured output": "Structured output",
"Submit": "Submit",
"Submit directly": "Submit directly",
+ "Submit for review": "Submit for review",
"Submit Result": "Submit Result",
"Submit Time": "Submit Time",
"Submitted": "Submitted",
@@ -4391,7 +4558,9 @@
"Successfully deleted {{count}} invalid redemption codes": "Successfully deleted {{count}} invalid redemption codes",
"Successfully deleted {{count}} model(s)": "Successfully deleted {{count}} model(s)",
"Successfully disabled {{count}} model(s)": "Successfully disabled {{count}} model(s)",
+ "Successfully disabled {{count}} model(s) with no available channels": "Successfully disabled {{count}} model(s) with no available channels",
"Successfully enabled {{count}} model(s)": "Successfully enabled {{count}} model(s)",
+ "Successfully enabled {{count}} model(s) with recovered channels": "Successfully enabled {{count}} model(s) with available channels",
"Suffix": "Suffix",
"Suffix Match": "Suffix Match",
"Summarize text": "Summarize text",
@@ -4403,7 +4572,6 @@
"Supported Applications": "Supported Applications",
"Supported Imagine Models": "Supported Imagine Models",
"Supported modalities": "Supported modalities",
- "Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.": "Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.",
"Supported parameters": "Supported parameters",
"Supported variables": "Supported variables",
"Supports `-thinking`, `-thinking-": "Supports `-thinking`, `-thinking-",
@@ -4497,12 +4665,14 @@
"Test {{count}} matching models": "Test {{count}} matching models",
"Test {{count}} selected": "Test {{count}} selected",
"Test a model with a starter prompt, or write your own request below.": "Test a model with a starter prompt, or write your own request below.",
+ "Test all": "Test all",
"Test all {{count}} models": "Test all {{count}} models",
"Test All Channels": "Test All Channels",
"Test Channel Connection": "Test Channel Connection",
"Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.": "Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.",
"Test Connection": "Test Connection",
"Test connectivity for:": "Test connectivity for:",
+ "Test expired": "Test expired",
"Test failed": "Test failed",
"Test interval (minutes)": "Test interval (minutes)",
"Test Latency": "Test Latency",
@@ -4512,6 +4682,8 @@
"Test selected models": "Test selected models",
"Testing all enabled channels started. Please refresh to see results.": "Testing all enabled channels started. Please refresh to see results.",
"Testing...": "Testing...",
+ "Tests are starting...": "Tests are starting...",
+ "Tests failed": "Tests failed",
"Text": "Text",
"Text description of the desired image": "Text description of the desired image",
"Text description of the desired video": "Text description of the desired video",
@@ -4530,6 +4702,8 @@
"The binding will complete automatically after authorization": "The binding will complete automatically after authorization",
"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.": "The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.",
"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.": "The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.",
+ "The channel will leave review or service and can be edited before resubmission.": "The channel will leave review or service and can be edited before resubmission.",
+ "The contribution will be deleted and any linked channel will be removed from service.": "The contribution will be deleted and any linked channel will be removed from service.",
"The deployment node that handled the requests": "The deployment node that handled the requests",
"The effective domain for Passkey registration. Must match the current domain or be its parent domain.": "The effective domain for Passkey registration. Must match the current domain or be its parent domain.",
"The entered text does not match the required text.": "The entered text does not match the required text.",
@@ -4537,12 +4711,14 @@
"The exact model identifier as used in API requests.": "The exact model identifier as used in API requests.",
"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.": "The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.",
"The following models in the model redirect have not been added to the \"Models\" list and may fail during invocation due to missing available models:": "The following models in the model redirect have not been added to the \"Models\" list and may fail during invocation due to missing available models:",
+ "The linked contributed channel will be removed from service.": "The linked contributed channel will be removed from service.",
"The login session that started this Telegram binding is no longer valid.": "The login session that started this Telegram binding is no longer valid.",
"The mapped upstream model(s)": "The mapped upstream model(s)",
"The model that was requested": "The model that was requested",
"The model you're looking for doesn't exist.": "The model you're looking for doesn't exist.",
"The name displayed across the application": "The name displayed across the application",
"The new token will only be shown once. Copy it and store it securely.": "The new token will only be shown once. Copy it and store it securely.",
+ "The provider returned no models": "The provider returned no models",
"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations": "The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations",
"The requested chat preset does not exist or has been removed.": "The requested chat preset does not exist or has been removed.",
"The reset request stays disabled until a credit is available.": "The reset request stays disabled until a credit is available.",
@@ -4564,6 +4740,7 @@
"Theme preset": "Theme preset",
"Theme Settings": "Theme Settings",
"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?": "There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?",
+ "There are no contributions waiting for review.": "There are no contributions waiting for review.",
"There is a rule for vip billed as premium → use its ratio 0.3": "There is a rule for vip billed as premium → use its ratio 0.3",
"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.": "These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.",
"These toggles affect whether certain request fields are passed through to the upstream provider.": "These toggles affect whether certain request fields are passed through to the upstream provider.",
@@ -4610,6 +4787,7 @@
"This site currently has {{count}} models enabled": "This site currently has {{count}} models enabled",
"This Telegram account is already bound.": "This Telegram account is already bound.",
"This Telegram binding request has expired or has already been used.": "This Telegram binding request has expired or has already been used.",
+ "This test result is older than 30 minutes. Run all tests again before submitting.": "This test result is older than 30 minutes. Run all tests again before submitting.",
"This tier catches any request that did not match earlier tiers.": "This tier catches any request that did not match earlier tiers.",
"this token group": "this token group",
"This Uptime Kuma group will be removed from the list.": "This Uptime Kuma group will be removed from the list.",
@@ -4623,6 +4801,8 @@
"This will delete all": "This will delete all",
"This will delete all channel affinity cache entries still in memory.": "This will delete all channel affinity cache entries still in memory.",
"This will delete temporary cache files that have not been used for more than 10 minutes": "This will delete temporary cache files that have not been used for more than 10 minutes",
+ "This will disable all currently enabled models that have no available channels. Continue?": "This will disable all currently enabled models that have no available channels. Continue?",
+ "This will enable models that were auto-disabled by channel availability and now have recovered channels. Manually disabled models are not changed. Continue?": "This will enable models that were auto-disabled by channel availability and now have recovered channels. Manually disabled models are not changed. Continue?",
"This will extend the deployment by the specified hours.": "This will extend the deployment by the specified hours.",
"This will immediately invalidate your existing access token. Any applications or scripts using it will stop working.": "This will immediately invalidate your existing access token. Any applications or scripts using it will stop working.",
"This will permanently delete all manually and automatically disabled channels. This action cannot be undone.": "This will permanently delete all manually and automatically disabled channels. This action cannot be undone.",
@@ -4773,16 +4953,21 @@
"Total:": "Total:",
"TPM": "TPM",
"Track per-request consumption to power usage analytics. Keeping this on increases database writes.": "Track per-request consumption to power usage analytics. Keeping this on increases database writes.",
+ "Track review, availability, and deletion status for every channel.": "Track review, availability, and deletion status for every channel.",
"Track usage, costs and performance with real-time analytics": "Track usage, costs and performance with real-time analytics",
"Tracked apps": "Tracked apps",
"Tracks current account base limits and additional metered usage on Codex upstream.": "Tracks current account base limits and additional metered usage on Codex upstream.",
"Trading insights, accounting, advisory": "Trading insights, accounting, advisory",
"Transfer": "Transfer",
+ "Transfer all": "Transfer all",
+ "Transfer amount": "Transfer amount",
"Transfer Amount": "Transfer Amount",
"Transfer failed": "Transfer failed",
+ "Transfer rewards": "Transfer rewards",
"Transfer Rewards": "Transfer Rewards",
"Transfer successful": "Transfer successful",
"Transfer to Balance": "Transfer to Balance",
+ "Transfer to wallet": "Transfer to wallet",
"Translation": "Translation",
"Transparent Billing": "Transparent Billing",
"Trend": "Trend",
@@ -4834,6 +5019,9 @@
"Unable to read clipboard": "Unable to read clipboard",
"Unauthorized": "Unauthorized",
"Unauthorized Access": "Unauthorized Access",
+ "Unavailable": "Unavailable",
+ "Unavailable deletion threshold (hours)": "Unavailable deletion threshold (hours)",
+ "Unavailable since": "Unavailable since",
"Unbind": "Unbind",
"Unbind failed": "Unbind failed",
"Unbound {{provider}}": "Unbound {{provider}}",
@@ -4861,6 +5049,7 @@
"Untitled": "Untitled",
"Untrusted upstream data:": "Untrusted upstream data:",
"Unused": "Unused",
+ "Up to 100 unique models can be tested in one contribution.": "Up to 100 unique models can be tested in one contribution.",
"Up to 4 strings that stop generation": "Up to 4 strings that stop generation",
"Update": "Update",
"Update All Balances": "Update All Balances",
@@ -4895,6 +5084,7 @@
"Updated a vendor": "Updated a vendor",
"Updated channel {{name}} (ID: {{id}})": "Updated channel {{name}} (ID: {{id}})",
"Updated daily": "Updated daily",
+ "Updated model statuses in batch": "Updated model statuses in batch",
"Updated successfully": "Updated successfully",
"Updated system setting {{key}}": "Updated system setting {{key}}",
"Updated user {{username}} (ID: {{id}})": "Updated user {{username}} (ID: {{id}})",
@@ -4952,6 +5142,7 @@
"Usage logs": "Usage logs",
"Usage Logs": "Usage Logs",
"Usage mode": "Usage mode",
+ "Usage reward": "Usage reward",
"Usage-based": "Usage-based",
"USD": "USD",
"USD Exchange Rate": "USD Exchange Rate",
@@ -4978,6 +5169,7 @@
"Use the full-width table to scan prices, then select a row to edit it here.": "Use the full-width table to scan prices, then select a row to edit it here.",
"Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.": "Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.",
"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.": "Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.",
+ "Use the provider base URL without a model-specific path.": "Use the provider base URL without a model-specific path.",
"Use this callback URL pattern when registering a custom OAuth provider.": "Use this callback URL pattern when registering a custom OAuth provider.",
"Use this token for API authentication": "Use this token for API authentication",
"Use your Passkey": "Use your Passkey",
@@ -5001,6 +5193,7 @@
"User Analytics": "User Analytics",
"User Consumption Ranking": "User Consumption Ranking",
"User Consumption Trend": "User Consumption Trend",
+ "User contribution view": "User contribution view",
"User created successfully": "User created successfully",
"User dashboard and quota controls.": "User dashboard and quota controls.",
"User deleted successfully": "User deleted successfully",
@@ -5038,8 +5231,10 @@
"Users must wait for a successful drawing before upscales or variations.": "Users must wait for a successful drawing before upscales or variations.",
"Users of vip, when billed as premium, pay ratio": "Users of vip, when billed as premium, pay ratio",
"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.": "Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.",
+ "Users review this exact content before every first submission or resubmission.": "Users review this exact content before every first submission or resubmission.",
"uses": "uses",
"Using the complete global Auto order ({{count}} groups)": "Using the complete global Auto order ({{count}} groups)",
+ "Validation and submission": "Validation and submission",
"Validity": "Validity",
"Validity Period": "Validity Period",
"Value": "Value",
@@ -5074,6 +5269,7 @@
"Verification scope is missing": "Verification scope is missing",
"Verify": "Verify",
"Verify and Sign In": "Verify and Sign In",
+ "Verify every current revision independently before approval.": "Verify every current revision independently before approval.",
"Verify routing with Playground or your client": "Verify routing with Playground or your client",
"Verify Setup": "Verify Setup",
"Verify to view channel key": "Verify to view channel key",
@@ -5094,6 +5290,7 @@
"View all currently available models": "View all currently available models",
"View channel lists and details without secrets.": "View channel lists and details without secrets.",
"View channel secrets": "View channel secrets",
+ "View contribution details": "View contribution details",
"View detailed information about this user including balance, usage statistics, and invitation details.": "View detailed information about this user including balance, usage statistics, and invitation details.",
"View details": "View details",
"View document": "View document",
@@ -5150,6 +5347,7 @@
"Wallet Management": "Wallet Management",
"Wallet management and personal preferences.": "Wallet management and personal preferences.",
"Wallet Only": "Wallet Only",
+ "Wallet transfer": "Wallet transfer",
"Warning": "Warning",
"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.": "Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.",
"Warning: Disabling 2FA will make your account less secure.": "Warning: Disabling 2FA will make your account less secure.",
@@ -5218,6 +5416,9 @@
"Wire encoding for the embedding vectors": "Wire encoding for the embedding vectors",
"with conflicts": "with conflicts",
"with the API key from your token settings.": "with the API key from your token settings.",
+ "Withdraw": "Withdraw",
+ "Withdraw channel contribution?": "Withdraw channel contribution?",
+ "Withdraw contribution": "Withdraw contribution",
"Without additional conditions, only the type above is used for pruning.": "Without additional conditions, only the type above is used for pruning.",
"Worked example": "Worked example",
"Worker Access Key": "Worker Access Key",
diff --git a/web/src/i18n/locales/fr.json b/web/src/i18n/locales/fr.json
index e5528b779cc0..ebb2dbc98910 100644
--- a/web/src/i18n/locales/fr.json
+++ b/web/src/i18n/locales/fr.json
@@ -61,6 +61,7 @@
"{{field}} updated to {{value}}": "{{field}} mis à jour en {{value}}",
"{{field}} updated to {{value}} for tag: {{tag}}": "{{field}} mis à jour en {{value}} pour le tag : {{tag}}",
"{{method}} {{route}}": "{{method}} {{route}}",
+ "{{milliseconds}} ms": "{{milliseconds}} ms",
"{{modality}} not supported": "{{modality}} non pris en charge",
"{{modality}} supported": "{{modality}} pris en charge",
"{{n}} model(s) selected": "{{n}} modèle(s) sélectionné(s)",
@@ -98,6 +99,7 @@
"1. Create an application in your Gotify server": "1. Créez une application sur votre serveur Gotify",
"10 / page": "10 / page",
"100 / page": "100 / page",
+ "100 basis points equals 1% of billed quota.": "100 points de base correspondent à 1 % du quota facturé.",
"14 Days": "14 jours",
"192.168.1.1
10.0.0.0/8": "192.168.1.1
10.0.0.0/8",
"1M": "1M",
@@ -118,9 +120,11 @@
"7 days ago": "Il y a 7 jours",
"80,443,8080": "80,443,8080",
"A billing multiplier. Lower ratios mean lower API call costs.": "Un multiplicateur de facturation. Plus le ratio est faible, plus le coût des appels API est bas.",
+ "A contribution can contain at most 100 models": "Une contribution peut contenir au maximum 100 modèles",
"A focused home for keys, balance, routing, and service health.": "Un accueil dédié aux clés, au solde, au routage et à l'état du service.",
"About": "À propos",
"About {{days}} days left": "Environ {{days}} jours restants",
+ "Accept the channel contribution agreement": "Accepter l’accord de contribution de canal",
"Accept Unpriced Models": "Accepter les modèles non tarifés",
"Accepts a JSON array of model identifiers that support the Imagine API.": "Accepte un tableau JSON d'identifiants de modèles qui prennent en charge l'API Imagine.",
"Accepts comma-separated status codes and inclusive ranges.": "Accepte les codes de statut séparés par des virgules et les plages inclusives.",
@@ -167,6 +171,7 @@
"Add a new model to the system by providing the necessary information.": "Ajoutez un nouveau modèle au système en fournissant les informations nécessaires.",
"Add a new user by providing necessary info.": "Ajouter un nouvel utilisateur en fournissant les informations nécessaires.",
"Add a new vendor to the system": "Ajouter un nouveau fournisseur au système",
+ "Add an allowed group": "Ajouter un groupe autorisé",
"Add an extra layer of security to your account": "Ajouter une couche de sécurité supplémentaire à votre compte",
"Add and submit": "Ajouter et soumettre",
"Add Announcement": "Ajouter une annonce",
@@ -244,6 +249,8 @@
"Administer user accounts and roles.": "Gérer les comptes d'utilisateurs et les rôles.",
"Administrator account": "Compte administrateur",
"Administrator username": "Nom d'utilisateur administrateur",
+ "Administrator verification": "Vérification administrateur",
+ "Administrator verification started": "Vérification administrateur démarrée",
"Advance next reset time": "Avancer la prochaine réinitialisation",
"Advanced": "Avancé",
"Advanced Configuration": "Configuration avancée",
@@ -272,6 +279,12 @@
"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.": "agrège plus de 50 fournisseurs IA derrière une API unifiée. Gérez l'accès, suivez les coûts et évoluez sans effort.",
"Aggregation bucket": "Fenêtre d’agrégation",
"AGPL v3.0 License": "Licence AGPL v3.0",
+ "Agreement content is required": "Le contenu de l’accord est requis",
+ "Agreement Markdown": "Markdown de l’accord",
+ "Agreement version": "Version de l’accord",
+ "Agreement version is required": "La version de l’accord est requise",
+ "Agreement version must not exceed 64 characters": "La version de l’accord ne doit pas dépasser 64 caractères",
+ "Agreement version: {{version}}": "Version de l’accord : {{version}}",
"AI Application Infrastructure Foundation": "Socle d'infrastructure pour applications d'IA",
"AI model testing environment": "Environnement de test de modèle IA",
"AI models": "Modèles d'IA",
@@ -287,6 +300,7 @@
"All API tokens": "Tous les jetons API",
"All categories": "Toutes catégories",
"All conditions must match before this tier is used.": "Toutes les conditions doivent correspondre avant que ce palier soit utilisé.",
+ "All contributions": "Toutes les contributions",
"All edits are overwrite operations. Leave fields empty to keep current values unchanged.": "Toutes les modifications sont des opérations d'écrasement. Laissez les champs vides pour conserver les valeurs actuelles inchangées.",
"All files exceed the maximum size.": "Tous les fichiers dépassent la taille maximale.",
"All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.": "Tous les noms de groupes sont gérés ici. Le taux s’applique lorsque les appels sont facturés sous ce groupe ; le taux de recharge s’applique aux utilisateurs appartenant à ce groupe.",
@@ -302,6 +316,7 @@
"All Sync Status": "Tous les statuts de synchronisation",
"All systems operational": "Tous les systèmes opérationnels",
"All Tags": "Tous les tags",
+ "All tests passed": "Tous les tests ont réussi",
"All Types": "Tous les types",
"All upstream data is trusted": "Toutes les données en amont sont fiables",
"All users": "Tous les utilisateurs",
@@ -341,6 +356,8 @@
"Allow using models without price configuration": "Autoriser l'utilisation de modèles sans configuration de prix",
"Allow wallet balance after quota used up": "Autoriser le solde du portefeuille une fois le quota épuisé",
"Allowed": "Autorisé",
+ "Allowed channel types": "Types de canaux autorisés",
+ "Allowed groups": "Groupes autorisés",
"Allowed Origins": "Origines autorisées",
"Allowed Ports": "Ports autorisés",
"Already have an account?": "Vous avez déjà un compte ?",
@@ -378,6 +395,8 @@
"API Addresses": "Adresses API",
"API Base URL (Important: Not Chat API) *": "URL de base de l'API (Important : Pas l'API de Chat) *",
"API Base URL *": "URL de base de l'API *",
+ "API endpoint": "Point de terminaison API",
+ "API endpoint is too long": "Le point de terminaison API est trop long",
"API Endpoints": "Points de terminaison API",
"API Info": "Infos API",
"API info added. Click \"Save Settings\" to apply.": "Informations API ajoutées. Cliquez sur \"Enregistrer les paramètres\" pour appliquer.",
@@ -397,8 +416,10 @@
"API key from the provider": "Clé API du fournisseur",
"API key is loading, please try again in a moment": "La clé API est en cours de chargement, veuillez réessayer dans un instant",
"API key is required": "La clé API est requise",
+ "API key is too long": "La clé API est trop longue",
"API Key mode (does not support batch creation)": "Mode clé API (ne prend pas en charge la création par lots)",
"API Key mode: use APIKey|Region": "Mode clé API : utiliser APIKey|Region",
+ "API key must be a single line": "La clé API doit tenir sur une seule ligne",
"API Key updated successfully": "Clé API mise à jour avec succès",
"API Keys": "Clés API",
"API Private Key": "Clé privée de l'API",
@@ -420,6 +441,7 @@
"appended": "ajouté",
"Application": "Application",
"Applied {{name}} pricing to {{count}} models": "Tarification de {{name}} appliquée à {{count}} modèles",
+ "Applied automatically when a contribution is approved.": "Appliqué automatiquement après l’approbation d’une contribution.",
"Applied upstream model changes to {{count}} channels": "Modifications des modèles en amont appliquées à {{count}} canaux",
"Applied upstream model changes to channel (ID: {{id}})": "Modifications des modèles en amont appliquées au canal (ID : {{id}})",
"Applies to custom completion endpoints. JSON map of model → ratio.": "S'applique aux points de terminaison de complétion personnalisés. Mappage JSON de modèle → ratio.",
@@ -430,6 +452,11 @@
"Apply reset": "Appliquer la réinitialisation",
"Apply Sync": "Appliquer la synchronisation",
"Applying...": "Application en cours...",
+ "Approval is bound to this administrator test run ID.": "L’approbation est liée à cet ID d’exécution de test administrateur.",
+ "Approve": "Approuver",
+ "Approved": "Approuvé",
+ "Approved channel tag": "Étiquette du canal approuvé",
+ "Approved channels are created with these routing and removal defaults.": "Les canaux approuvés sont créés avec ces valeurs par défaut de routage et de suppression.",
"Approx.": "Environ.",
"apps": "applications",
"Apps": "Applications",
@@ -460,6 +487,7 @@
"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 is selected": "Au moins un modèle est sélectionné",
"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",
"Attach": "Joindre",
@@ -493,6 +521,7 @@
"auth.resetPasswordConfirm.description": "Confirmez la demande de réinitialisation pour générer un nouveau mot de passe.",
"auth.resetPasswordConfirm.retry": "Réessayer ({{seconds}}s)",
"auth.resetPasswordConfirm.success": "Votre mot de passe a été réinitialisé avec succès",
+ "Authenticated channel contribution and reward workspace.": "Espace authentifié de contribution de canal et de récompenses.",
"Authentication": "Authentification",
"Authentication Method": "Méthode d'authentification",
"Authenticator code": "Code d'authentification",
@@ -513,12 +542,16 @@
"Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.": "Le mode Auto négocie HTTP/2 lorsque c’est disponible. HTTP/1.1 force plusieurs connexions keep-alive en concurrence.",
"Auto refresh": "Actualisation automatique",
"Auto Sync Upstream Models": "Synchronisation automatique des modèles en amont",
+ "Auto-disable models with no available channels": "Désactiver automatiquement les modèles sans canaux disponibles",
"Auto-disable rules": "Règles de désactivation automatique",
"Auto-disable status codes": "Codes de statut de désactivation auto",
"Auto-disable-enabled channels only": "Canaux avec désactivation automatique uniquement",
"Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.": "Ce mode sonde uniquement les canaux dont la désactivation automatique est activée et qui ne sont pas désactivés manuellement.",
+ "Auto-disabled": "Auto-désactivé",
"Auto-discover": "Découverte automatique",
"Auto-discovers endpoints from the provider": "Découvre automatiquement les points de terminaison du fournisseur",
+ "Auto-enable models disabled by this setting when a channel recovers": "Réactiver automatiquement les modèles désactivés par ce paramètre lorsqu’un canal revient",
+ "Auto-enabled": "Auto-activé",
"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",
@@ -535,8 +568,9 @@
"Available disk space": "Espace disque disponible",
"Available Models": "Modèles disponibles",
"Available reset credits": "Crédits de réinitialisation disponibles",
+ "Available reward": "Récompense disponible",
"Available Rewards": "Récompenses disponibles",
- "Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.": "Variables disponibles : {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, ainsi que des chemins comme {{current.roles}}.",
+ "Available: {{amount}}": "Disponible : {{amount}}",
"Average latency": "Latence moyenne",
"Average latency, TTFT, and success rate by group": "Latence moyenne, TTFT et taux de réussite par groupe",
"Average latency, TTFT, TPS, and success rate": "Latence moyenne, TTFT, TPS et taux de réussite",
@@ -599,10 +633,12 @@
"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",
"Batch detection failed": "Échec de la détection par lot",
"Batch disable failed": "Échec de la désactivation par lots",
+ "Batch Disable Models with No Channels": "Désactiver les modèles sans canaux disponibles",
"Batch Edit": "Modification par lot",
"Batch edit all channels with this tag. Leave fields empty to keep current values.": "Modifiez par lot tous les canaux avec ce tag. Laissez les champs vides pour conserver les valeurs actuelles.",
"Batch Edit by Tag": "Modification par lot par tag",
"Batch enable failed": "Échec de l'activation par lots",
+ "Batch Enable Models with Recovered Channels": "Activer les modèles aux canaux rétablis",
"Batch Operations": "Opérations par lots",
"Batch processing failed": "Échec du traitement par lot",
"Batch set tag for {{count}} channels": "Étiquette définie par lot pour {{count}} canaux",
@@ -743,6 +779,7 @@
"Change To": "Changer en",
"Changed Fields": "Champs modifiés",
"Changes are written to the settings draft on save.": "Les modifications sont écrites dans le brouillon des paramètres lors de l’enregistrement.",
+ "Changing the version requires acceptance on the next submission.": "Toute modification de version impose une nouvelle acceptation lors du prochain envoi.",
"Changing...": "Modification en cours...",
"Channel": "Canal",
"Channel {{name}}": "Canal {{name}}",
@@ -751,6 +788,10 @@
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.": "L'affinité de canal réutilise le dernier canal ayant réussi, en se basant sur les clés extraites du contexte de la requête ou du corps JSON.",
"Channel Affinity: Upstream Cache Hit": "Affinité de canal : hit de cache en amont",
"Channel consistency repaired: {{success}} succeeded, {{fails}} failed": "Cohérence des canaux réparée : {{success}} réussie(s), {{fails}} échouée(s)",
+ "Channel Contribution Agreement": "Accord de contribution de canal",
+ "Channel Contribution Review": "Examen des contributions de canal",
+ "Channel contribution settings": "Paramètres de contribution de canal",
+ "Channel Contributions": "Contributions de canal",
"Channel copied successfully": "Canal copié avec succès",
"Channel created successfully": "Canal créé avec succès",
"Channel deleted successfully": "Canal supprimé avec succès",
@@ -764,9 +805,14 @@
"Channel key unlocked": "Clé de canal déverrouillée",
"Channel Management": "Gestion des canaux",
"Channel models": "Modèles de canaux",
+ "Channel name": "Nom du canal",
"Channel name is required": "Le nom du canal est requis",
+ "Channel name must not exceed 128 characters": "Le nom du canal ne doit pas dépasser 128 caractères",
+ "Channel tag is required": "L’étiquette du canal est requise",
+ "Channel tag must not exceed 64 characters": "L’étiquette du canal ne doit pas dépasser 64 caractères",
"Channel test completed": "Test du canal terminé",
"Channel test mode": "Mode de test des canaux",
+ "Channel type": "Type de canal",
"Channel type is required": "Le type de canal est requis",
"Channel updated successfully": "Canal mis à jour avec succès",
"Channel-specific settings (JSON format)": "Paramètres spécifiques aux canaux (format JSON)",
@@ -956,6 +1002,7 @@
"Conditions (AND)": "Conditions (ET)",
"Confidence": "Confiance",
"Configuration": "Configuration",
+ "Configuration changes invalidate the previous test result.": "Les modifications de configuration invalident le résultat du test précédent.",
"Configuration File": "Fichier de configuration",
"Configuration for Creem payment integration": "Configuration pour l'intégration de paiement Creem",
"Configuration for Epay payment integration": "Configuration pour l'intégration de paiement Epay",
@@ -991,6 +1038,7 @@
"Configure Waffo payment aggregation platform integration": "Configurer l'intégration de la plateforme d'agrégation de paiement Waffo",
"Configure your account behavior preferences": "Configurer les préférences de comportement de votre compte",
"Configure your account preferences and integrations": "Configurer les préférences et les intégrations de votre compte",
+ "Configured": "Configuré",
"Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.": "Enregistré comme JSON PayMethods. La valeur type décide du flux de paiement utilisé : stripe pour Stripe, waffo_pancake pour Waffo Pancake, et les autres valeurs sont envoyées à Epay comme paramètre type.",
"Configured routes and latency checks": "Routes configurées et contrôles de latence",
"Confirm": "Confirmer",
@@ -1029,6 +1077,7 @@
"Connect through OpenAI, Claude, Gemini, and other compatible API routes": "Connectez-vous via OpenAI, Claude, Gemini et d'autres routes API compatibles",
"Connected to io.net service normally.": "Connexion au service io.net réussie.",
"Connection closed": "Connexion fermée",
+ "Connection details": "Détails de connexion",
"Connection error": "Erreur de connexion",
"Connection failed": "Connexion échouée",
"Connection info detected in clipboard": "Infos de connexion détectées dans le presse-papiers",
@@ -1059,7 +1108,26 @@
"Continue with OIDC": "Continuer avec OIDC",
"Continue with Telegram": "Continuer avec Telegram",
"Continue with WeChat": "Continuer avec WeChat",
+ "Continuous failure time before automatic deletion.": "Durée d’échec continu avant la suppression automatique.",
"Contract review, compliance, summarisation": "Revue de contrats, conformité, résumé",
+ "Contribute": "Contribuer",
+ "Contribute a channel": "Contribuer un canal",
+ "Contribution approved": "Contribution approuvée",
+ "Contribution channel connection settings are read-only here. Submit sensitive changes through channel contribution review; only tag, priority, and weight can be edited.": "Les paramètres de connexion d'un canal contribué sont en lecture seule ici. Soumettez les modifications sensibles via la révision des contributions ; seuls le tag, la priorité et le poids sont modifiables.",
+ "Contribution deleted": "Contribution supprimée",
+ "Contribution details": "Détails de la contribution",
+ "Contribution details are incomplete": "Les détails de la contribution sont incomplets",
+ "Contribution draft saved": "Brouillon de contribution enregistré",
+ "Contribution eligibility": "Admissibilité des contributions",
+ "Contribution rejected": "Contribution rejetée",
+ "Contribution review": "Examen de la contribution",
+ "Contribution settings saved": "Paramètres de contribution enregistrés",
+ "Contribution settings unavailable": "Paramètres de contribution indisponibles",
+ "Contribution submitted for review": "Contribution envoyée pour examen",
+ "Contribution withdrawn": "Contribution retirée",
+ "Contributions will appear here when users create drafts.": "Les contributions apparaîtront ici lorsque les utilisateurs créeront des brouillons.",
+ "Contributor": "Contributeur",
+ "Control eligibility, routing defaults, health removal, rewards, and the agreement.": "Gérez l’admissibilité, le routage par défaut, la suppression pour indisponibilité, les récompenses et l’accord.",
"Control which models are exposed and which groups may use them.": "Contrôlez les modèles exposés et les groupes autorisés à les utiliser.",
"Controls how much the model thinks before answering": "Contrôle la quantité de raisonnement avant la réponse",
"Controls randomness and creativity": "Contrôle le hasard et la créativité",
@@ -1198,6 +1266,7 @@
"Current Billing": "Facturation actuelle",
"Current Cache Size": "Taille actuelle du cache",
"Current domain": "Domaine actuel",
+ "Current draft is saved": "Le brouillon actuel est enregistré",
"Current email: {{email}}. Enter a new email to change.": "E-mail actuel : {{email}}. Saisissez un nouvel e-mail pour le modifier.",
"Current key": "Clé actuelle",
"Current legacy JSON is invalid, cannot append": "Le JSON ancien format actuel n'est pas valide, impossible d'ajouter",
@@ -1206,6 +1275,7 @@
"Current Password": "Mot de passe actuel",
"Current Price": "Prix actuel",
"Current quota": "Quota actuel",
+ "Current reward rate": "Taux de récompense actuel",
"Current Value": "Valeur actuelle",
"Current version": "Version actuelle",
"Current:": "Actuel :",
@@ -1270,6 +1340,7 @@
"Default Bearer": "Bearer par defaut",
"Default Collapse Sidebar": "Réduire la barre latérale par défaut",
"Default consumption chart": "Graphique de consommation par défaut",
+ "Default is 0 until routing is intentionally enabled.": "La valeur reste 0 par défaut jusqu’à l’activation explicite du routage.",
"Default Max Tokens": "Jetons max par défaut",
"Default model call chart": "Graphique d'appels de modèle par défaut",
"Default range": "Plage par défaut",
@@ -1295,6 +1366,7 @@
"Delete all stale": "Supprimer toutes les expirées",
"Delete Auto-Disabled": "Supprimer les désactivés automatiquement",
"Delete Channel": "Supprimer le canal",
+ "Delete channel contribution?": "Supprimer la contribution de canal ?",
"Delete Channels?": "Supprimer les canaux ?",
"Delete condition": "Supprimer la condition",
"Delete Condition": "Supprimer la condition",
@@ -1359,6 +1431,7 @@
"Describe": "Décrire",
"Describe this model...": "Décrire ce modèle...",
"Describe this vendor...": "Décrire ce fournisseur...",
+ "Describe what must be corrected": "Décrivez les éléments à corriger",
"Description": "Description",
"Description is required": "La description est requise",
"Designed and Developed by": "Conçu et développé par",
@@ -1385,6 +1458,7 @@
"Disable": "Désactiver",
"Disable 2FA": "Désactiver la 2FA",
"Disable All": "Désactiver tout",
+ "Disable Models with No Channels?": "Désactiver les modèles sans canaux disponibles ?",
"Disable on failure": "Désactiver en cas d'échec",
"Disable selected channels": "Désactiver les canaux sélectionnés",
"Disable selected models": "Désactiver les modèles sélectionnés",
@@ -1457,6 +1531,7 @@
"Downgrade to pre-purchase group": "Rétrograder vers le groupe d'avant l'achat",
"Downgrade to this group after the subscription expires": "Rétrograder vers ce groupe après l'expiration de l'abonnement",
"Download": "Télécharger",
+ "Draft": "Brouillon",
"Drag {{group}} to reorder": "Faites glisser {{group}} pour réorganiser",
"Draw": "Dessin",
"Drawing": "Dessin",
@@ -1488,7 +1563,6 @@
"e.g. my-gitlab": "par ex. mon-gitlab",
"e.g. New API Console": "par ex. console New API",
"e.g. openid profile email": "par ex. openid profile email",
- "e.g. Requires level {{required}}; your current level is {{current}}": "ex. Niveau {{required}} requis ; votre niveau actuel est {{current}}",
"e.g. Suitable for light usage": "ex. Adapté à une utilisation légère",
"e.g. This request does not meet access policy": "ex. Cette requête ne satisfait pas la politique d'accès",
"e.g., 0.95": "par ex., 0.95",
@@ -1532,10 +1606,12 @@
"Edit": "Modifier",
"Edit {{title}}": "Modifier {{title}}",
"Edit all channels with tag:": "Modifier tous les canaux avec l'étiquette :",
+ "Edit and resubmit": "Modifier et renvoyer",
"Edit Announcement": "Modifier l'annonce",
"Edit API Shortcut": "Modifier le raccourci API",
"Edit billing ratios and user-selectable groups in one table.": "Modifiez les ratios de facturation et les groupes sélectionnables par les utilisateurs dans un seul tableau.",
"Edit Channel": "Modifier le canal",
+ "Edit channel contribution": "Modifier la contribution de canal",
"Edit channel routing": "Modifier le routage des canaux",
"Edit chat preset": "Modifier le préréglage de chat",
"Edit discount tier": "Modifier le palier de remise",
@@ -1596,6 +1672,7 @@
"Enable io.net model deployment service in console": "Activer le service de déploiement de modèles io.net dans la console",
"Enable LinuxDO OAuth": "Activer LinuxDO OAuth",
"Enable model performance metrics": "Activer les indicateurs de performance des modèles",
+ "Enable Models with Recovered Channels?": "Activer les modèles aux canaux rétablis ?",
"Enable OIDC": "Activer OIDC",
"Enable or disable this channel": "Activer ou désactiver ce canal",
"Enable or disable this model": "Activer ou désactiver ce modèle",
@@ -1624,6 +1701,7 @@
"Enabled all channels with tag: {{tag}}": "Tous les canaux avec le tag {{tag}} ont été activés",
"Enabled channels with tag {{tag}}": "Canaux avec l'étiquette {{tag}} activés",
"Enabled Status": "Statut activé",
+ "Enabling this setting immediately disables all currently enabled models with no available channels. Turning it off later will not automatically re-enable those models. Continue?": "L’activation de ce paramètre désactivera immédiatement tous les modèles actifs sans canal disponible. Le désactiver ensuite ne réactivera pas automatiquement ces modèles. Continuer ?",
"Enabling...": "Activation en cours...",
"Encourages introducing new topics": "Encourage l'introduction de nouveaux sujets",
"Encourages new topics": "Encourage de nouveaux sujets",
@@ -1635,6 +1713,7 @@
"Endpoint": "Point d'accès",
"Endpoint config": "Configuration de l'endpoint",
"Endpoint Configuration": "Configuration du point de terminaison",
+ "Endpoint type": "Type de point de terminaison",
"Endpoint Type": "Type de point de terminaison",
"Endpoint, provider-specific settings, and credentials.": "Point de terminaison, paramètres propres au fournisseur et identifiants.",
"Endpoint:": "Point de terminaison :",
@@ -1650,8 +1729,10 @@
"Enter a positive integer": "Saisissez un entier positif",
"Enter a positive or negative amount to adjust the quota": "Saisir un montant positif ou négatif pour ajuster le quota",
"Enter a react-icons component name. Invalid names show no icon.": "Saisissez le nom d’un composant react-icons. Les noms invalides n’affichent aucune icône.",
+ "Enter a valid API endpoint": "Saisissez un point de terminaison API valide",
"Enter a valid email or leave blank": "Entrez un e-mail valide ou laissez vide",
"Enter a value and press Enter": "Saisir une valeur et appuyer sur Entrée",
+ "Enter a whole number within the allowed range": "Saisissez un nombre entier dans la plage autorisée",
"Enter amount in {{currency}}": "Entrez le montant en {{currency}}",
"Enter amount in tokens": "Entrez le montant en tokens",
"Enter announcement content (supports Markdown & HTML)": "Saisir le contenu de l'annonce (prend en charge Markdown et HTML)",
@@ -1689,6 +1770,7 @@
"Enter password (8-20 characters)": "Saisir le mot de passe (8-20 caractères)",
"Enter quota in {{currency}}": "Saisir le quota en {{currency}}",
"Enter quota in tokens": "Saisir le quota en tokens",
+ "Enter reward quota": "Saisissez le quota de récompense",
"Enter secret key": "Saisir la clé secrète",
"Enter system prompt (user prompt takes priority)": "Saisir l'invite système (l'invite utilisateur est prioritaire)",
"Enter tag name (optional)": "Saisir le nom du tag (facultatif)",
@@ -1699,6 +1781,7 @@
"Enter the full URL of your Gotify server": "Saisir l'URL complète de votre serveur Gotify",
"Enter the knowledge base ID": "Saisir l'ID de la base de connaissances",
"Enter the path before /suno, usually just the domain": "Saisir le chemin avant /suno, généralement juste le domaine",
+ "Enter the provider API key": "Saisissez la clé API du fournisseur",
"Enter the quota amount in {{currency}}": "Entrez le montant du quota en {{currency}}",
"Enter the quota amount in tokens": "Saisir le montant du quota en tokens",
"Enter the verification code": "Saisir le code de vérification",
@@ -1738,8 +1821,8 @@
"Error Type (optional)": "Type d'erreur (optionnel)",
"Estimated cost": "Coût estimé",
"Estimated quota cost": "Coût de quota estimé",
- "Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.": "Évalue les champs de la réponse d'informations utilisateur du fournisseur. Les conditions et groupes imbriqués utilisent la logique and/or.",
"Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.": "Chaque nom de groupe du tableau tarifaire peut être utilisé à deux endroits : sur un utilisateur (groupe d’utilisateurs, attribué par les admins) et sur un jeton (groupe de jetons, choisi à la création du jeton). Même ensemble de noms, deux rôles différents.",
+ "Every model has administrator pricing": "Chaque modèle dispose d’un tarif administrateur",
"Every other device will lose access immediately. This device will remain signed in.": "Tous les autres appareils perdront immédiatement l’accès. Cet appareil restera connecté.",
"Everything configured for this group, in one place.": "Toute la configuration de ce groupe, au même endroit.",
"Exact": "Exact",
@@ -1802,6 +1885,9 @@
"Failed to {{action}} user": "Échec de l'action {{action}} sur l'utilisateur",
"Failed to adjust quota": "Échec de l'ajustement du quota",
"Failed to apply overwrite.": "Échec de l'application de l'écrasement.",
+ "Failed to approve contribution": "Échec de l’approbation de la contribution",
+ "Failed to batch disable models": "Échec de la désactivation groupée des modèles",
+ "Failed to batch enable models": "Échec de l’activation groupée des modèles",
"Failed to bind email": "Échec de la liaison de l'e-mail",
"Failed to change password": "Échec du changement de mot de passe",
"Failed to check for updates": "Échec de la vérification des mises à jour",
@@ -1827,6 +1913,7 @@
"Failed to delete API key": "Échec de la suppression de la clé API",
"Failed to delete API keys": "Échec de la suppression des Clés API",
"Failed to delete channel": "Échec de la suppression du canal",
+ "Failed to delete contribution": "Échec de la suppression de la contribution",
"Failed to delete disabled channels": "Échec de la suppression des canaux désactivés",
"Failed to delete failed models": "Échec de la suppression des modèles en échec",
"Failed to delete group": "Échec de la suppression du groupe",
@@ -1864,6 +1951,10 @@
"Failed to load": "Échec du chargement",
"Failed to load API keys": "Échec du chargement des Clés API",
"Failed to load billing history": "Échec du chargement de l'historique de facturation",
+ "Failed to load contribution": "Échec du chargement de la contribution",
+ "Failed to load contribution rewards": "Échec du chargement des récompenses de contribution",
+ "Failed to load contribution settings": "Échec du chargement des paramètres de contribution",
+ "Failed to load contributions": "Échec du chargement des contributions",
"Failed to load enabled models": "Échec du chargement des modèles activés",
"Failed to load home page content": "Échec du chargement du contenu de la page d'accueil",
"Failed to load image": "Échec du chargement de l'image",
@@ -1886,6 +1977,7 @@
"Failed to refresh credential": "Échec de l’actualisation des identifiants",
"Failed to regenerate backup codes": "Échec de la régénération des codes de sauvegarde",
"Failed to register Passkey": "Échec de l'enregistrement du Passkey",
+ "Failed to reject contribution": "Échec du rejet de la contribution",
"Failed to remove Passkey": "Échec de la suppression de la Passkey",
"Failed to repair channel consistency": "Échec de la réparation de la cohérence des canaux",
"Failed to reset 2FA": "Échec de la réinitialisation de la 2FA",
@@ -1895,6 +1987,8 @@
"Failed to save": "Échec de la sauvegarde",
"Failed to save announcements": "Échec de la sauvegarde des annonces",
"Failed to save API info": "Échec de l'enregistrement des informations API",
+ "Failed to save contribution draft": "Échec de l’enregistrement du brouillon",
+ "Failed to save contribution settings": "Échec de l’enregistrement des paramètres de contribution",
"Failed to save FAQ": "Échec de la sauvegarde de la FAQ",
"Failed to save Uptime Kuma groups": "Échec de la sauvegarde des groupes Uptime Kuma",
"Failed to search API keys": "Échec de la recherche des Clés API",
@@ -1911,16 +2005,19 @@
"Failed to start Discord login": "Échec du démarrage de la connexion Discord",
"Failed to start GitHub login": "Échec du démarrage de la connexion GitHub",
"Failed to start LinuxDO login": "Échec du démarrage de la connexion LinuxDO",
+ "Failed to start model tests": "Échec du démarrage des tests de modèles",
"Failed to start OIDC login": "Échec du démarrage de la connexion OIDC",
"Failed to start Passkey login": "Impossible de démarrer la connexion Passkey",
"Failed to start Passkey registration": "Échec du démarrage de l'enregistrement de la Passkey",
"Failed to start Telegram binding": "Impossible de démarrer l’association Telegram",
"Failed to start testing all channels": "Échec du démarrage du test de tous les canaux",
"Failed to start verification": "Impossible de démarrer la vérification",
+ "Failed to submit contribution": "Échec de l’envoi de la contribution",
"Failed to sync prices": "Échec de la synchronisation des prix",
"Failed to sync ratios": "Échec de la synchronisation des ratios",
"Failed to test all channels": "Échec du test de tous les canaux",
"Failed to test channel": "Échec du test du canal",
+ "Failed to transfer rewards": "Échec du transfert des récompenses",
"Failed to update all balances": "Échec de la mise à jour de tous les soldes",
"Failed to update API key": "Échec de la mise à jour de la Clé API",
"Failed to update API key status": "Échec de la mise à jour du statut de la Clé API",
@@ -1935,7 +2032,9 @@
"Failed to update settings": "Échec de la mise à jour des paramètres",
"Failed to update tag": "Échec de la mise à jour de l'étiquette",
"Failed to update user": "Échec de la mise à jour de l'utilisateur",
+ "Failed to withdraw contribution": "Échec du retrait de la contribution",
"Failure keywords": "Mots-clés d'échec",
+ "Failure since": "Échec depuis",
"Fair": "Correct",
"Fallback": "Repli",
"Fallback base URL": "Base URL de fallback",
@@ -1955,9 +2054,12 @@
"Fetch available models for:": "Récupérer les modèles disponibles pour :",
"Fetch available models from upstream": "Récupérer les modèles disponibles en amont",
"Fetch from Upstream": "Récupérer depuis l'amont",
+ "Fetch models": "Récupérer les modèles",
"Fetch Models": "Récupérer les modèles",
+ "Fetch models or enter model IDs": "Récupérez les modèles ou saisissez leurs ID",
"Fetched {{count}} model(s) from upstream": "{{count}} modèle(s) récupéré(s) depuis l'amont",
"Fetched {{count}} models": "{{count}} modèles récupérés",
+ "Fetched and saved {{count}} models": "{{count}} modèles récupérés et enregistrés",
"Fetching prefill groups...": "Récupération des groupes de préremplissage...",
"Fetching upstream prices...": "Récupération des prix amont...",
"Fetching upstream ratios...": "Récupération des ratios amont...",
@@ -1978,10 +2080,6 @@
"Fill in the following info to create a new subscription plan": "Remplissez les informations suivantes pour créer un nouveau plan d'abonnement",
"Fill Related Models": "Remplir les modèles associés",
"Fill Template": "Remplir le modèle",
- "Fill template: level and active": "Insérer le modèle : niveau et état actif",
- "Fill template: level message": "Insérer le modèle : message de niveau",
- "Fill template: organization message": "Insérer le modèle : message d'organisation",
- "Fill template: organization or role": "Insérer le modèle : organisation ou rôle",
"Fill Templates": "Remplir les modèles",
"Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.": "Saisissez la valeur model complète du corps de requête client, par exemple gpt-4o ou gemini-2.5-flash. Séparez plusieurs modèles par des virgules.",
"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format": "Remplit thoughtSignature uniquement pour les canaux Gemini/Vertex utilisant le format OpenAI",
@@ -2092,6 +2190,7 @@
"Full Code": "Code complet",
"Full input length": "Longueur complète de l’entrée",
"Full layout": "Disposition complète",
+ "Full model test started": "Test complet des modèles démarré",
"Full width": "Pleine largeur",
"Function calling": "Appel de fonction",
"Functions": "Fonctions",
@@ -2122,7 +2221,9 @@
"Get started": "Commencer",
"Get Started": "Commencer",
"GitHub": "GitHub",
+ "Give the contributor a clear reason they can address before resubmitting.": "Indiquez clairement au contributeur ce qu’il doit corriger avant de renvoyer.",
"Give the group a recognizable name and optional description.": "Donnez au groupe un nom reconnaissable et une description facultative.",
+ "Give this contribution a recognizable name": "Donnez un nom reconnaissable à cette contribution",
"Give this group a recognizable name.": "Donnez un nom reconnaissable à ce groupe.",
"Global configuration and administrative tools.": "Configuration globale et outils d'administration.",
"Global Coverage": "Couverture mondiale",
@@ -2166,6 +2267,7 @@
"Group details": "Détails du groupe",
"Group identifier": "Identifiant du groupe",
"Group is required": "Le groupe est requis",
+ "Group must not exceed 64 characters": "Le groupe ne doit pas dépasser 64 caractères",
"Group name": "Nom du groupe",
"Group Name": "Nom du groupe",
"Group name cannot be changed when editing.": "Le nom du groupe ne peut pas être modifié lors de la modification.",
@@ -2205,6 +2307,8 @@
"Header Value (supports string or JSON mapping)": "Valeur de l'en-tête (chaîne ou mappage JSON)",
"header. Anthropic-formatted endpoints accept the": ". Les points de terminaison au format Anthropic acceptent à la place",
"Health": "Santé",
+ "Health check interval (minutes)": "Intervalle de contrôle de santé (minutes)",
+ "Health checks continue while the contributed channel is active.": "Les contrôles de santé continuent tant que le canal contribué est actif.",
"Healthy": "Normal",
"Hidden": "Masqué",
"Hidden — verify to reveal": "Masqué — vérifiez pour révéler",
@@ -2224,6 +2328,7 @@
"High-risk status code retry risk check 4": "J'accepte volontairement les risques pour la stabilité du système, notamment les délais d'attente sévères côté client et les pannes possibles du service, et j'assume toute accumulation de requêtes ou indisponibilité qui en résulterait.",
"High-risk status code retry risk disclaimer": "### ⚠️ Opération à haut risque : avertissement et clause de non-responsabilité pour la relance des codes 504/524\n\nPar défaut, ce projet ne relance pas les codes `400` (requête incorrecte), `504` (délai d'attente de la passerelle) et `524` (délai d'attente dépassé). Les codes 504 et 524 signifient généralement que **la requête est bien parvenue au service IA en amont et que le traitement avait commencé, mais que la connexion s'est fermée parce que le traitement en amont a pris trop de temps**. Cela indique généralement un goulot d'étranglement du service en amont.\n\nActiver la redirection ou la relance pour ces codes de délai d'attente est une **opération à risque extrêmement élevé**. Avant de l'activer, vous devez lire attentivement et comprendre les conséquences suivantes :\n\n#### 1. Risques principaux (à lire attentivement)\n\n1. 💸 Facturation double ou multiple : la plupart des fournisseurs d'IA en amont **facturent quand même** les requêtes dont le traitement a commencé mais qui ont été interrompues par un délai réseau (504/524). Une relance envoie une toute nouvelle requête en amont et peut entraîner une **facturation double ou multiple**.\n2. ⏳ Délai d'attente sévère côté client : lorsqu'une requête a déjà expiré, les relances peuvent multiplier la latence totale et provoquer des délais sévères ou inacceptables pour le client final.\n3. 💥 Accumulation de requêtes et panne du service : les relances forcées occupent plus longtemps les threads et les connexions. En cas de forte concurrence, cela peut provoquer une importante **accumulation de requêtes**, épuiser les ressources, déclencher des défaillances en cascade et faire tomber le proxy.\n\n#### 2. Acceptation des risques\n\nSi vous choisissez malgré tout d'activer cette fonction, vous reconnaissez les éléments suivants :",
"Higher priority channels are selected first": "Les canaux de priorité plus élevée sont sélectionnés en premier",
+ "Higher values are selected first.": "Les valeurs élevées sont sélectionnées en premier.",
"Historical Usage": "Utilisation historique",
"History of MjProxy-style image tasks.": "Historique des tâches d'images style MjProxy.",
"Hit criteria: If cached tokens exist in usage, it counts as a hit.": "Critère de hit : si des tokens en cache existent dans l'utilisation, cela compte comme un hit.",
@@ -2245,6 +2350,7 @@
"How It Works": "Comment ça marche",
"How model mapping works": "Fonctionnement du mappage des modèles",
"How much to charge for each US dollar of balance (Epay)": "Montant à facturer pour chaque dollar US de solde (Epay)",
+ "How often contributed channels are checked.": "Fréquence de contrôle des canaux contribués.",
"How this model name should match requests": "Comment ce nom de modèle doit correspondre aux requêtes",
"How to deliver the resulting image": "Comment délivrer l'image résultante",
"How to get an io.net API Key": "Comment obtenir une clé API io.net",
@@ -2280,6 +2386,7 @@
"https://your-server.example.com": "https://votre-serveur.example.com",
"Human-readable name shown to users during Passkey prompts.": "Nom lisible par l'homme affiché aux utilisateurs lors des invites de clé d'accès (Passkey).",
"I confirm enabling high-risk retry": "Je confirme l'activation de la relance à haut risque",
+ "I have read and agree to": "J’ai lu et j’accepte",
"I have read and agree to the": "J'ai lu et j'accepte les",
"I have read and understood the above compliance reminder": "J’ai lu et compris le rappel de conformité ci-dessus",
"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.": "J’ai lu et compris le rappel de conformité ci-dessus, je reconnais les risques juridiques associés et confirme assumer la responsabilité juridique liée au déploiement, à l’exploitation et à la facturation.",
@@ -2348,6 +2455,7 @@
"Input tokens": "Jetons d’entrée",
"Input Tokens": "Tokens d'entrée",
"Inset": "Encastré",
+ "Inspect drafts, approved channels, rejected revisions, and health removals.": "Consultez les brouillons, canaux approuvés, révisions rejetées et suppressions pour indisponibilité.",
"Inspect requests, errors, and billing details": "Inspecter les requêtes, les erreurs et les détails de facturation",
"Inspect user prompts": "Inspecter les invites utilisateur",
"Instance": "Instance",
@@ -2456,9 +2564,13 @@
"Last 30 days uptime": "Disponibilité 30 derniers jours",
"Last active {{time}} · Expires {{expires}}": "Dernière activité {{time}} · Expire le {{expires}}",
"Last check time": "Dernière vérification",
+ "Last checked": "Dernier contrôle",
"Last detected addable models": "Derniers modèles ajoutables détectés",
+ "Last error": "Dernière erreur",
+ "Last failure": "Dernier échec",
"Last Login": "Dernière connexion",
"Last Seen": "Dernier signal",
+ "Last success": "Dernier succès",
"Last Tested": "Dernier testé",
"Last updated:": "Dernière mise à jour :",
"Last Used": "Dernière utilisation",
@@ -2475,6 +2587,7 @@
"Learn more": "En savoir plus",
"Learn more:": "En savoir plus :",
"Leave": "Quitter",
+ "Leave blank to keep the current key": "Laissez vide pour conserver la clé actuelle",
"Leave blank to keep the existing credential": "Laissez vide pour conserver l'identifiant existant",
"Leave blank to keep the existing key": "Laisser vide pour conserver la clé existante",
"Leave blank unless rotating the secret": "Laissez vide, sauf si vous faites pivoter le secret",
@@ -2505,6 +2618,7 @@
"Less than or equal": "Inférieur ou égal",
"Less Than or Equal": "Inférieur ou égal",
"License": "Licence",
+ "Lifetime earned": "Total gagné",
"Light": "Clair",
"Lightning Fast": "Extrêmement rapide",
"Limit period": "Période de limite",
@@ -2593,6 +2707,7 @@
"Manual Disabled": "Désactivé manuellement",
"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).": "Mapper les champs de la réponse des informations utilisateur vers les attributs utilisateur locaux. Supporte les chemins imbriqués (par exemple ocs.data.id).",
"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.": "Mapper les identifiants de modèle aux versions de l'API Gemini. Une entrée `default` s'applique lorsqu'aucune correspondance spécifique n'est trouvée.",
+ "Map public model IDs to the provider model IDs when needed.": "Associez les ID de modèles publics aux ID du fournisseur si nécessaire.",
"Map request model names to actual provider model names (JSON format)": "Mapper les noms de modèles de requête aux noms réels de modèles du fournisseur (format JSON)",
"Map response status codes (JSON format)": "Mapper les codes de statut de réponse (format JSON)",
"Map upstream status codes to different codes": "Mapper les codes de statut amont à différents codes",
@@ -2672,6 +2787,7 @@
"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.": "Créez une nouvelle paire ci-dessous, ou choisissez une paire existante plus bas. Cliquez sur Enregistrer lorsque vous êtes prêt.",
"Minute": "Minute",
"minutes": "minutes",
+ "Missing": "Manquant",
"Missing code": "Code manquant",
"Missing Models": "Modèles manquants",
"Missing user data from Passkey login response": "Données utilisateur manquantes de la réponse de connexion Passkey",
@@ -2701,6 +2817,7 @@
"Model enabled successfully": "Modèle activé avec succès",
"Model fixed pricing": "Tarification fixe du modèle",
"Model Group": "Groupe de modèles",
+ "Model health": "État des modèles",
"Model Limits": "Limites du modèle",
"Model Mapping": "Mappage de modèle",
"Model Mapping (JSON)": "Mappage de modèle (JSON)",
@@ -2786,6 +2903,7 @@
"Move {{group}} up": "Déplacer {{group}} vers le haut",
"Move a request header": "Déplacer un en-tête de requête",
"Move affiliate rewards to your main balance": "Transférer les récompenses d'affiliation vers votre solde principal",
+ "Move available contribution rewards into your wallet balance.": "Transférez les récompenses disponibles vers le solde de votre portefeuille.",
"Move fallback to end": "Mettre le repli à la fin",
"Move Field": "Déplacer le champ",
"Move Header": "Déplacer l'en-tête",
@@ -2818,6 +2936,7 @@
"Multipliers for recharge pricing based on user groups.": "Multiplicateurs pour la tarification de recharge basés sur les groupes d'utilisateurs.",
"Must be a valid URL": "Doit être une URL valide",
"Must be at least 8 characters": "Doit contenir au moins 8 caractères",
+ "My contributions": "Mes contributions",
"My Subscriptions": "Mes abonnements",
"my-status": "mon-statut",
"MySQL detected": "MySQL détecté",
@@ -2851,6 +2970,7 @@
"New API": "New API",
"New API <noreply@example.com>": "New API <noreply@example.com>",
"New API Project Repository:": "Dépôt du projet New API :",
+ "New contribution": "Nouvelle contribution",
"New Format Template": "Modèle nouveau format",
"New Group": "Nouveau groupe",
"New model": "Nouveau modèle",
@@ -2885,6 +3005,7 @@
"No app usage data available for this model.": "Aucune donnée d'utilisation d'application n'est disponible pour ce modèle.",
"No apps match the selected filters": "Aucune application ne correspond aux filtres",
"No Auth": "Sans auth",
+ "No auto-disabled models with recovered channels found": "Aucun modèle auto-désactivé avec canaux rétablis",
"No available groups in the global Auto order.": "Aucun groupe disponible dans l’ordre Auto global.",
"No available models": "Aucun modèle disponible",
"No available Web chat links": "Aucun lien de chat Web disponible",
@@ -2896,6 +3017,7 @@
"No changes": "Aucune modification",
"No changes made": "Aucune modification effectuée",
"No changes to save": "Aucune modification à enregistrer",
+ "No channel contributions yet": "Aucune contribution de canal",
"No channel selected": "Aucun canal sélectionné",
"No channel type found.": "Aucun type de canal trouvé.",
"No channels available. Create your first channel to get started.": "Aucun canal disponible. Créez votre premier canal pour commencer.",
@@ -2910,6 +3032,7 @@
"No console output": "Aucune sortie console",
"No containers": "Aucun conteneur",
"No content to copy": "Aucun contenu à copier",
+ "No contribution rewards yet": "Aucune récompense de contribution",
"No custom groups. Saving will inherit the complete global Auto order.": "Aucun groupe personnalisé. Après l’enregistrement, l’ordre Auto global complet sera hérité.",
"No custom OAuth providers configured yet.": "Aucun fournisseur OAuth personnalisé configuré pour le moment.",
"No data": "Aucune donnée",
@@ -2946,13 +3069,16 @@
"No Logs Found": "Aucun journal trouvé",
"No mappings configured. Click \"Add Row\" to get started.": "Aucun mappage configuré. Cliquez sur « Ajouter une ligne » pour commencer.",
"No matches found": "Aucune correspondance trouvée",
+ "No matching contributions": "Aucune contribution correspondante",
"No matching items": "Aucun élément correspondant",
+ "No matching models": "Aucun modèle correspondant",
"No matching results": "Aucun résultat correspondant",
"No matching rules": "Aucune règle correspondante",
"No matching token and channel usage was found.": "Aucune utilisation correspondante par jeton et canal n'a été trouvée.",
"No messages yet": "Pas encore de messages",
"No missing models found.": "Aucun modèle manquant trouvé.",
"No model found.": "Aucun modèle trouvé.",
+ "No model health observations": "Aucune observation de l’état des modèles",
"No model mappings configured. Click \"Add Mapping\" to get started.": "Aucun mappage de modèle configuré. Cliquez sur « Ajouter un mappage » pour commencer.",
"No model price changes to save": "Aucun changement de prix de modèle à sauvegarder",
"No models available": "Aucun modèle disponible",
@@ -2972,6 +3098,7 @@
"No models to add": "Aucun modèle à ajouter",
"No models to copy": "Aucun modèle à copier",
"No models to remove": "Aucun modèle à supprimer",
+ "No models with unavailable channels found": "Aucun modèle sans canaux disponibles trouvé",
"No models with unset prices": "Aucun modèle sans prix",
"No new models to add": "Aucun nouveau modèle à ajouter",
"No new models yet": "Pas encore de nouveaux modèles",
@@ -3021,6 +3148,7 @@
"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 test results": "Aucun résultat de test",
"No token found.": "Aucun jeton trouvé.",
"No tools configured": "Aucun outil configuré",
"No Upgrade": "Pas de mise à niveau",
@@ -3054,6 +3182,7 @@
"Not Equals": "Différent de",
"Not in pricing table": "Absent du tableau tarifaire",
"Not included": "Non inclus",
+ "Not required": "Non requis",
"Not set": "Non défini",
"Not Set": "Non défini",
"Not set yet": "Non défini",
@@ -3077,6 +3206,7 @@
"Number of tokens per unit quota": "Nombre de jetons par unité de quota",
"Number of top log probabilities returned per token": "Nombre de log-probabilités retournées par jeton",
"Number of users invited": "Nombre d'utilisateurs invités",
+ "OAuth": "OAuth",
"OAuth binding timed out. Please try again.": "La liaison OAuth a expiré. Veuillez réessayer.",
"OAuth binding window is no longer available": "La fenêtre d’association OAuth n’est plus disponible",
"OAuth callback URL": "URL de rappel OAuth",
@@ -3139,7 +3269,9 @@
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "Seuls les champs sélectionnés seront écrasés. Vous pouvez relancer l'assistant de synchronisation si de nouveaux conflits apparaissent.",
"Only successful requests": "Uniquement les requêtes réussies",
"Only successful requests count toward this limit.": "Seules les requêtes réussies comptent pour cette limite.",
+ "Only the connection details required for review are collected.": "Seules les informations de connexion nécessaires à l’examen sont collectées.",
"Only the last {{value}} log files will be retained; the rest will be deleted.": "Seuls les {{value}} derniers fichiers journaux seront conservés ; le reste sera supprimé.",
+ "Only these groups and provider types can be submitted.": "Seuls ces groupes et types de fournisseurs peuvent être envoyés.",
"Oops! Page Not Found!": "Oups ! Page introuvable !",
"Oops! Something went wrong": "Oups ! Quelque chose s'est mal passé",
"Open": "Ouvrir",
@@ -3150,6 +3282,7 @@
"Open in New Tab": "Ouvrir dans un nouvel onglet",
"Open menu": "Ouvrir le menu",
"Open release": "Ouvrir la version",
+ "Open review": "Ouvrir l’examen",
"Open source": "Open source",
"Open Source": "Open source",
"Open the io.net console API Keys page": "Ouvrir la page Clés API de la console io.net",
@@ -3247,6 +3380,7 @@
"Overwritten": "Écrasé",
"Page": "Page",
"Page {{current}} of {{total}}": "Page {{current}} sur {{total}}",
+ "Page {{page}} of {{pages}}": "Page {{page}} sur {{pages}}",
"PaLM": "PaLM",
"Pan": "Panoramique",
"Pancake": "Pancake",
@@ -3278,6 +3412,7 @@
"Pass when key is missing": "Accepter si la clé est absente",
"Pass-Through": "Transmission directe",
"Pass-through Headers (comma-separated or JSON array)": "En-têtes passthrough (séparés par des virgules ou tableau JSON)",
+ "Passed": "Réussi",
"Passive recovery only": "Récupération passive uniquement",
"Passkey": "Passkey",
"Passkey Authentication": "Authentification Passkey",
@@ -3348,6 +3483,7 @@
"Penalises repetition of frequent tokens": "Pénalise la répétition des jetons fréquents",
"pending": "en attente",
"Pending": "En attente",
+ "Pending review": "En attente d’examen",
"per": "par",
"Per 1K tokens": "Par 1K tokens",
"Per 1M tokens": "Par 1M tokens",
@@ -3679,6 +3815,7 @@
"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.",
+ "Recent transfers": "Transferts récents",
"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",
@@ -3750,7 +3887,10 @@
"Registry (optional)": "Registre (optionnel)",
"Registry secret": "Secret du registre",
"Registry username": "Nom d'utilisateur du registre",
+ "Reject": "Rejeter",
+ "Reject contribution": "Rejeter la contribution",
"Reject Reason": "Raison du rejet",
+ "Rejection reason": "Motif du rejet",
"Release details": "Détails de la version",
"Released": "Sorti",
"Relying Party Display Name": "Nom d'affichage de la partie de confiance",
@@ -3846,6 +3986,7 @@
"Required": "Requis",
"Required events:": "Événements requis :",
"Required provider, authentication, model, and group settings": "Paramètres requis de fournisseur, authentification, modèles et groupes",
+ "Required tests passed within the last 30 minutes": "Les tests requis ont réussi au cours des 30 dernières minutes",
"Required to expose MjProxy-style image generation to end users.": "Requis pour exposer la génération d'images style MjProxy aux utilisateurs finaux.",
"Rerank": "Reclasser",
"Reroll": "Relancer",
@@ -3889,6 +4030,7 @@
"Reset usage window": "Réinitialiser la fenêtre d’utilisation",
"Resets in:": "Réinitialise dans :",
"Resetting...": "Réinitialisation...",
+ "Resize column": "Redimensionner la colonne",
"Resolve Conflicts": "Résoudre les conflits",
"Resource Configuration": "Configuration des ressources",
"Resources": "Ressources",
@@ -3921,11 +4063,22 @@
"Revenue": "Revenu",
"Review & initialize": "Vérifier et initialiser",
"Review and sign out devices currently using your account.": "Consultez et déconnectez les appareils qui utilisent actuellement votre compte.",
+ "Review contributed channels and configure contribution policy.": "Examinez les canaux contribués et configurez la politique de contribution.",
+ "Review contributions": "Examiner les contributions",
"Review model rates before scaling traffic": "Consulter les tarifs des modèles avant d'augmenter le trafic",
+ "Review note": "Note d’examen",
+ "Review rejected": "Examen rejeté",
+ "Review status and per-model channel health history.": "Consultez l’état de l’examen et l’historique de santé du canal par modèle.",
"Review your payment details": "Vérifier vos détails de paiement",
"Review your purchase details before proceeding.": "Vérifiez les détails de votre achat avant de continuer.",
+ "Revision": "Révision",
"Revoke": "Révoquer",
"Revoke session?": "Révoquer cette session ?",
+ "Reward basis points": "Points de base de récompense",
+ "Reward ledger": "Registre des récompenses",
+ "Rewards": "Récompenses",
+ "Rewards are credited after billable requests use an approved channel.": "Les récompenses sont créditées après l’utilisation d’un canal approuvé par une requête facturable.",
+ "Rewards transferred to your wallet": "Récompenses transférées vers votre portefeuille",
"Rewards will be added directly to your balance": "Les récompenses seront ajoutées directement à votre solde",
"Rewrite callback URLs to the local server": "Réécrire les URLs de callback vers le serveur local",
"Right to Left": "De droite à gauche",
@@ -3946,6 +4099,7 @@
"Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.": "Les routes avec le même chemin d’entrée sont réparties par modèle client exact. Les requêtes non associées utilisent le repli final.",
"Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.": "Les routes avec le même chemin d’entrée correspondent aux noms exacts des modèles client. Séparez plusieurs modèles par des virgules et laissez vide uniquement le repli final.",
"Routing & Overrides": "Routage et surcharges",
+ "Routing and health": "Routage et santé",
"Routing Reliability": "Fiabilité du routage",
"Routing Strategy": "Stratégie de routage",
"Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.": "Les lignes sont les groupes d’utilisateurs, les colonnes les groupes de facturation. Les cellules vides utilisent le taux de base affiché en gris.",
@@ -3970,8 +4124,11 @@
"Rules JSON": "Règles JSON",
"Rules JSON must be an array": "Le JSON des règles doit être un tableau",
"Rules match the original model value from the client request body.": "Les règles correspondent à la valeur model originale du corps de la requête client.",
+ "Run admin test": "Lancer le test administrateur",
+ "Run an independent administrator test before approving this revision.": "Lancez un test administrateur indépendant avant d’approuver cette révision.",
"Run GC": "Exécuter le GC",
"Run tests for the selected models": "Exécuter les tests pour les modèles sélectionnés",
+ "Run the full model test before submitting.": "Lancez le test complet des modèles avant l’envoi.",
"running": "en cours",
"Running": "En cours",
"Runtime": "Environnement",
@@ -3990,6 +4147,7 @@
"Save chat settings": "Enregistrer les paramètres de chat",
"Save check-in settings": "Enregistrer les paramètres de connexion",
"Save Creem settings": "Enregistrer les paramètres Creem",
+ "Save draft": "Enregistrer le brouillon",
"Save drawing settings": "Enregistrer les paramètres de dessin",
"Save Epay settings": "Enregistrer les paramètres Epay",
"Save failed": "Échec de l'enregistrement",
@@ -4008,11 +4166,13 @@
"Save preview": "Aperçu de l’enregistrement",
"Save rate limits": "Enregistrer les limites de débit",
"Save sensitive words": "Enregistrer les mots sensibles",
+ "Save settings": "Enregistrer les paramètres",
"Save Settings": "Enregistrer les paramètres",
"Save sidebar modules": "Enregistrer les modules de la barre latérale",
"Save SMTP settings": "Enregistrer les paramètres SMTP",
"Save SSRF settings": "Enregistrer les paramètres SSRF",
"Save Stripe settings": "Enregistrer les paramètres Stripe",
+ "Save the draft, test every model, then submit it for review.": "Enregistrez le brouillon, testez chaque modèle, puis envoyez-le pour examen.",
"Save these backup codes in a safe place. Each code can only be used once.": "Enregistrez ces codes de secours dans un endroit sûr. Chaque code ne peut être utilisé qu'une seule fois.",
"Save these codes in a safe place. Each code can only be used once.": "Enregistrez ces codes dans un endroit sûr. Chaque code ne peut être utilisé qu'une seule fois.",
"Save this token now. You won't be able to view it again after closing this dialog.": "Enregistrez ce jeton maintenant. Vous ne pourrez plus le consulter après la fermeture de cette boîte de dialogue.",
@@ -4020,6 +4180,7 @@
"Save tool prices": "Enregistrer les prix des outils",
"Save Waffo Pancake settings": "Enregistrer les paramètres Waffo Pancake",
"Save Worker settings": "Enregistrer les paramètres Worker",
+ "Saved drafts and submitted channels will appear here.": "Les brouillons enregistrés et les canaux envoyés apparaîtront ici.",
"Saved successfully": "Enregistré avec succès",
"Saving...": "Enregistrement en cours...",
"Scan QR Code": "Scanner le code QR",
@@ -4089,15 +4250,20 @@
"Select all (filtered)": "Tout sélectionner (filtré)",
"Select all models": "Sélectionner tous les modèles",
"Select All Visible": "Sélectionner tout ce qui est visible",
+ "Select an allowed group": "Sélectionnez un groupe autorisé",
"Select an operation mode and enter the amount": "Sélectionnez un mode d'opération et entrez le montant",
"Select announcement type": "Sélectionner le type d'annonce",
+ "Select at least one allowed channel type": "Sélectionnez au moins un type de canal autorisé",
+ "Select at least one allowed group": "Sélectionnez au moins un groupe autorisé",
"Select at least one Auto group or restore global Auto.": "Sélectionnez au moins un groupe Auto ou restaurez l’Auto global.",
"Select at least one field to overwrite.": "Sélectionnez au moins un champ à écraser.",
+ "Select at least one model": "Sélectionnez au moins un modèle",
"Select at least one target model": "Sélectionnez au moins un modèle cible",
"Select at most {{max}} Auto groups": "Sélectionnez au maximum {{max}} groupes Auto",
"Select body font": "Sélectionner la police du corps de texte",
"Select border radius": "Sélectionner le rayon de bordure",
"Select channel type": "Sélectionner le type de canal",
+ "Select channel types": "Sélectionner les types de canaux",
"Select color preset": "Sélectionner un préréglage de couleur",
"Select content width": "Sélectionner la largeur du contenu",
"Select corner radius": "Sélectionner le rayon des coins",
@@ -4363,6 +4529,7 @@
"Structured output": "Sortie structurée",
"Submit": "Soumettre",
"Submit directly": "Soumettre directement",
+ "Submit for review": "Envoyer pour examen",
"Submit Result": "Soumettre le résultat",
"Submit Time": "Heure de soumission",
"Submitted": "Soumis",
@@ -4391,7 +4558,9 @@
"Successfully deleted {{count}} invalid redemption codes": "{{count}} code(s) d'échange invalide(s) supprimé(s) avec succès",
"Successfully deleted {{count}} model(s)": "{{count}} modèle(s) supprimé(s) avec succès",
"Successfully disabled {{count}} model(s)": "{{count}} modèle(s) désactivé(s) avec succès",
+ "Successfully disabled {{count}} model(s) with no available channels": "{{count}} modèle(s) sans canaux disponibles désactivé(s)",
"Successfully enabled {{count}} model(s)": "{{count}} modèle(s) activé(s) avec succès",
+ "Successfully enabled {{count}} model(s) with recovered channels": "{{count}} modèle(s) aux canaux rétablis activé(s)",
"Suffix": "Suffixe",
"Suffix Match": "Correspondance de suffixe",
"Summarize text": "Résumer le texte",
@@ -4403,7 +4572,6 @@
"Supported Applications": "Applications prises en charge",
"Supported Imagine Models": "Modèles Imagine pris en charge",
"Supported modalities": "Modalités prises en charge",
- "Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.": "Opérateurs pris en charge : eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Laissez vide pour autoriser tous les utilisateurs.",
"Supported parameters": "Paramètres pris en charge",
"Supported variables": "Variables supportées",
"Supports `-thinking`, `-thinking-": "Prend en charge `-thinking`, `-thinking-",
@@ -4497,12 +4665,14 @@
"Test {{count}} matching models": "Tester les {{count}} modèles correspondants",
"Test {{count}} selected": "Tester {{count}} sélectionné(s)",
"Test a model with a starter prompt, or write your own request below.": "Testez un modèle avec un prompt de départ, ou rédigez votre propre demande ci-dessous.",
+ "Test all": "Tout tester",
"Test all {{count}} models": "Tester les {{count}} modèles",
"Test All Channels": "Tester tous les canaux",
"Test Channel Connection": "Tester la connexion du canal",
"Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.": "Tester les canaux, actualiser les soldes et activer/désactiver des canaux individuellement, par lot ou par tag.",
"Test Connection": "Tester la connexion",
"Test connectivity for:": "Tester la connectivité pour :",
+ "Test expired": "Test expiré",
"Test failed": "Échec du test",
"Test interval (minutes)": "Intervalle de test (minutes)",
"Test Latency": "Tester la latence",
@@ -4512,6 +4682,8 @@
"Test selected models": "Tester les modèles sélectionnés",
"Testing all enabled channels started. Please refresh to see results.": "Test de tous les canaux activés démarré. Veuillez actualiser pour voir les résultats.",
"Testing...": "Test en cours...",
+ "Tests are starting...": "Démarrage des tests...",
+ "Tests failed": "Échec des tests",
"Text": "Texte",
"Text description of the desired image": "Description textuelle de l'image souhaitée",
"Text description of the desired video": "Description textuelle de la vidéo souhaitée",
@@ -4530,6 +4702,8 @@
"The binding will complete automatically after authorization": "La liaison se terminera automatiquement après l'autorisation",
"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.": "Le produit associé alimente les recharges de portefeuille : lorsqu’un utilisateur saisit un montant, new-api lance le paiement sur ce produit Pancake unique et remplace le prix pour la session, sans devoir précréer des SKU de 1 $, 5 $ ou 10 $.",
"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.": "La boutique associée est le conteneur parent de tous les produits Pancake que new-api crée depuis cette administration, y compris le produit de recharge de portefeuille et les produits de forfaits d’abonnement. Une seule boutique suffit ; choisissez-en une autre uniquement si vous gérez réellement des catalogues Pancake séparés.",
+ "The channel will leave review or service and can be edited before resubmission.": "Le canal quittera l’examen ou le service et pourra être modifié avant un nouvel envoi.",
+ "The contribution will be deleted and any linked channel will be removed from service.": "La contribution sera supprimée et tout canal associé sera retiré du service.",
"The deployment node that handled the requests": "Le nœud de déploiement ayant traité les requêtes",
"The effective domain for Passkey registration. Must match the current domain or be its parent domain.": "Le domaine effectif pour l'enregistrement de la clé d'accès. Doit correspondre au domaine actuel ou être son domaine parent.",
"The entered text does not match the required text.": "Le texte saisi ne correspond pas au texte requis.",
@@ -4537,12 +4711,14 @@
"The exact model identifier as used in API requests.": "L'identifiant exact du modèle tel qu'utilisé dans les requêtes API.",
"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.": "Les modèles suivants présentent des conflits de type de facturation (prix fixe vs facturation au ratio). Confirmez pour procéder aux changements.",
"The following models in the model redirect have not been added to the \"Models\" list and may fail during invocation due to missing available models:": "Les modèles suivants dans la redirection du modèle n'ont pas été ajoutés à la liste \"Modèles\" et peuvent échouer lors de l'invocation en raison de modèles disponibles manquants :",
+ "The linked contributed channel will be removed from service.": "Le canal contribué associé sera retiré du service.",
"The login session that started this Telegram binding is no longer valid.": "La session de connexion ayant lancé cette liaison Telegram n’est plus valide.",
"The mapped upstream model(s)": "Le(s) modèle(s) amont mappé(s)",
"The model that was requested": "Le modèle qui a été demandé",
"The model you're looking for doesn't exist.": "Le modèle que vous recherchez n'existe pas.",
"The name displayed across the application": "Le nom affiché dans l'application",
"The new token will only be shown once. Copy it and store it securely.": "Le nouveau jeton ne sera affiché qu’une seule fois. Copiez-le et conservez-le en lieu sûr.",
+ "The provider returned no models": "Le fournisseur n’a renvoyé aucun modèle",
"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations": "L'URL publique de votre serveur, utilisée pour les rappels OAuth, les webhooks et autres intégrations externes",
"The requested chat preset does not exist or has been removed.": "Le préréglage de discussion demandé n'existe pas ou a été supprimé.",
"The reset request stays disabled until a credit is available.": "La demande de réinitialisation reste désactivée tant qu’aucun crédit n’est disponible.",
@@ -4564,6 +4740,7 @@
"Theme preset": "Préréglage du thème",
"Theme Settings": "Paramètres du thème",
"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?": "Il y a à la fois des modèles à ajouter et à supprimer, mais vous n'avez sélectionné qu'un seul type. Confirmer l'envoi uniquement des éléments sélectionnés ?",
+ "There are no contributions waiting for review.": "Aucune contribution n’est en attente d’examen.",
"There is a rule for vip billed as premium → use its ratio 0.3": "Il existe une règle pour vip facturé sous premium → son taux 0,3 s’applique",
"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.": "Ces modèles restent encore sélectionnés mais ne figurent pas dans la liste renvoyée par l'amont ; les noms qui sont uniquement des clés sources de model_mapping sont exclus. Modifiez la sélection avant d'enregistrer.",
"These toggles affect whether certain request fields are passed through to the upstream provider.": "Ces bascules déterminent si certains champs de demande sont transmis au fournisseur en amont.",
@@ -4610,6 +4787,7 @@
"This site currently has {{count}} models enabled": "Ce site compte actuellement {{count}} modèles activés",
"This Telegram account is already bound.": "Ce compte Telegram est déjà lié.",
"This Telegram binding request has expired or has already been used.": "Cette demande de liaison Telegram a expiré ou a déjà été utilisée.",
+ "This test result is older than 30 minutes. Run all tests again before submitting.": "Ce résultat date de plus de 30 minutes. Relancez tous les tests avant l’envoi.",
"This tier catches any request that did not match earlier tiers.": "Ce palier récupère toute requête qui ne correspond à aucun palier précédent.",
"this token group": "ce groupe de jetons",
"This Uptime Kuma group will be removed from the list.": "Ce groupe Uptime Kuma sera retiré de la liste.",
@@ -4623,6 +4801,8 @@
"This will delete all": "Cela supprimera tout",
"This will delete all channel affinity cache entries still in memory.": "Cela supprimera toutes les entrées de cache d'affinité de canal encore en mémoire.",
"This will delete temporary cache files that have not been used for more than 10 minutes": "Cela supprimera les fichiers de cache temporaires inutilisés depuis plus de 10 minutes",
+ "This will disable all currently enabled models that have no available channels. Continue?": "Cela désactivera tous les modèles actuellement activés qui n’ont aucun canal disponible. Continuer ?",
+ "This will enable models that were auto-disabled by channel availability and now have recovered channels. Manually disabled models are not changed. Continue?": "Cela n’activera que les modèles auto-désactivés par la disponibilité des canaux et dont les canaux sont rétablis. Les modèles désactivés manuellement ne sont pas modifiés. Continuer ?",
"This will extend the deployment by the specified hours.": "Cela prolongera le déploiement du nombre d'heures spécifié.",
"This will immediately invalidate your existing access token. Any applications or scripts using it will stop working.": "Cela invalidera immédiatement votre jeton d'accès actuel. Les applications ou scripts qui l'utilisent cesseront de fonctionner.",
"This will permanently delete all manually and automatically disabled channels. This action cannot be undone.": "Cela supprimera définitivement tous les canaux désactivés manuellement et automatiquement. Cette action ne peut pas être annulée.",
@@ -4773,16 +4953,21 @@
"Total:": "Total :",
"TPM": "TPM",
"Track per-request consumption to power usage analytics. Keeping this on increases database writes.": "Suivre la consommation par requête pour l'analyse de l'utilisation. Garder ceci activé augmente les écritures en base de données.",
+ "Track review, availability, and deletion status for every channel.": "Suivez l’examen, la disponibilité et la suppression de chaque canal.",
"Track usage, costs and performance with real-time analytics": "Suivez l'utilisation, les coûts et les performances avec des analyses en temps réel",
"Tracked apps": "Applications suivies",
"Tracks current account base limits and additional metered usage on Codex upstream.": "Affiche les limites de base et l’utilisation supplémentaire (metered) du compte auprès de Codex en amont.",
"Trading insights, accounting, advisory": "Analyses de marché, comptabilité, conseil",
"Transfer": "Transférer",
+ "Transfer all": "Tout transférer",
+ "Transfer amount": "Montant du transfert",
"Transfer Amount": "Montant du transfert",
"Transfer failed": "Transfert échoué",
+ "Transfer rewards": "Transférer les récompenses",
"Transfer Rewards": "Transférer les récompenses",
"Transfer successful": "Transfert réussi",
"Transfer to Balance": "Transférer vers le solde",
+ "Transfer to wallet": "Transférer vers le portefeuille",
"Translation": "Traduction",
"Transparent Billing": "Facturation transparente",
"Trend": "Tendance",
@@ -4834,6 +5019,9 @@
"Unable to read clipboard": "Impossible de lire le presse-papiers",
"Unauthorized": "Non autorisé",
"Unauthorized Access": "Accès non autorisé",
+ "Unavailable": "Indisponible",
+ "Unavailable deletion threshold (hours)": "Seuil de suppression pour indisponibilité (heures)",
+ "Unavailable since": "Indisponible depuis",
"Unbind": "Dissocier",
"Unbind failed": "Échec de la dissociation",
"Unbound {{provider}}": "{{provider}} dissocié",
@@ -4861,6 +5049,7 @@
"Untitled": "Sans titre",
"Untrusted upstream data:": "Données amont non fiables :",
"Unused": "Inutilisé",
+ "Up to 100 unique models can be tested in one contribution.": "Une contribution peut tester jusqu’à 100 modèles uniques.",
"Up to 4 strings that stop generation": "Jusqu'à 4 chaînes qui arrêtent la génération",
"Update": "Mettre à jour",
"Update All Balances": "Mettre à jour tous les soldes",
@@ -4895,6 +5084,7 @@
"Updated a vendor": "Fournisseur mis à jour",
"Updated channel {{name}} (ID: {{id}})": "Canal {{name}} mis à jour (ID : {{id}})",
"Updated daily": "Mis à jour quotidiennement",
+ "Updated model statuses in batch": "Statuts des modèles mis à jour par lot",
"Updated successfully": "Mise à jour réussie",
"Updated system setting {{key}}": "Paramètre système {{key}} mis à jour",
"Updated user {{username}} (ID: {{id}})": "Utilisateur {{username}} mis à jour (ID : {{id}})",
@@ -4952,6 +5142,7 @@
"Usage logs": "Journaux d'utilisation",
"Usage Logs": "Journaux d'utilisation",
"Usage mode": "Mode d'utilisation",
+ "Usage reward": "Récompense d’utilisation",
"Usage-based": "Basé sur l'utilisation",
"USD": "USD",
"USD Exchange Rate": "Taux de change USD",
@@ -4978,6 +5169,7 @@
"Use the full-width table to scan prices, then select a row to edit it here.": "Parcourez les prix dans le tableau, puis sélectionnez une ligne pour la modifier ici.",
"Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.": "Utilisez le groupe défini sur le jeton. S’il n’en a pas, utilisez le groupe de l’utilisateur. Le groupe auto essaie l’ordre d’affectation automatique de haut en bas.",
"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.": "Utilisez le tableau des groupes tarifaires pour gérer le ratio et l’apparition du groupe dans la liste de création de jeton.",
+ "Use the provider base URL without a model-specific path.": "Utilisez l’URL de base du fournisseur sans chemin propre à un modèle.",
"Use this callback URL pattern when registering a custom OAuth provider.": "Utilisez ce modèle d'URL de rappel lors de l'enregistrement d'un fournisseur OAuth personnalisé.",
"Use this token for API authentication": "Utilisez ce jeton pour l'authentification API",
"Use your Passkey": "Utiliser votre clé d'accès (Passkey)",
@@ -5001,6 +5193,7 @@
"User Analytics": "Statistiques utilisateur",
"User Consumption Ranking": "Classement de consommation",
"User Consumption Trend": "Tendance de consommation",
+ "User contribution view": "Vue des contributions utilisateur",
"User created successfully": "Utilisateur créé avec succès",
"User dashboard and quota controls.": "Tableau de bord utilisateur et contrôles de quotas.",
"User deleted successfully": "Utilisateur supprimé avec succès",
@@ -5038,8 +5231,10 @@
"Users must wait for a successful drawing before upscales or variations.": "Les utilisateurs doivent attendre une génération réussie avant les upscales ou variations.",
"Users of vip, when billed as premium, pay ratio": "Les utilisateurs de vip, facturés sous premium, paient le taux",
"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.": "Les utilisateurs ne voient que les groupes marqués comme sélectionnables. Les groupes non sélectionnables peuvent toujours être attribués par les administrateurs.",
+ "Users review this exact content before every first submission or resubmission.": "Les utilisateurs consultent ce contenu exact avant chaque premier envoi ou nouvel envoi.",
"uses": "utilisations",
"Using the complete global Auto order ({{count}} groups)": "Utilisation de l’ordre Auto global complet ({{count}} groupes)",
+ "Validation and submission": "Validation et envoi",
"Validity": "Validité",
"Validity Period": "Période de validité",
"Value": "Valeur",
@@ -5074,6 +5269,7 @@
"Verification scope is missing": "La portée de vérification est manquante",
"Verify": "Vérifier",
"Verify and Sign In": "Vérifier et se connecter",
+ "Verify every current revision independently before approval.": "Vérifiez indépendamment chaque révision actuelle avant de l’approuver.",
"Verify routing with Playground or your client": "Vérifiez le routage avec Playground ou votre client",
"Verify Setup": "Vérifier la configuration",
"Verify to view channel key": "Vérifier pour afficher la clé du canal",
@@ -5094,6 +5290,7 @@
"View all currently available models": "Voir tous les modèles actuellement disponibles",
"View channel lists and details without secrets.": "Afficher les listes et détails des canaux sans secrets.",
"View channel secrets": "Voir les secrets des canaux",
+ "View contribution details": "Voir les détails de la contribution",
"View detailed information about this user including balance, usage statistics, and invitation details.": "Afficher des informations détaillées sur cet utilisateur, y compris le solde, les statistiques d'utilisation et les détails d'invitation.",
"View details": "Voir les détails",
"View document": "Afficher le document",
@@ -5150,6 +5347,7 @@
"Wallet Management": "Gestion du portefeuille",
"Wallet management and personal preferences.": "Gestion du portefeuille et préférences personnelles.",
"Wallet Only": "Portefeuille uniquement",
+ "Wallet transfer": "Transfert vers le portefeuille",
"Warning": "Avertissement",
"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.": "Avertissement : L'URL de base ne doit pas se terminer par /v1. La nouvelle API le gérera automatiquement. Cela peut causer des échecs de requêtes.",
"Warning: Disabling 2FA will make your account less secure.": "Avertissement : La désactivation de la 2FA rendra votre compte moins sécurisé.",
@@ -5218,6 +5416,9 @@
"Wire encoding for the embedding vectors": "Encodage filaire pour les vecteurs",
"with conflicts": "avec des conflits",
"with the API key from your token settings.": "par la clé API de votre page de jetons.",
+ "Withdraw": "Retirer",
+ "Withdraw channel contribution?": "Retirer la contribution de canal ?",
+ "Withdraw contribution": "Retirer la contribution",
"Without additional conditions, only the type above is used for pruning.": "Sans conditions supplémentaires, seul le type ci-dessus est utilisé pour le nettoyage.",
"Worked example": "Exemple détaillé",
"Worker Access Key": "Clé d'accès du Worker",
diff --git a/web/src/i18n/locales/ja.json b/web/src/i18n/locales/ja.json
index dc72689c0bdc..a4558428add2 100644
--- a/web/src/i18n/locales/ja.json
+++ b/web/src/i18n/locales/ja.json
@@ -61,6 +61,7 @@
"{{field}} updated to {{value}}": "{{field}} を {{value}} に更新しました",
"{{field}} updated to {{value}} for tag: {{tag}}": "タグ「{{tag}}」の {{field}} を {{value}} に更新しました",
"{{method}} {{route}}": "{{method}} {{route}}",
+ "{{milliseconds}} ms": "{{milliseconds}} ミリ秒",
"{{modality}} not supported": "{{modality}} はサポートされていません",
"{{modality}} supported": "{{modality}} をサポート",
"{{n}} model(s) selected": "{{n}} 件のモデルを選択済み",
@@ -98,6 +99,7 @@
"1. Create an application in your Gotify server": "1. Gotifyサーバーでアプリケーションを作成します",
"10 / page": "10 / ページ",
"100 / page": "100 / ページ",
+ "100 basis points equals 1% of billed quota.": "100ベーシスポイントは請求クォータの1%です。",
"14 Days": "14日",
"192.168.1.1
10.0.0.0/8": "192.168.1.1
10.0.0.0/8",
"1M": "1M",
@@ -118,9 +120,11 @@
"7 days ago": "7日前",
"80,443,8080": "80,443,8080",
"A billing multiplier. Lower ratios mean lower API call costs.": "課金倍率です。倍率が低いほど API 呼び出しコストは低くなります。",
+ "A contribution can contain at most 100 models": "1件の提供に含められるモデルは最大100個です",
"A focused home for keys, balance, routing, and service health.": "キー、残高、ルーティング、サービス状態を集約したホームです。",
"About": "このサービスについて",
"About {{days}} days left": "約 {{days}} 日分",
+ "Accept the channel contribution agreement": "チャネル提供規約に同意",
"Accept Unpriced Models": "価格設定されていないモデルを許可",
"Accepts a JSON array of model identifiers that support the Imagine API.": "Imagine APIをサポートするモデル識別子のJSON配列を受け入れます。",
"Accepts comma-separated status codes and inclusive ranges.": "カンマ区切りのステータスコードと包含範囲を受け入れます。",
@@ -167,6 +171,7 @@
"Add a new model to the system by providing the necessary information.": "必要な情報を提供してシステムに新しいモデルを追加してください。",
"Add a new user by providing necessary info.": "必要な情報を提供して新しいユーザーを追加します。",
"Add a new vendor to the system": "システムに新しいベンダーを追加",
+ "Add an allowed group": "許可グループを追加",
"Add an extra layer of security to your account": "アカウントにセキュリティの追加レイヤーを追加します",
"Add and submit": "追加して送信",
"Add Announcement": "お知らせを追加",
@@ -244,6 +249,8 @@
"Administer user accounts and roles.": "ユーザーアカウントとロールを管理します。",
"Administrator account": "管理者アカウント",
"Administrator username": "管理者ユーザー名",
+ "Administrator verification": "管理者検証",
+ "Administrator verification started": "管理者検証を開始しました",
"Advance next reset time": "次回リセット時刻を進める",
"Advanced": "高度な設定",
"Advanced Configuration": "詳細設定",
@@ -272,6 +279,12 @@
"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.": "50以上のAIプロバイダーを統一APIで集約。アクセス管理、コスト追跡、スケーリングを簡単に。",
"Aggregation bucket": "集計バケット",
"AGPL v3.0 License": "AGPL v3.0ライセンス",
+ "Agreement content is required": "規約内容は必須です",
+ "Agreement Markdown": "規約Markdown",
+ "Agreement version": "規約バージョン",
+ "Agreement version is required": "規約バージョンは必須です",
+ "Agreement version must not exceed 64 characters": "規約バージョンは64文字以内にしてください",
+ "Agreement version: {{version}}": "規約バージョン:{{version}}",
"AI Application Infrastructure Foundation": "AI アプリケーションのインフラ基盤",
"AI model testing environment": "AIモデルテスト環境",
"AI models": "AIモデル",
@@ -287,6 +300,7 @@
"All API tokens": "すべての API キー",
"All categories": "すべてのカテゴリ",
"All conditions must match before this tier is used.": "この段階を使用するには、すべての条件に一致する必要があります。",
+ "All contributions": "すべての提供",
"All edits are overwrite operations. Leave fields empty to keep current values unchanged.": "すべての編集は上書き操作です。現在の値を変更しないままにするには、フィールドを空のままにしてください。",
"All files exceed the maximum size.": "すべてのファイルが最大サイズを超えています。",
"All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.": "すべてのグループ名はここで管理します。倍率はこのグループとして課金される呼び出しに適用され、チャージ倍率はこのグループに所属するユーザーに適用されます。",
@@ -302,6 +316,7 @@
"All Sync Status": "すべての同期状態",
"All systems operational": "すべて正常稼働中",
"All Tags": "すべてのタグ",
+ "All tests passed": "すべてのテストに合格",
"All Types": "すべてのタイプ",
"All upstream data is trusted": "すべてのアップストリームデータは信頼されています",
"All users": "すべてのユーザー",
@@ -341,6 +356,8 @@
"Allow using models without price configuration": "価格設定なしでモデルの使用を許可",
"Allow wallet balance after quota used up": "クォータ使い切り後にウォレット残高の使用を許可",
"Allowed": "許可",
+ "Allowed channel types": "許可するチャネル種別",
+ "Allowed groups": "許可グループ",
"Allowed Origins": "許可するオリジン",
"Allowed Ports": "許可するポート",
"Already have an account?": "アカウントをお持ちの方?",
@@ -378,6 +395,8 @@
"API Addresses": "APIアドレス",
"API Base URL (Important: Not Chat API) *": "APIベースURL (重要: チャットAPIではありません) *",
"API Base URL *": "APIベースURL *",
+ "API endpoint": "APIエンドポイント",
+ "API endpoint is too long": "APIエンドポイントが長すぎます",
"API Endpoints": "APIエンドポイント",
"API Info": "API情報",
"API info added. Click \"Save Settings\" to apply.": "API情報が追加されました。「Save Settings」をクリックして適用してください。",
@@ -397,8 +416,10 @@
"API key from the provider": "プロバイダからのAPIキー",
"API key is loading, please try again in a moment": "APIキーを読み込み中です。しばらくしてからもう一度お試しください",
"API key is required": "APIキーが必要です",
+ "API key is too long": "APIキーが長すぎます",
"API Key mode (does not support batch creation)": "APIキー モード(一括作成には対応していません)",
"API Key mode: use APIKey|Region": "APIキーモード: use APIKey | Region",
+ "API key must be a single line": "APIキーは1行で入力してください",
"API Key updated successfully": "APIキーが正常に更新されました",
"API Keys": "APIキー",
"API Private Key": "API 秘密鍵",
@@ -420,6 +441,7 @@
"appended": "追加済み",
"Application": "アプリケーション",
"Applied {{name}} pricing to {{count}} models": "{{name}} の料金を {{count}} 個のモデルに適用しました",
+ "Applied automatically when a contribution is approved.": "提供が承認されると自動的に適用されます。",
"Applied upstream model changes to {{count}} channels": "{{count}} 件のチャネルに上流モデルの変更を適用しました",
"Applied upstream model changes to channel (ID: {{id}})": "チャネル(ID: {{id}})に上流モデルの変更を適用しました",
"Applies to custom completion endpoints. JSON map of model → ratio.": "カスタム補完エンドポイントに適用されます。モデル → 比率のJSONマップ。",
@@ -430,6 +452,11 @@
"Apply reset": "リセットを実行",
"Apply Sync": "同期を適用",
"Applying...": "適用中...",
+ "Approval is bound to this administrator test run ID.": "承認はこの管理者テスト実行IDに紐づきます。",
+ "Approve": "承認",
+ "Approved": "承認済み",
+ "Approved channel tag": "承認済みチャネルのタグ",
+ "Approved channels are created with these routing and removal defaults.": "承認済みチャネルは、これらのルーティングおよび削除の既定値で作成されます。",
"Approx.": "約",
"apps": "アプリ",
"Apps": "アプリ",
@@ -460,6 +487,7 @@
"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 is selected": "モデルが1つ以上選択されています",
"At least one model regex pattern is required": "少なくとも1つのモデル正規表現パターンが必要です",
"At least one valid key source is required": "少なくとも1つの有効なキーソースが必要です",
"Attach": "添付",
@@ -493,6 +521,7 @@
"auth.resetPasswordConfirm.description": "新しいパスワードを生成するには、リセット要求を確認してください。",
"auth.resetPasswordConfirm.retry": "再試行 ({{seconds}}秒)",
"auth.resetPasswordConfirm.success": "パスワードが正常にリセットされました",
+ "Authenticated channel contribution and reward workspace.": "ログインが必要なチャネル提供・報酬ワークスペース。",
"Authentication": "認証",
"Authentication Method": "認証方式",
"Authenticator code": "認証コード",
@@ -513,12 +542,16 @@
"Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.": "自動は利用可能な場合に HTTP/2 を交渉します。HTTP/1.1 は同時実行時に複数のキープアライブ接続を使用します。",
"Auto refresh": "自動更新",
"Auto Sync Upstream Models": "アップストリームモデルの自動同期",
+ "Auto-disable models with no available channels": "利用可能なチャネルがないモデルを自動無効化",
"Auto-disable rules": "自動無効化ルール",
"Auto-disable status codes": "自動無効化するステータスコード",
"Auto-disable-enabled channels only": "自動無効化が有効なチャネルのみ",
"Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.": "このモードでは、自動無効化が有効で、手動で無効化されていないチャネルのみを検査します。",
+ "Auto-disabled": "自動無効",
"Auto-discover": "自動検出",
"Auto-discovers endpoints from the provider": "プロバイダーからエンドポイントを自動検出します",
+ "Auto-enable models disabled by this setting when a channel recovers": "チャネル復旧時にこの設定で無効化されたモデルを自動有効化",
+ "Auto-enabled": "自動有効",
"Auto-fill when one field exists and another is missing": "一方のフィールドがあり他方が欠けている場合に自動補完",
"Auto-refreshing every {{seconds}}s": "{{seconds}} 秒ごとに自動更新",
"Auto-retry status codes": "自動リトライするステータスコード",
@@ -535,8 +568,9 @@
"Available disk space": "利用可能なディスク容量",
"Available Models": "利用可能なモデル",
"Available reset credits": "利用可能なリセット回数",
+ "Available reward": "利用可能な報酬",
"Available Rewards": "利用可能な報酬",
- "Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.": "使用可能な変数:{{provider}}、{{field}}、{{op}}、{{required}}、{{current}}、および {{current.roles}} のようなパス。",
+ "Available: {{amount}}": "利用可能:{{amount}}",
"Average latency": "平均レイテンシ",
"Average latency, TTFT, and success rate by group": "グループ別の平均レイテンシ、TTFT、成功率",
"Average latency, TTFT, TPS, and success rate": "平均レイテンシ、TTFT、TPS、成功率",
@@ -599,10 +633,12 @@
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "一括検出完了:{{channels}} チャネル、{{add}} 個追加、{{remove}} 個削除、{{fails}} 個失敗",
"Batch detection failed": "一括検出に失敗しました",
"Batch disable failed": "一括無効化に失敗しました",
+ "Batch Disable Models with No Channels": "利用可能チャネルのないモデルを無効化",
"Batch Edit": "一括編集",
"Batch edit all channels with this tag. Leave fields empty to keep current values.": "このタグを持つすべてのチャネルを一括編集します。現在の値を維持するには、フィールドを空のままにしてください。",
"Batch Edit by Tag": "タグによる一括編集",
"Batch enable failed": "一括有効化に失敗しました",
+ "Batch Enable Models with Recovered Channels": "チャネルが復旧したモデルを有効化",
"Batch Operations": "一括操作",
"Batch processing failed": "一括処理に失敗しました",
"Batch set tag for {{count}} channels": "{{count}} 件のチャネルにタグを一括設定しました",
@@ -743,6 +779,7 @@
"Change To": "変更先",
"Changed Fields": "変更されたフィールド",
"Changes are written to the settings draft on save.": "保存すると変更は設定ドラフトに書き込まれます。",
+ "Changing the version requires acceptance on the next submission.": "バージョンを変更すると、次回送信時に再同意が必要です。",
"Changing...": "変更中...",
"Channel": "チャネル",
"Channel {{name}}": "チャネル {{name}}",
@@ -751,6 +788,10 @@
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.": "チャネルアフィニティは、リクエストコンテキストまたは JSON Body から抽出したキーに基づいて、前回成功したチャネルを優先的に再利用します。",
"Channel Affinity: Upstream Cache Hit": "チャネルアフィニティ:上流キャッシュヒット",
"Channel consistency repaired: {{success}} succeeded, {{fails}} failed": "チャネル整合性を修復しました:成功 {{success}} 件、失敗 {{fails}} 件",
+ "Channel Contribution Agreement": "チャネル提供規約",
+ "Channel Contribution Review": "チャネル提供審査",
+ "Channel contribution settings": "チャネル提供設定",
+ "Channel Contributions": "チャネル提供",
"Channel copied successfully": "チャネルが正常にコピーされました",
"Channel created successfully": "チャネルが正常に作成されました",
"Channel deleted successfully": "チャネルが正常に削除されました",
@@ -764,9 +805,14 @@
"Channel key unlocked": "チャネルキーが解除されました",
"Channel Management": "チャネル管理",
"Channel models": "チャネルモデル",
+ "Channel name": "チャネル名",
"Channel name is required": "チャネル名が必要です",
+ "Channel name must not exceed 128 characters": "チャネル名は128文字以内にしてください",
+ "Channel tag is required": "チャネルタグは必須です",
+ "Channel tag must not exceed 64 characters": "チャネルタグは64文字以内にしてください",
"Channel test completed": "チャネルテストが完了しました",
"Channel test mode": "チャネルテストモード",
+ "Channel type": "チャネル種別",
"Channel type is required": "チャネルタイプが必要です",
"Channel updated successfully": "チャネルが正常に更新されました",
"Channel-specific settings (JSON format)": "チャネル固有の設定 (JSON 形式)",
@@ -956,6 +1002,7 @@
"Conditions (AND)": "条件(AND)",
"Confidence": "信頼度",
"Configuration": "設定",
+ "Configuration changes invalidate the previous test result.": "設定を変更すると、以前のテスト結果は無効になります。",
"Configuration File": "設定ファイル",
"Configuration for Creem payment integration": "Creem決済統合の設定",
"Configuration for Epay payment integration": "Epay決済連携のための設定",
@@ -991,6 +1038,7 @@
"Configure Waffo payment aggregation platform integration": "Waffo決済アグリゲーションプラットフォームの連携を設定",
"Configure your account behavior preferences": "アカウントの動作設定を設定します。",
"Configure your account preferences and integrations": "アカウントの設定と統合を設定します。",
+ "Configured": "設定済み",
"Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.": "PayMethods JSON として保存されます。type 値で使用する決済フローを決定します。stripe は Stripe、waffo_pancake は Waffo Pancake、それ以外の値は Epay の type パラメーターとして送信されます。",
"Configured routes and latency checks": "設定済みルートとレイテンシ確認",
"Confirm": "確認",
@@ -1029,6 +1077,7 @@
"Connect through OpenAI, Claude, Gemini, and other compatible API routes": "OpenAI、Claude、Gemini、その他の互換APIルートから接続",
"Connected to io.net service normally.": "io.net サービスに正常に接続しました。",
"Connection closed": "接続が閉じられました",
+ "Connection details": "接続情報",
"Connection error": "接続エラー",
"Connection failed": "接続に失敗しました",
"Connection info detected in clipboard": "クリップボードに接続情報が見つかりました",
@@ -1059,7 +1108,26 @@
"Continue with OIDC": "OIDC で続行",
"Continue with Telegram": "Telegram で続行",
"Continue with WeChat": "WeChat で続行",
+ "Continuous failure time before automatic deletion.": "自動削除までの連続失敗時間です。",
"Contract review, compliance, summarisation": "契約レビュー・コンプライアンス・要約",
+ "Contribute": "提供する",
+ "Contribute a channel": "チャネルを提供",
+ "Contribution approved": "提供が承認されました",
+ "Contribution channel connection settings are read-only here. Submit sensitive changes through channel contribution review; only tag, priority, and weight can be edited.": "提供チャネルの接続設定はここでは読み取り専用です。機密設定の変更はチャネル提供の再審査から申請してください。ここで編集できるのはタグ、優先度、重みだけです。",
+ "Contribution deleted": "提供を削除しました",
+ "Contribution details": "提供の詳細",
+ "Contribution details are incomplete": "提供の詳細が不完全です",
+ "Contribution draft saved": "提供の下書きを保存しました",
+ "Contribution eligibility": "提供条件",
+ "Contribution rejected": "提供が却下されました",
+ "Contribution review": "提供審査",
+ "Contribution settings saved": "提供設定を保存しました",
+ "Contribution settings unavailable": "提供設定を利用できません",
+ "Contribution submitted for review": "提供を審査に送信しました",
+ "Contribution withdrawn": "提供を取り下げました",
+ "Contributions will appear here when users create drafts.": "ユーザーが下書きを作成すると、ここに表示されます。",
+ "Contributor": "提供者",
+ "Control eligibility, routing defaults, health removal, rewards, and the agreement.": "提供条件、ルーティング既定値、ヘルス削除、報酬、規約を管理します。",
"Control which models are exposed and which groups may use them.": "公開するモデルと、それらを利用できるグループを制御します。",
"Controls how much the model thinks before answering": "モデルが回答前に考える深さを制御します",
"Controls randomness and creativity": "ランダム性と創造性を調整します",
@@ -1198,6 +1266,7 @@
"Current Billing": "現在の請求",
"Current Cache Size": "現在のキャッシュサイズ",
"Current domain": "現在のドメイン",
+ "Current draft is saved": "現在の下書きは保存済みです",
"Current email: {{email}}. Enter a new email to change.": "現在のメール: {{email}}。変更するには新しいメールアドレスを入力してください。",
"Current key": "現在のキー",
"Current legacy JSON is invalid, cannot append": "現在の旧形式JSONが無効なため、追加できません",
@@ -1206,6 +1275,7 @@
"Current Password": "現在のパスワード",
"Current Price": "現在の価格",
"Current quota": "現在のクォータ",
+ "Current reward rate": "現在の報酬率",
"Current Value": "現在の値",
"Current version": "現在のバージョン",
"Current:": "現在:",
@@ -1270,6 +1340,7 @@
"Default Bearer": "既定の Bearer",
"Default Collapse Sidebar": "デフォルトのサイドバー折りたたみ",
"Default consumption chart": "デフォルトの消費チャート",
+ "Default is 0 until routing is intentionally enabled.": "ルーティングを明示的に有効にするまで既定値は0です。",
"Default Max Tokens": "デフォルトの最大トークン",
"Default model call chart": "デフォルトのモデル呼び出しチャート",
"Default range": "デフォルト範囲",
@@ -1295,6 +1366,7 @@
"Delete all stale": "期限切れをすべて削除",
"Delete Auto-Disabled": "自動無効化されたものを削除",
"Delete Channel": "チャネルを削除",
+ "Delete channel contribution?": "チャネル提供を削除しますか?",
"Delete Channels?": "チャネルを削除しますか?",
"Delete condition": "条件を削除",
"Delete Condition": "条件を削除",
@@ -1359,6 +1431,7 @@
"Describe": "説明",
"Describe this model...": "このモデルを説明...",
"Describe this vendor...": "このベンダーを説明...",
+ "Describe what must be corrected": "修正が必要な内容を記載してください",
"Description": "説明",
"Description is required": "説明は必須です",
"Designed and Developed by": "設計・開発",
@@ -1385,6 +1458,7 @@
"Disable": "無効にする",
"Disable 2FA": "2FAを無効にする",
"Disable All": "すべて無効にする",
+ "Disable Models with No Channels?": "利用可能チャネルのないモデルを無効化しますか?",
"Disable on failure": "失敗時に無効にする",
"Disable selected channels": "選択したチャネルを無効にする",
"Disable selected models": "選択したモデルを無効にする",
@@ -1457,6 +1531,7 @@
"Downgrade to pre-purchase group": "購入前のグループにダウングレード",
"Downgrade to this group after the subscription expires": "サブスクリプションの有効期限が切れた後、このグループにダウングレードします",
"Download": "ダウンロード",
+ "Draft": "下書き",
"Drag {{group}} to reorder": "{{group}} をドラッグして並べ替え",
"Draw": "描画",
"Drawing": "画像生成",
@@ -1488,7 +1563,6 @@
"e.g. my-gitlab": "例: my-gitlab",
"e.g. New API Console": "例: New API コンソール",
"e.g. openid profile email": "例: openid profile email",
- "e.g. Requires level {{required}}; your current level is {{current}}": "例:レベル {{required}} が必要です。現在のレベルは {{current}} です",
"e.g. Suitable for light usage": "例:ライトユーザー向け",
"e.g. This request does not meet access policy": "例:このリクエストはアクセスポリシーを満たしていません",
"e.g., 0.95": "例: 0.95",
@@ -1532,10 +1606,12 @@
"Edit": "編集",
"Edit {{title}}": "{{title}}を編集",
"Edit all channels with tag:": "タグを持つすべてのチャネルを編集:",
+ "Edit and resubmit": "編集して再送信",
"Edit Announcement": "お知らせを編集",
"Edit API Shortcut": "API ショートカットを編集",
"Edit billing ratios and user-selectable groups in one table.": "課金倍率とユーザーが選択できるグループを1つの表で編集します。",
"Edit Channel": "チャネルを編集",
+ "Edit channel contribution": "チャネル提供を編集",
"Edit channel routing": "チャネルルーティングを編集",
"Edit chat preset": "チャットプリセットを編集",
"Edit discount tier": "割引ティアを編集",
@@ -1596,6 +1672,7 @@
"Enable io.net model deployment service in console": "コンソールで io.net モデルデプロイサービスを有効化",
"Enable LinuxDO OAuth": "LinuxDO OAuthを有効にする",
"Enable model performance metrics": "モデル性能メトリクスを有効化",
+ "Enable Models with Recovered Channels?": "チャネルが復旧したモデルを有効化しますか?",
"Enable OIDC": "OIDCを有効にする",
"Enable or disable this channel": "このチャネルを有効または無効にする",
"Enable or disable this model": "このモデルを有効または無効にする",
@@ -1624,6 +1701,7 @@
"Enabled all channels with tag: {{tag}}": "タグ「{{tag}}」の全チャネルを有効にしました",
"Enabled channels with tag {{tag}}": "タグ {{tag}} のチャネルを有効化しました",
"Enabled Status": "有効ステータス",
+ "Enabling this setting immediately disables all currently enabled models with no available channels. Turning it off later will not automatically re-enable those models. Continue?": "この設定を有効にすると、利用可能なチャネルがない有効なモデルがすべて直ちに無効になります。後でこの設定をオフにしても、それらのモデルは自動的に再有効化されません。続行しますか?",
"Enabling...": "有効化中...",
"Encourages introducing new topics": "新しい話題への展開を促進します",
"Encourages new topics": "新しい話題を促します",
@@ -1635,6 +1713,7 @@
"Endpoint": "エンドポイント",
"Endpoint config": "エンドポイント設定",
"Endpoint Configuration": "エンドポイント設定",
+ "Endpoint type": "エンドポイント種別",
"Endpoint Type": "エンドポイントタイプ",
"Endpoint, provider-specific settings, and credentials.": "エンドポイント、プロバイダー固有の設定、認証情報。",
"Endpoint:": "エンドポイント:",
@@ -1650,8 +1729,10 @@
"Enter a positive integer": "正の整数を入力してください",
"Enter a positive or negative amount to adjust the quota": "クォータを調整するために正または負の値を入力してください",
"Enter a react-icons component name. Invalid names show no icon.": "react-icons のコンポーネント名を入力してください。無効な名前はアイコンを表示しません。",
+ "Enter a valid API endpoint": "有効なAPIエンドポイントを入力してください",
"Enter a valid email or leave blank": "有効なメールアドレスを入力するか空白にしてください",
"Enter a value and press Enter": "値を入力してEnterを押してください",
+ "Enter a whole number within the allowed range": "許可範囲内の整数を入力してください",
"Enter amount in {{currency}}": "{{currency}}で金額を入力",
"Enter amount in tokens": "トークンで金額を入力",
"Enter announcement content (supports Markdown & HTML)": "アナウンス内容を入力(Markdown & HTML対応)",
@@ -1689,6 +1770,7 @@
"Enter password (8-20 characters)": "パスワードを入力 (8~20文字)",
"Enter quota in {{currency}}": "{{currency}} でクォータを入力",
"Enter quota in tokens": "トークン単位でクォータを入力",
+ "Enter reward quota": "報酬クォータを入力",
"Enter secret key": "シークレットキーを入力",
"Enter system prompt (user prompt takes priority)": "システムプロンプトを入力 (ユーザープロンプトが優先されます)",
"Enter tag name (optional)": "タグ名を入力 (オプション)",
@@ -1699,6 +1781,7 @@
"Enter the full URL of your Gotify server": "Gotifyサーバーの完全なURLを入力",
"Enter the knowledge base ID": "ナレッジベースIDを入力",
"Enter the path before /suno, usually just the domain": "/suno の前のパスを入力してください。通常はドメインのみです",
+ "Enter the provider API key": "プロバイダーのAPIキーを入力",
"Enter the quota amount in {{currency}}": "{{currency}} でクォータ数を入力",
"Enter the quota amount in tokens": "トークン単位でクォータ額を入力",
"Enter the verification code": "確認コードを入力",
@@ -1738,8 +1821,8 @@
"Error Type (optional)": "エラータイプ(任意)",
"Estimated cost": "推定コスト",
"Estimated quota cost": "想定クォートコスト",
- "Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.": "プロバイダーのユーザー情報レスポンスのフィールドを評価します。条件とネストしたグループでは and/or ロジックを使用します。",
"Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.": "料金表の各グループ名は2つの場所で使えます。ユーザー側(ユーザーグループ、管理者が割り当て)とトークン側(トークングループ、トークン作成時に選択)です。同じ名前プールで、役割は2つです。",
+ "Every model has administrator pricing": "すべてのモデルに管理者価格が設定されています",
"Every other device will lose access immediately. This device will remain signed in.": "他のすべてのデバイスは直ちにアクセスできなくなります。このデバイスはログイン状態を維持します。",
"Everything configured for this group, in one place.": "このグループのすべての設定を一か所で確認できます。",
"Exact": "完全一致",
@@ -1802,6 +1885,9 @@
"Failed to {{action}} user": "ユーザーの{{action}}に失敗しました",
"Failed to adjust quota": "クォータの調整に失敗しました",
"Failed to apply overwrite.": "オーバーライトの適用に失敗しました。",
+ "Failed to approve contribution": "提供を承認できませんでした",
+ "Failed to batch disable models": "モデルの一括無効化に失敗しました",
+ "Failed to batch enable models": "モデルの一括有効化に失敗しました",
"Failed to bind email": "メールのバインドに失敗しました",
"Failed to change password": "パスワードの変更に失敗しました",
"Failed to check for updates": "更新の確認に失敗しました",
@@ -1827,6 +1913,7 @@
"Failed to delete API key": "APIキーの削除に失敗しました",
"Failed to delete API keys": "APIキーの削除に失敗しました",
"Failed to delete channel": "チャネルの削除に失敗しました",
+ "Failed to delete contribution": "提供を削除できませんでした",
"Failed to delete disabled channels": "無効化されたチャネルの削除に失敗しました",
"Failed to delete failed models": "失敗したモデルの削除に失敗しました",
"Failed to delete group": "グループの削除に失敗しました",
@@ -1864,6 +1951,10 @@
"Failed to load": "読み込みに失敗しました",
"Failed to load API keys": "APIキーの読み込みに失敗しました",
"Failed to load billing history": "請求履歴の読み込みに失敗しました",
+ "Failed to load contribution": "提供を読み込めませんでした",
+ "Failed to load contribution rewards": "提供報酬を読み込めませんでした",
+ "Failed to load contribution settings": "提供設定を読み込めませんでした",
+ "Failed to load contributions": "提供一覧を読み込めませんでした",
"Failed to load enabled models": "有効なモデルの取得に失敗しました",
"Failed to load home page content": "ホームページの内容の読み込みに失敗しました",
"Failed to load image": "画像の読み込みに失敗しました",
@@ -1886,6 +1977,7 @@
"Failed to refresh credential": "認証情報の更新に失敗しました",
"Failed to regenerate backup codes": "バックアップコードの再生成に失敗しました",
"Failed to register Passkey": "Passkeyの登録に失敗しました",
+ "Failed to reject contribution": "提供を却下できませんでした",
"Failed to remove Passkey": "パスキーの削除に失敗しました",
"Failed to repair channel consistency": "チャネル整合性の修復に失敗しました",
"Failed to reset 2FA": "2FAのリセットに失敗しました",
@@ -1895,6 +1987,8 @@
"Failed to save": "保存に失敗",
"Failed to save announcements": "お知らせの保存に失敗しました",
"Failed to save API info": "API情報の保存に失敗しました",
+ "Failed to save contribution draft": "提供の下書きを保存できませんでした",
+ "Failed to save contribution settings": "提供設定を保存できませんでした",
"Failed to save FAQ": "FAQの保存に失敗しました",
"Failed to save Uptime Kuma groups": "Uptime Kumaグループの保存に失敗しました",
"Failed to search API keys": "APIキーの検索に失敗しました",
@@ -1911,16 +2005,19 @@
"Failed to start Discord login": "Discordログインの開始に失敗しました",
"Failed to start GitHub login": "GitHubログインの開始に失敗しました",
"Failed to start LinuxDO login": "LinuxDOログインの開始に失敗しました",
+ "Failed to start model tests": "モデルテストを開始できませんでした",
"Failed to start OIDC login": "OIDCログインの開始に失敗しました",
"Failed to start Passkey login": "Passkeyログインの開始に失敗しました",
"Failed to start Passkey registration": "パスキー登録の開始に失敗しました",
"Failed to start Telegram binding": "Telegram 連携の開始に失敗しました",
"Failed to start testing all channels": "すべてのチャネルのテストを開始できませんでした",
"Failed to start verification": "認証の開始に失敗しました",
+ "Failed to submit contribution": "提供を送信できませんでした",
"Failed to sync prices": "価格の同期に失敗しました",
"Failed to sync ratios": "比率の同期に失敗しました",
"Failed to test all channels": "すべてのチャネルのテストに失敗しました",
"Failed to test channel": "チャネルのテストに失敗しました",
+ "Failed to transfer rewards": "報酬を振り替えられませんでした",
"Failed to update all balances": "すべての残高を更新できませんでした",
"Failed to update API key": "APIキーの更新に失敗しました",
"Failed to update API key status": "APIキー状態の更新に失敗しました",
@@ -1935,7 +2032,9 @@
"Failed to update settings": "設定を更新できませんでした",
"Failed to update tag": "タグの更新に失敗しました",
"Failed to update user": "ユーザーの更新に失敗しました",
+ "Failed to withdraw contribution": "提供を取り下げられませんでした",
"Failure keywords": "失敗キーワード",
+ "Failure since": "失敗開始",
"Fair": "公平",
"Fallback": "フォールバック",
"Fallback base URL": "フォールバック Base URL",
@@ -1955,9 +2054,12 @@
"Fetch available models for:": "利用可能なモデルを取得:",
"Fetch available models from upstream": "アップストリームから利用可能なモデルを取得する",
"Fetch from Upstream": "Upstreamからフェッチ",
+ "Fetch models": "モデルを取得",
"Fetch Models": "モデルを取得",
+ "Fetch models or enter model IDs": "モデルを取得するかモデルIDを入力",
"Fetched {{count}} model(s) from upstream": "上流から {{count}} 個のモデルを取得しました",
"Fetched {{count}} models": "{{count}} 個のモデルを取得しました",
+ "Fetched and saved {{count}} models": "{{count}}件のモデルを取得して保存しました",
"Fetching prefill groups...": "プリフィルグループをフェッチ中...",
"Fetching upstream prices...": "上流価格を取得中...",
"Fetching upstream ratios...": "アップストリーム比率をフェッチ中...",
@@ -1978,10 +2080,6 @@
"Fill in the following info to create a new subscription plan": "以下の情報を入力して新しいサブスクリプションプランを作成",
"Fill Related Models": "関連モデルを入力",
"Fill Template": "テンプレートを入力",
- "Fill template: level and active": "テンプレートを入力:レベルと有効状態",
- "Fill template: level message": "テンプレートを入力:レベルメッセージ",
- "Fill template: organization message": "テンプレートを入力:組織メッセージ",
- "Fill template: organization or role": "テンプレートを入力:組織またはロール",
"Fill Templates": "テンプレートを入力",
"Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.": "クライアントリクエスト本文の完全な model 値を入力します。例: gpt-4o または gemini-2.5-flash。複数のモデルはカンマで区切ります。",
"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format": "OpenAI形式を利用するGemini/VertexチャネルにのみthoughtSignatureを付与します",
@@ -2092,6 +2190,7 @@
"Full Code": "完全なコード",
"Full input length": "完全な入力長",
"Full layout": "フルレイアウト",
+ "Full model test started": "全モデルテストを開始しました",
"Full width": "全幅",
"Function calling": "関数呼び出し",
"Functions": "関数",
@@ -2122,7 +2221,9 @@
"Get started": "はじめる",
"Get Started": "開始する",
"GitHub": "GitHub",
+ "Give the contributor a clear reason they can address before resubmitting.": "提供者が再送信前に対応できる明確な理由を入力してください。",
"Give the group a recognizable name and optional description.": "グループに認識しやすい名前とオプションの説明を付けます。",
+ "Give this contribution a recognizable name": "この提供に識別しやすい名前を付けてください",
"Give this group a recognizable name.": "このグループに認識しやすい名前を付けます。",
"Global configuration and administrative tools.": "グローバル設定と管理ツール。",
"Global Coverage": "グローバルカバレッジ",
@@ -2166,6 +2267,7 @@
"Group details": "グループの詳細",
"Group identifier": "グループ識別子",
"Group is required": "グループは必須です",
+ "Group must not exceed 64 characters": "グループは64文字以内にしてください",
"Group name": "グループ名",
"Group Name": "グループ名",
"Group name cannot be changed when editing.": "編集時はグループ名を変更できません。",
@@ -2205,6 +2307,8 @@
"Header Value (supports string or JSON mapping)": "ヘッダー値(文字列またはJSONマッピング対応)",
"header. Anthropic-formatted endpoints accept the": " ヘッダーが必要です。Anthropic 形式のエンドポイントでは",
"Health": "ヘルスケア",
+ "Health check interval (minutes)": "ヘルスチェック間隔(分)",
+ "Health checks continue while the contributed channel is active.": "提供チャネルが有効な間はヘルスチェックが継続されます。",
"Healthy": "正常",
"Hidden": "非表示",
"Hidden — verify to reveal": "非表示 — 確認して表示",
@@ -2224,6 +2328,7 @@
"High-risk status code retry risk check 4": "深刻なクライアントタイムアウトやサービス停止を含むシステム安定性のリスクを自発的に受け入れ、その結果生じるリクエスト滞留やサービス停止の責任を負います。",
"High-risk status code retry risk disclaimer": "### ⚠️ 高リスク操作:504/524 ステータスコードのリトライに関するリスク通知と免責事項\n\n本プロジェクトは既定で、`400`(不正なリクエスト)、`504`(ゲートウェイタイムアウト)、`524`(タイムアウト発生)をリトライしません。504 と 524 は通常、**リクエストが上流 AI サービスに正常に到達して上流側で処理が始まっているものの、上流処理に時間がかかりすぎて接続が切断された**ことを意味します。多くの場合、これは上流サービス側のボトルネックです。\n\nこれらのタイムアウトコードでリダイレクトまたはリトライを有効にすることは、**極めて高リスクな操作**です。有効にする前に、次の重大な影響を必ず読み、理解してください。\n\n#### 1. 主なリスク(必ずお読みください)\n\n1. 💸 二重・多重課金:多くの上流 AI プロバイダーは、処理開始後にネットワークタイムアウト(504/524)で中断されたリクエストにも**通常どおり課金します**。リトライでは新しい上流リクエストが送信されるため、**二重または多重課金**になる可能性があります。\n2. ⏳ 深刻なクライアントタイムアウト:すでにタイムアウトしたリクエストにリトライを重ねると、総待ち時間が何倍にもなり、最終クライアントで深刻または許容できないタイムアウトが発生する可能性があります。\n3. 💥 リクエスト滞留とサービス停止:強制リトライはスレッドと接続を長時間占有します。高負荷時には深刻な**リクエスト滞留**、リソース枯渇、連鎖障害を招き、プロキシサービスが停止する可能性があります。\n\n#### 2. リスクの確認\n\nそれでもこの機能を有効にする場合は、以下のすべてを確認したものとみなされます。",
"Higher priority channels are selected first": "優先度の高いチャネルが先に選択されます",
+ "Higher values are selected first.": "値が高いものから優先的に選択されます。",
"Historical Usage": "履歴使用状況",
"History of MjProxy-style image tasks.": "MjProxyスタイルの画像タスクの履歴。",
"Hit criteria: If cached tokens exist in usage, it counts as a hit.": "ヒット判定:usage に cached tokens が存在すればヒットとみなします。",
@@ -2245,6 +2350,7 @@
"How It Works": "仕組み",
"How model mapping works": "モデルマッピングの仕組み",
"How much to charge for each US dollar of balance (Epay)": "残高の 1 米ドルあたりに請求する金額 (Epay)",
+ "How often contributed channels are checked.": "提供チャネルを確認する頻度です。",
"How this model name should match requests": "このモデル名がリクエストとどのように一致すべきか",
"How to deliver the resulting image": "画像結果の返却方法",
"How to get an io.net API Key": "io.net API キーの取得方法",
@@ -2280,6 +2386,7 @@
"https://your-server.example.com": "https://your-server.example.com",
"Human-readable name shown to users during Passkey prompts.": "パスキーのプロンプト中にユーザーに表示される、人間が読める名前。",
"I confirm enabling high-risk retry": "高リスクリトライの有効化を確認します",
+ "I have read and agree to": "内容を確認し同意します:",
"I have read and agree to the": "私は以下を読み、同意します",
"I have read and understood the above compliance reminder": "上記のコンプライアンス注意事項を読み、理解しました",
"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.": "上記のコンプライアンス注意事項を読み理解し、関連する法的リスクを認識したうえで、デプロイ、運用、課金行為に起因する法的責任を負うことを確認します。",
@@ -2348,6 +2455,7 @@
"Input tokens": "入力トークン",
"Input Tokens": "入力トークン",
"Inset": "インセット",
+ "Inspect drafts, approved channels, rejected revisions, and health removals.": "下書き、承認済みチャネル、却下済みリビジョン、ヘルス削除を確認します。",
"Inspect requests, errors, and billing details": "リクエスト、エラー、請求詳細を確認",
"Inspect user prompts": "ユーザープロンプトの検査",
"Instance": "インスタンス",
@@ -2456,9 +2564,13 @@
"Last 30 days uptime": "直近 30 日の稼働率",
"Last active {{time}} · Expires {{expires}}": "最終利用 {{time}} · 有効期限 {{expires}}",
"Last check time": "最終チェック時刻",
+ "Last checked": "最終確認",
"Last detected addable models": "最後に検出された追加可能モデル",
+ "Last error": "最新エラー",
+ "Last failure": "最新の失敗",
"Last Login": "最終ログイン",
"Last Seen": "最終報告",
+ "Last success": "最新の成功",
"Last Tested": "最終テスト日時",
"Last updated:": "最終更新日:",
"Last Used": "最終使用",
@@ -2475,6 +2587,7 @@
"Learn more": "詳細はこちら",
"Learn more:": "詳細はこちら:",
"Leave": "退出",
+ "Leave blank to keep the current key": "現在のキーを保持する場合は空欄にします",
"Leave blank to keep the existing credential": "既存の認証情報を保持するには、空白のままにしてください",
"Leave blank to keep the existing key": "空欄のままにすると既存のキーを保持します",
"Leave blank unless rotating the secret": "シークレットをローテーションする場合を除き、空白のままにしてください",
@@ -2505,6 +2618,7 @@
"Less than or equal": "以下",
"Less Than or Equal": "以下",
"License": "ライセンス",
+ "Lifetime earned": "累計獲得額",
"Light": "ライト",
"Lightning Fast": "超高速",
"Limit period": "制限期間",
@@ -2593,6 +2707,7 @@
"Manual Disabled": "手動無効",
"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).": "ユーザー情報レスポンスのフィールドをローカルユーザー属性にマッピングします。ネストされたパスをサポートします (例: ocs.data.id)。",
"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.": "モデル識別子をGemini APIバージョンにマッピングします。特定の一致が見つからない場合は、`default`エントリが適用されます。",
+ "Map public model IDs to the provider model IDs when needed.": "必要に応じて公開モデルIDをプロバイダーのモデルIDに対応付けます。",
"Map request model names to actual provider model names (JSON format)": "リクエストのモデル名を実際のプロバイダーのモデル名にマッピング (JSON 形式)",
"Map response status codes (JSON format)": "応答ステータスコードをマッピング(JSON形式)",
"Map upstream status codes to different codes": "アップストリームのステータスコードを別のコードにマッピングする",
@@ -2672,6 +2787,7 @@
"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.": "下で新しいペアを作成するか、さらに下で既存のものを選択してください。準備ができたら保存をクリックします。",
"Minute": "分",
"minutes": "分",
+ "Missing": "未設定",
"Missing code": "コードが不足しています",
"Missing Models": "不足しているモデル",
"Missing user data from Passkey login response": "パスキーログイン応答からユーザーデータが欠落しています",
@@ -2701,6 +2817,7 @@
"Model enabled successfully": "モデルが正常に有効化されました",
"Model fixed pricing": "モデルの固定価格設定",
"Model Group": "モデルグループ",
+ "Model health": "モデルの状態",
"Model Limits": "モデル制限",
"Model Mapping": "モデルマッピング",
"Model Mapping (JSON)": "モデルマッピング (JSON)",
@@ -2786,6 +2903,7 @@
"Move {{group}} up": "{{group}} を上に移動",
"Move a request header": "リクエストヘッダーを移動",
"Move affiliate rewards to your main balance": "アフィリエイト報酬をメイン残高に移動する",
+ "Move available contribution rewards into your wallet balance.": "利用可能な提供報酬をウォレット残高へ移します。",
"Move fallback to end": "フォールバックを最後へ",
"Move Field": "フィールドを移動",
"Move Header": "ヘッダーを移動",
@@ -2818,6 +2936,7 @@
"Multipliers for recharge pricing based on user groups.": "ユーザーグループに基づいたリチャージ価格設定の乗数。",
"Must be a valid URL": "有効な URL を入力してください",
"Must be at least 8 characters": "8文字以上である必要があります",
+ "My contributions": "自分の提供",
"My Subscriptions": "マイサブスクリプション",
"my-status": "my-status",
"MySQL detected": "MySQLが検出されました",
@@ -2851,6 +2970,7 @@
"New API": "新しいAPI",
"New API <noreply@example.com>": "新しいAPI __ PH_0 __",
"New API Project Repository:": "New APIプロジェクトリポジトリ:",
+ "New contribution": "新しい提供",
"New Format Template": "新フォーマットテンプレート",
"New Group": "新しいグループ",
"New model": "新しいモデル",
@@ -2885,6 +3005,7 @@
"No app usage data available for this model.": "このモデルのアプリ利用データはまだありません。",
"No apps match the selected filters": "条件に一致するアプリはありません",
"No Auth": "認証なし",
+ "No auto-disabled models with recovered channels found": "チャネルが回復した自動無効化モデルはありません",
"No available groups in the global Auto order.": "グローバル Auto 順序に利用可能なグループがありません。",
"No available models": "利用可能なモデルがありません",
"No available Web chat links": "利用可能なWebチャットリンクがありません",
@@ -2896,6 +3017,7 @@
"No changes": "変更なし",
"No changes made": "変更はありません",
"No changes to save": "保存する変更がありません",
+ "No channel contributions yet": "チャネル提供はまだありません",
"No channel selected": "チャネルが選択されていません",
"No channel type found.": "チャネルタイプが見つかりません。",
"No channels available. Create your first channel to get started.": "利用可能なチャネルがありません。最初のチャネルを作成して開始してください。",
@@ -2910,6 +3032,7 @@
"No console output": "コンソール出力なし",
"No containers": "コンテナがありません",
"No content to copy": "コピーする内容がありません",
+ "No contribution rewards yet": "提供報酬はまだありません",
"No custom groups. Saving will inherit the complete global Auto order.": "カスタムグループはありません。保存すると、グローバル Auto の全順序を継承します。",
"No custom OAuth providers configured yet.": "カスタムOAuthプロバイダーはまだ設定されていません。",
"No data": "データがありません",
@@ -2946,13 +3069,16 @@
"No Logs Found": "ログが見つかりません",
"No mappings configured. Click \"Add Row\" to get started.": "マッピングが設定されていません。「行を追加」をクリックして開始してください。",
"No matches found": "一致するものが見つかりません",
+ "No matching contributions": "一致する提供はありません",
"No matching items": "一致する項目がありません",
+ "No matching models": "一致するモデルはありません",
"No matching results": "一致する結果がありません",
"No matching rules": "一致するルールがありません",
"No matching token and channel usage was found.": "一致するトークンとチャネルの使用量が見つかりませんでした。",
"No messages yet": "まだメッセージがありません",
"No missing models found.": "不足しているモデルは見つかりません。",
"No model found.": "モデルが見つかりません。",
+ "No model health observations": "モデル状態の観測記録はありません",
"No model mappings configured. Click \"Add Mapping\" to get started.": "モデルマッピングは設定されていません。「マッピングを追加」をクリックして開始してください。",
"No model price changes to save": "保存するモデル価格の変更はありません",
"No models available": "利用可能なモデルがありません",
@@ -2972,6 +3098,7 @@
"No models to add": "追加するモデルがありません",
"No models to copy": "コピーするモデルがありません",
"No models to remove": "削除するモデルがありません",
+ "No models with unavailable channels found": "無効化が必要な利用可能チャネルなしのモデルはありません",
"No models with unset prices": "価格未設定のモデルはありません",
"No new models to add": "追加する新しいモデルはありません",
"No new models yet": "新しいモデルはまだありません",
@@ -3021,6 +3148,7 @@
"No Sync": "同期なし",
"No system announcements": "システムのお知らせがありません",
"No system tasks yet.": "システムタスクはまだありません。",
+ "No test results": "テスト結果はありません",
"No token found.": "トークンが見つかりません。",
"No tools configured": "ツールが未設定です",
"No Upgrade": "アップグレードなし",
@@ -3054,6 +3182,7 @@
"Not Equals": "等しくない",
"Not in pricing table": "料金グループ表にありません",
"Not included": "未登録",
+ "Not required": "不要",
"Not set": "未設定",
"Not Set": "未設定",
"Not set yet": "未設定",
@@ -3077,6 +3206,7 @@
"Number of tokens per unit quota": "単位クォータあたりのトークン数",
"Number of top log probabilities returned per token": "トークンごとに返される上位対数確率の数",
"Number of users invited": "招待されたユーザー数",
+ "OAuth": "OAuth",
"OAuth binding timed out. Please try again.": "OAuth 連携がタイムアウトしました。もう一度お試しください。",
"OAuth binding window is no longer available": "OAuth 連携ウィンドウは利用できなくなりました",
"OAuth callback URL": "OAuth コールバック URL",
@@ -3139,7 +3269,9 @@
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "選択されたフィールドのみが上書きされます。新しい競合が発生した場合は、同期ウィザードを再実行できます。",
"Only successful requests": "成功したリクエストのみ",
"Only successful requests count toward this limit.": "成功したリクエストのみがこの制限にカウントされます。",
+ "Only the connection details required for review are collected.": "審査に必要な接続情報のみを収集します。",
"Only the last {{value}} log files will be retained; the rest will be deleted.": "最新の{{value}}個のログファイルのみ保持され、残りは削除されます。",
+ "Only these groups and provider types can be submitted.": "送信できるのは、これらのグループとプロバイダー種別のみです。",
"Oops! Page Not Found!": "おっと!ページが見つかりません!",
"Oops! Something went wrong": "おっと!何か問題が発生しました",
"Open": "開く",
@@ -3150,6 +3282,7 @@
"Open in New Tab": "新しいタブで開く",
"Open menu": "メニューを開く",
"Open release": "リリースを開く",
+ "Open review": "審査を開く",
"Open source": "オープンソース",
"Open Source": "オープンソース",
"Open the io.net console API Keys page": "io.netコンソールAPIキーページを開く",
@@ -3247,6 +3380,7 @@
"Overwritten": "上書き済み",
"Page": "ページ",
"Page {{current}} of {{total}}": "{{total}} ページ中 {{current}} ページ目",
+ "Page {{page}} of {{pages}}": "{{pages}}ページ中{{page}}ページ",
"PaLM": "PaLM",
"Pan": "パン",
"Pancake": "Pancake",
@@ -3278,6 +3412,7 @@
"Pass when key is missing": "キーがない場合は通過",
"Pass-Through": "パススルー",
"Pass-through Headers (comma-separated or JSON array)": "パススルーヘッダー(カンマ区切りまたはJSON配列)",
+ "Passed": "合格",
"Passive recovery only": "パッシブ復旧のみ",
"Passkey": "Passkey",
"Passkey Authentication": "パスキー認証",
@@ -3348,6 +3483,7 @@
"Penalises repetition of frequent tokens": "頻出トークンの繰り返しを抑制します",
"pending": "保留中",
"Pending": "保留中",
+ "Pending review": "審査待ち",
"per": "あたり",
"Per 1K tokens": "1Kトークンあたり",
"Per 1M tokens": "1Mトークンあたり",
@@ -3679,6 +3815,7 @@
"Received": "受信済み",
"Received amount": "受け取り額",
"Recent maintenance tasks running across instances and their execution status.": "各インスタンスで実行された最近のメンテナンスタスクとその実行状態。",
+ "Recent transfers": "最近の振替",
"Recently completed or failed system task runs.": "最近完了または失敗したシステムタスク実行です。",
"Recently launched models": "最近リリースされたモデル",
"Recently launched models gaining traction": "最近リリースされ勢いのあるモデル",
@@ -3750,7 +3887,10 @@
"Registry (optional)": "レジストリ (オプション)",
"Registry secret": "レジストリ シークレット",
"Registry username": "レジストリ ユーザー名",
+ "Reject": "却下",
+ "Reject contribution": "提供を却下",
"Reject Reason": "拒否理由",
+ "Rejection reason": "却下理由",
"Release details": "リリース詳細",
"Released": "公開日",
"Relying Party Display Name": "依拠当事者表示名",
@@ -3846,6 +3986,7 @@
"Required": "必須",
"Required events:": "必須イベント:",
"Required provider, authentication, model, and group settings": "必須のプロバイダー、認証、モデル、グループ設定",
+ "Required tests passed within the last 30 minutes": "必要なテストが直近30分以内に合格しています",
"Required to expose MjProxy-style image generation to end users.": "エンドユーザーに MjProxy スタイルの画像生成を公開するために必要です。",
"Rerank": "再ランク付け",
"Reroll": "やり直し",
@@ -3889,6 +4030,7 @@
"Reset usage window": "使用量ウィンドウをリセット",
"Resets in:": "リセットまで:",
"Resetting...": "リセット中...",
+ "Resize column": "列幅を変更",
"Resolve Conflicts": "競合を解決",
"Resource Configuration": "リソース設定",
"Resources": "リソース",
@@ -3921,11 +4063,22 @@
"Revenue": "収益",
"Review & initialize": "確認して初期化",
"Review and sign out devices currently using your account.": "現在アカウントを使用しているデバイスを確認し、サインアウトできます。",
+ "Review contributed channels and configure contribution policy.": "提供チャネルを審査し、提供ポリシーを設定します。",
+ "Review contributions": "提供を審査",
"Review model rates before scaling traffic": "トラフィック拡大前にモデル料金を確認",
+ "Review note": "審査メモ",
+ "Review rejected": "審査却下",
+ "Review status and per-model channel health history.": "審査状態とモデルごとのチャネル状態履歴を確認します。",
"Review your payment details": "支払い詳細を確認",
"Review your purchase details before proceeding.": "続行前に購入詳細を確認してください。",
+ "Revision": "リビジョン",
"Revoke": "取り消す",
"Revoke session?": "このセッションを取り消しますか?",
+ "Reward basis points": "報酬ベーシスポイント",
+ "Reward ledger": "報酬台帳",
+ "Rewards": "報酬",
+ "Rewards are credited after billable requests use an approved channel.": "課金対象リクエストが承認済みチャネルを使用すると報酬が付与されます。",
+ "Rewards transferred to your wallet": "報酬をウォレットに振り替えました",
"Rewards will be added directly to your balance": "報酬は直接残高に追加されます",
"Rewrite callback URLs to the local server": "コールバック URL をローカルサーバーに書き換え",
"Right to Left": "右から左",
@@ -3946,6 +4099,7 @@
"Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.": "同じ入口パスのルートは、クライアント model の完全一致で分岐します。一致しないリクエストは最後のフォールバックを使います。",
"Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.": "同じ入口パスのルートは、クライアントの正確なモデル名で一致します。複数のモデルはカンマで区切り、最後のフォールバックだけを空にします。",
"Routing & Overrides": "ルーティングと上書き",
+ "Routing and health": "ルーティングとヘルス",
"Routing Reliability": "ルーティング信頼性",
"Routing Strategy": "ルーティング戦略",
"Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.": "行はユーザーグループ、列は課金グループです。空のセルはグレー表示の基本倍率にフォールバックします。",
@@ -3970,8 +4124,11 @@
"Rules JSON": "ルール JSON",
"Rules JSON must be an array": "ルール JSON は配列である必要があります",
"Rules match the original model value from the client request body.": "ルールはクライアントリクエスト本文の元の model 値に一致します。",
+ "Run admin test": "管理者テストを実行",
+ "Run an independent administrator test before approving this revision.": "このリビジョンを承認する前に、独立した管理者テストを実行してください。",
"Run GC": "GC 実行",
"Run tests for the selected models": "選択したモデルのテストを実行",
+ "Run the full model test before submitting.": "送信前に全モデルテストを実行してください。",
"running": "実行中",
"Running": "実行中",
"Runtime": "実行環境",
@@ -3990,6 +4147,7 @@
"Save chat settings": "チャット設定を保存",
"Save check-in settings": "チェックイン設定を保存",
"Save Creem settings": "Creem設定を保存",
+ "Save draft": "下書きを保存",
"Save drawing settings": "描画設定を保存",
"Save Epay settings": "Epay設定を保存",
"Save failed": "保存に失敗しました",
@@ -4008,11 +4166,13 @@
"Save preview": "保存プレビュー",
"Save rate limits": "レート制限を保存",
"Save sensitive words": "敏感な言葉を保存",
+ "Save settings": "設定を保存",
"Save Settings": "設定を保存",
"Save sidebar modules": "サイドバーモジュールを保存",
"Save SMTP settings": "SMTP設定を保存",
"Save SSRF settings": "SSRF 設定を保存",
"Save Stripe settings": "Stripe設定を保存",
+ "Save the draft, test every model, then submit it for review.": "下書きを保存し、全モデルをテストしてから審査に送信してください。",
"Save these backup codes in a safe place. Each code can only be used once.": "これらのバックアップコードを安全な場所に保存してください。各コードは一度だけ使用できます。",
"Save these codes in a safe place. Each code can only be used once.": "これらのコードを安全な場所に保存してください。各コードは一度だけ使用できます。",
"Save this token now. You won't be able to view it again after closing this dialog.": "このトークンを今すぐ保存してください。このダイアログを閉じると、再度表示できません。",
@@ -4020,6 +4180,7 @@
"Save tool prices": "ツール価格を保存",
"Save Waffo Pancake settings": "Waffo Pancake 設定を保存",
"Save Worker settings": "Worker設定を保存",
+ "Saved drafts and submitted channels will appear here.": "保存した下書きと送信済みチャネルがここに表示されます。",
"Saved successfully": "保存しました",
"Saving...": "保存中...",
"Scan QR Code": "QRコードをスキャン",
@@ -4089,15 +4250,20 @@
"Select all (filtered)": "フィルタ結果をすべて選択(S)",
"Select all models": "すべてのモデルを選択",
"Select All Visible": "表示中のすべてを選択",
+ "Select an allowed group": "許可されたグループを選択",
"Select an operation mode and enter the amount": "操作モードを選択し、金額を入力してください",
"Select announcement type": "アナウンスメントタイプを選択",
+ "Select at least one allowed channel type": "許可するチャネル種別を1つ以上選択してください",
+ "Select at least one allowed group": "許可グループを1つ以上選択してください",
"Select at least one Auto group or restore global Auto.": "Auto グループを1つ以上選択するか、グローバル Auto に戻してください。",
"Select at least one field to overwrite.": "上書きするフィールドを少なくとも 1 つ選択してください。",
+ "Select at least one model": "モデルを1つ以上選択してください",
"Select at least one target model": "少なくとも1つの対象モデルを選択してください",
"Select at most {{max}} Auto groups": "Auto グループは最大 {{max}} 個まで選択できます",
"Select body font": "本文フォントを選択",
"Select border radius": "角丸を選択",
"Select channel type": "チャネルタイプを選択",
+ "Select channel types": "チャネル種別を選択",
"Select color preset": "カラープリセットを選択",
"Select content width": "コンテンツ幅を選択",
"Select corner radius": "角の丸みを選択",
@@ -4363,6 +4529,7 @@
"Structured output": "構造化出力",
"Submit": "送信",
"Submit directly": "直接送信",
+ "Submit for review": "審査に送信",
"Submit Result": "結果を送信",
"Submit Time": "送信時刻",
"Submitted": "送信済み",
@@ -4391,7 +4558,9 @@
"Successfully deleted {{count}} invalid redemption codes": "{{count}} 件の無効な引き換えコードを削除しました",
"Successfully deleted {{count}} model(s)": "{{count}} 個のモデルを削除しました",
"Successfully disabled {{count}} model(s)": "{{count}} 個のモデルを無効にしました",
+ "Successfully disabled {{count}} model(s) with no available channels": "利用可能チャネルのないモデルを {{count}} 件無効化しました",
"Successfully enabled {{count}} model(s)": "{{count}} 個のモデルを有効にしました",
+ "Successfully enabled {{count}} model(s) with recovered channels": "チャネルが復旧したモデルを {{count}} 件有効化しました",
"Suffix": "サフィックス",
"Suffix Match": "サフィックス一致",
"Summarize text": "テキストを要約",
@@ -4403,7 +4572,6 @@
"Supported Applications": "サポートされているアプリケーション",
"Supported Imagine Models": "対応Imagineモデル",
"Supported modalities": "サポートされるモダリティ",
- "Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.": "対応演算子:eq、ne、gt、gte、lt、lte、in、not_in、contains、not_contains、exists、not_exists。すべてのユーザーを許可する場合は空のままにしてください。",
"Supported parameters": "対応パラメータ",
"Supported variables": "サポートされる変数",
"Supports `-thinking`, `-thinking-": "「-thinking」、「-thinking-」をサポートします",
@@ -4497,12 +4665,14 @@
"Test {{count}} matching models": "{{count}} 件の一致モデルをテスト",
"Test {{count}} selected": "選択済み {{count}} 件をテスト",
"Test a model with a starter prompt, or write your own request below.": "スタータープロンプトでモデルをテストするか、下に独自のリクエストを入力してください。",
+ "Test all": "すべてテスト",
"Test all {{count}} models": "{{count}} 件すべてのモデルをテスト",
"Test All Channels": "すべてのチャネルをテスト",
"Test Channel Connection": "チャネル接続をテスト",
"Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.": "チャネルのテスト、残高の更新、個別・一括・タグ指定でのチャネル有効化/無効化を行います。",
"Test Connection": "接続をテスト",
"Test connectivity for:": "接続性をテスト:",
+ "Test expired": "テスト期限切れ",
"Test failed": "テストに失敗しました",
"Test interval (minutes)": "テスト間隔(分)",
"Test Latency": "レイテンシをテスト",
@@ -4512,6 +4682,8 @@
"Test selected models": "選択したモデルをテスト",
"Testing all enabled channels started. Please refresh to see results.": "有効な全チャネルのテストを開始しました。結果を確認するにはページを更新してください。",
"Testing...": "テスト中...",
+ "Tests are starting...": "テストを開始しています...",
+ "Tests failed": "テスト失敗",
"Text": "テキスト",
"Text description of the desired image": "生成したい画像のテキスト説明",
"Text description of the desired video": "生成したい動画のテキスト説明",
@@ -4530,6 +4702,8 @@
"The binding will complete automatically after authorization": "認証後、バインディングは自動的に完了します",
"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.": "紐付け済み商品はウォレットチャージに使用されます。ユーザーが任意の金額を入力すると、new-api はこの単一の Pancake 商品でチェックアウトを実行し、セッションごとに価格を上書きします。$1 / $5 / $10 の SKU を事前作成する必要はありません。",
"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.": "紐付け済みストアは、この管理画面から new-api が作成するすべての Pancake 商品の親コンテナです。ウォレットチャージ商品とサブスクリプションプラン商品が含まれます。通常は 1 つのストアで十分です。別々の Pancake カタログを本当に運用する場合のみ別のストアを固定してください。",
+ "The channel will leave review or service and can be edited before resubmission.": "チャネルは審査またはサービスから外れ、再送信前に編集できます。",
+ "The contribution will be deleted and any linked channel will be removed from service.": "提供情報は削除され、紐づくチャネルもサービスから削除されます。",
"The deployment node that handled the requests": "リクエストを処理したデプロイノード",
"The effective domain for Passkey registration. Must match the current domain or be its parent domain.": "Passkey登録のための有効なドメイン。現在のドメインまたはその親ドメインと一致する必要があります。",
"The entered text does not match the required text.": "入力したテキストが必要なテキストと一致しません。",
@@ -4537,12 +4711,14 @@
"The exact model identifier as used in API requests.": "APIリクエストで使用される正確なモデル識別子。",
"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.": "以下のモデルには請求タイプ(固定価格 vs 比率請求)の競合があります。変更を続行するには確認してください。",
"The following models in the model redirect have not been added to the \"Models\" list and may fail during invocation due to missing available models:": "モデルリダイレクト内の以下のモデルは\"モデル\"リストに追加されていないため、利用可能なモデルが不足して呼び出しが失敗する可能性があります:",
+ "The linked contributed channel will be removed from service.": "紐づく提供チャネルはサービスから削除されます。",
"The login session that started this Telegram binding is no longer valid.": "この Telegram 連携を開始したログインセッションは無効になりました。",
"The mapped upstream model(s)": "マッピングされたアップストリームモデル",
"The model that was requested": "リクエストされたモデル",
"The model you're looking for doesn't exist.": "お探しのモデルは存在しません。",
"The name displayed across the application": "アプリケーション全体に表示される名前",
"The new token will only be shown once. Copy it and store it securely.": "新しいトークンは一度だけ表示されます。コピーして安全に保管してください。",
+ "The provider returned no models": "プロバイダーからモデルが返されませんでした",
"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations": "OAuthコールバック、Webhook、その他の外部統合に使用されるサーバーの公開URL",
"The requested chat preset does not exist or has been removed.": "要求されたチャットプリセットは存在しないか、削除されました。",
"The reset request stays disabled until a credit is available.": "リセット回数が利用可能になるまで、リセット要求は無効です。",
@@ -4564,6 +4740,7 @@
"Theme preset": "テーマプリセット",
"Theme Settings": "テーマ設定",
"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?": "追加と削除の両方のモデルが保留中ですが、一方のタイプのみ選択されています。選択した項目のみ送信してよろしいですか?",
+ "There are no contributions waiting for review.": "審査待ちの提供はありません。",
"There is a rule for vip billed as premium → use its ratio 0.3": "「vip が premium として課金」のルールあり → ルールの 0.3 を使用",
"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.": "これらはまだ選択中ですが上流のリストにありません。model_mapping にのみソース別名として載る名前は除外されています。保存前に選択を調整してください。",
"These toggles affect whether certain request fields are passed through to the upstream provider.": "これらの切り替えは、特定の要求フィールドがアップストリームプロバイダーに渡されるかどうかに影響します。",
@@ -4610,6 +4787,7 @@
"This site currently has {{count}} models enabled": "このサイトでは現在 {{count}} 個のモデルが有効です",
"This Telegram account is already bound.": "この Telegram アカウントはすでに連携されています。",
"This Telegram binding request has expired or has already been used.": "この Telegram 連携リクエストは期限切れか、すでに使用されています。",
+ "This test result is older than 30 minutes. Run all tests again before submitting.": "このテスト結果は30分以上前のものです。送信前にすべてのテストを再実行してください。",
"This tier catches any request that did not match earlier tiers.": "この段階は、前の段階に一致しなかったすべてのリクエストを受け取ります。",
"this token group": "このトークングループ",
"This Uptime Kuma group will be removed from the list.": "この Uptime Kuma グループはリストから削除されます。",
@@ -4623,6 +4801,8 @@
"This will delete all": "これによりすべて削除されます",
"This will delete all channel affinity cache entries still in memory.": "メモリ内のすべてのチャネルアフィニティキャッシュエントリが削除されます。",
"This will delete temporary cache files that have not been used for more than 10 minutes": "10分以上使用されていない一時キャッシュファイルが削除されます",
+ "This will disable all currently enabled models that have no available channels. Continue?": "利用可能なチャネルがない有効モデルをすべて無効化します。続行しますか?",
+ "This will enable models that were auto-disabled by channel availability and now have recovered channels. Manually disabled models are not changed. Continue?": "チャネル可用性により自動無効化され、現在チャネルが復旧したモデルのみを有効化します。手動無効化モデルは変更しません。続行しますか?",
"This will extend the deployment by the specified hours.": "これにより、デプロイメントを指定された時間分延長します。",
"This will immediately invalidate your existing access token. Any applications or scripts using it will stop working.": "既存のアクセストークンは直ちに無効になります。使用中のアプリケーションやスクリプトは動作しなくなります。",
"This will permanently delete all manually and automatically disabled channels. This action cannot be undone.": "手動および自動で無効化されたすべてのチャネルを完全に削除します。この操作は元に戻せません。",
@@ -4773,16 +4953,21 @@
"Total:": "合計:",
"TPM": "TPM",
"Track per-request consumption to power usage analytics. Keeping this on increases database writes.": "リクエストごとの消費を追跡し、使用状況分析に利用します。これをオンにすると、データベースへの書き込みが増加します。",
+ "Track review, availability, and deletion status for every channel.": "各チャネルの審査、可用性、削除状態を追跡します。",
"Track usage, costs and performance with real-time analytics": "リアルタイム分析で使用量、コスト、パフォーマンスを追跡",
"Tracked apps": "追跡中のアプリ",
"Tracks current account base limits and additional metered usage on Codex upstream.": "Codex 上でのアカウント基礎枠と追加従量の利用量を表示します。",
"Trading insights, accounting, advisory": "トレーディング分析・会計・アドバイザリー",
"Transfer": "振替",
+ "Transfer all": "全額振替",
+ "Transfer amount": "振替額",
"Transfer Amount": "振替金額",
"Transfer failed": "転送に失敗しました",
+ "Transfer rewards": "報酬を振替",
"Transfer Rewards": "報酬の振替",
"Transfer successful": "転送が成功しました",
"Transfer to Balance": "残高への振替",
+ "Transfer to wallet": "ウォレットへ振替",
"Translation": "翻訳",
"Transparent Billing": "透明性のある請求",
"Trend": "トレンド",
@@ -4834,6 +5019,9 @@
"Unable to read clipboard": "クリップボードを読み取れません",
"Unauthorized": "未認証",
"Unauthorized Access": "不正アクセス",
+ "Unavailable": "利用不可",
+ "Unavailable deletion threshold (hours)": "利用不可時の削除しきい値(時間)",
+ "Unavailable since": "利用不可開始",
"Unbind": "連携解除",
"Unbind failed": "連携解除に失敗しました",
"Unbound {{provider}}": "{{provider}}の連携を解除しました",
@@ -4861,6 +5049,7 @@
"Untitled": "無題",
"Untrusted upstream data:": "信頼されていないアップストリームデータ:",
"Unused": "未使用",
+ "Up to 100 unique models can be tested in one contribution.": "1件の提供で最大100個の一意なモデルをテストできます。",
"Up to 4 strings that stop generation": "生成を停止する文字列を最大 4 個まで",
"Update": "更新",
"Update All Balances": "すべての残高を更新",
@@ -4895,6 +5084,7 @@
"Updated a vendor": "ベンダーを更新しました",
"Updated channel {{name}} (ID: {{id}})": "チャネル {{name}} を更新しました(ID: {{id}})",
"Updated daily": "毎日更新",
+ "Updated model statuses in batch": "モデルのステータスを一括更新しました",
"Updated successfully": "正常に更新されました",
"Updated system setting {{key}}": "システム設定 {{key}} を更新しました",
"Updated user {{username}} (ID: {{id}})": "ユーザー {{username}} を更新しました(ID: {{id}})",
@@ -4952,6 +5142,7 @@
"Usage logs": "使用ログ",
"Usage Logs": "利用履歴",
"Usage mode": "利用モード",
+ "Usage reward": "利用報酬",
"Usage-based": "使用量ベース",
"USD": "USD",
"USD Exchange Rate": "USD 為替レート",
@@ -4978,6 +5169,7 @@
"Use the full-width table to scan prices, then select a row to edit it here.": "表で価格を確認し、行を選択してここで編集します。",
"Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.": "トークンに設定されたグループを使います。トークンにグループがなければユーザーグループを使います。auto グループは自動割り当て順を上から順に試します。",
"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.": "料金グループ表で倍率と、トークン作成ドロップダウンに表示するかどうかを管理します。",
+ "Use the provider base URL without a model-specific path.": "モデル固有のパスを含まないプロバイダーのベースURLを使用してください。",
"Use this callback URL pattern when registering a custom OAuth provider.": "カスタム OAuth プロバイダーを登録するときは、このコールバック URL 形式を使用します。",
"Use this token for API authentication": "API認証にはこのトークンを使用してください",
"Use your Passkey": "パスキーを使用",
@@ -5001,6 +5193,7 @@
"User Analytics": "ユーザー統計",
"User Consumption Ranking": "ユーザー消費ランキング",
"User Consumption Trend": "ユーザー消費トレンド",
+ "User contribution view": "ユーザー提供画面",
"User created successfully": "ユーザーの作成に成功しました",
"User dashboard and quota controls.": "ユーザーダッシュボードとクォータ制御。",
"User deleted successfully": "ユーザーを削除しました",
@@ -5038,8 +5231,10 @@
"Users must wait for a successful drawing before upscales or variations.": "アップスケールやバリエーションを行う前に、ユーザーは成功した描画を待つ必要があります。",
"Users of vip, when billed as premium, pay ratio": "vip グループのユーザーが premium として課金されるときの倍率は",
"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.": "ユーザーにはユーザー選択可のグループだけが表示されます。選択不可グループも管理者は割り当てできます。",
+ "Users review this exact content before every first submission or resubmission.": "ユーザーは初回送信または再送信のたびに、この内容を確認します。",
"uses": "使用回数",
"Using the complete global Auto order ({{count}} groups)": "グローバル Auto の全順序を使用中({{count}} グループ)",
+ "Validation and submission": "検証と送信",
"Validity": "有効期間",
"Validity Period": "有効期間",
"Value": "値",
@@ -5074,6 +5269,7 @@
"Verification scope is missing": "検証スコープがありません",
"Verify": "認証",
"Verify and Sign In": "確認してサインイン",
+ "Verify every current revision independently before approval.": "承認前に、現在の各リビジョンを個別に検証してください。",
"Verify routing with Playground or your client": "Playground またはクライアントでルーティングを確認",
"Verify Setup": "設定を確認",
"Verify to view channel key": "認証してチャネルキーを表示",
@@ -5094,6 +5290,7 @@
"View all currently available models": "現在利用可能なすべてのモデルを表示",
"View channel lists and details without secrets.": "シークレットを含まないチャネル一覧と詳細を表示します。",
"View channel secrets": "チャンネルシークレットを表示",
+ "View contribution details": "提供の詳細を表示",
"View detailed information about this user including balance, usage statistics, and invitation details.": "残高、使用統計、招待の詳細など、このユーザーに関する詳細情報を表示します。",
"View details": "詳細を表示",
"View document": "ドキュメントを表示",
@@ -5150,6 +5347,7 @@
"Wallet Management": "ウォレット管理",
"Wallet management and personal preferences.": "ウォレット管理と個人設定。",
"Wallet Only": "ウォレットのみ",
+ "Wallet transfer": "ウォレット振替",
"Warning": "警告",
"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.": "警告: Base URL は /v1 で終わってはいけません。New API が自動的に処理します。これによりリクエストが失敗する可能性があります。",
"Warning: Disabling 2FA will make your account less secure.": "警告: 2FAを無効にすると、アカウントのセキュリティが低下します。",
@@ -5218,6 +5416,9 @@
"Wire encoding for the embedding vectors": "ベクトルの転送エンコーディング",
"with conflicts": "競合あり",
"with the API key from your token settings.": "をトークン設定の API キーに置き換えてください。",
+ "Withdraw": "取り下げ",
+ "Withdraw channel contribution?": "チャネル提供を取り下げますか?",
+ "Withdraw contribution": "提供を取り下げ",
"Without additional conditions, only the type above is used for pruning.": "追加条件がない場合、上記のtypeのみが削除に使用されます。",
"Worked example": "具体例",
"Worker Access Key": "Workerアクセスキー",
diff --git a/web/src/i18n/locales/ru.json b/web/src/i18n/locales/ru.json
index 4ea860704561..add7eae889f0 100644
--- a/web/src/i18n/locales/ru.json
+++ b/web/src/i18n/locales/ru.json
@@ -61,6 +61,7 @@
"{{field}} updated to {{value}}": "{{field}} обновлено на {{value}}",
"{{field}} updated to {{value}} for tag: {{tag}}": "{{field}} обновлено на {{value}} для тега: {{tag}}",
"{{method}} {{route}}": "{{method}} {{route}}",
+ "{{milliseconds}} ms": "{{milliseconds}} мс",
"{{modality}} not supported": "{{modality}} не поддерживается",
"{{modality}} supported": "{{modality}} поддерживается",
"{{n}} model(s) selected": "Выбрано моделей: {{n}}",
@@ -98,6 +99,7 @@
"1. Create an application in your Gotify server": "1. Создайте приложение на вашем сервере Gotify",
"10 / page": "10 / страница",
"100 / page": "100 / страница",
+ "100 basis points equals 1% of billed quota.": "100 базисных пунктов равны 1% тарифицируемой квоты.",
"14 Days": "14 дней",
"192.168.1.1
10.0.0.0/8": "192.168.1.1
10.0.0.0/8",
"1M": "1М",
@@ -118,9 +120,11 @@
"7 days ago": "7 дней назад",
"80,443,8080": "80,443,8080",
"A billing multiplier. Lower ratios mean lower API call costs.": "Множитель тарификации. Чем ниже коэффициент, тем ниже стоимость вызовов API.",
+ "A contribution can contain at most 100 models": "В одном предоставлении может быть не более 100 моделей",
"A focused home for keys, balance, routing, and service health.": "Единый экран для ключей, баланса, маршрутов и состояния сервиса.",
"About": "О проекте",
"About {{days}} days left": "Примерно {{days}} дней",
+ "Accept the channel contribution agreement": "Принять соглашение о предоставлении канала",
"Accept Unpriced Models": "Принимать модели без цены",
"Accepts a JSON array of model identifiers that support the Imagine API.": "Принимает JSON-массив идентификаторов моделей, поддерживающих Imagine API.",
"Accepts comma-separated status codes and inclusive ranges.": "Принимает коды статуса, разделенные запятыми, и включающие диапазоны.",
@@ -167,6 +171,7 @@
"Add a new model to the system by providing the necessary information.": "Добавьте новую модель в систему, предоставив необходимую информацию.",
"Add a new user by providing necessary info.": "Добавьте нового пользователя, предоставив необходимую информацию.",
"Add a new vendor to the system": "Добавить нового поставщика в систему",
+ "Add an allowed group": "Добавить разрешённую группу",
"Add an extra layer of security to your account": "Добавьте дополнительный уровень безопасности к вашей учетной записи",
"Add and submit": "Добавить и отправить",
"Add Announcement": "Добавить объявление",
@@ -244,6 +249,8 @@
"Administer user accounts and roles.": "Управление учетными записями пользователей и ролями.",
"Administrator account": "Учетная запись администратора",
"Administrator username": "Имя пользователя администратора",
+ "Administrator verification": "Проверка администратором",
+ "Administrator verification started": "Проверка администратором запущена",
"Advance next reset time": "Перенести следующее время сброса",
"Advanced": "Расширенные",
"Advanced Configuration": "Расширенная конфигурация",
@@ -272,6 +279,12 @@
"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.": "объединяет 50+ ИИ-провайдеров за единым API. Управляйте доступом, отслеживайте затраты и масштабируйтесь без усилий.",
"Aggregation bucket": "Интервал агрегации",
"AGPL v3.0 License": "Лицензия AGPL v3.0",
+ "Agreement content is required": "Содержимое соглашения обязательно",
+ "Agreement Markdown": "Markdown соглашения",
+ "Agreement version": "Версия соглашения",
+ "Agreement version is required": "Версия соглашения обязательна",
+ "Agreement version must not exceed 64 characters": "Версия соглашения не должна превышать 64 символа",
+ "Agreement version: {{version}}": "Версия соглашения: {{version}}",
"AI Application Infrastructure Foundation": "Инфраструктурная основа для ИИ-приложений",
"AI model testing environment": "Среда тестирования ИИ моделей",
"AI models": "Модели ИИ",
@@ -287,6 +300,7 @@
"All API tokens": "Все API-ключи",
"All categories": "Все категории",
"All conditions must match before this tier is used.": "Все условия должны совпасть, прежде чем будет использован этот уровень.",
+ "All contributions": "Все предоставления",
"All edits are overwrite operations. Leave fields empty to keep current values unchanged.": "Все изменения являются операциями перезаписи. Оставьте поля пустыми, чтобы сохранить текущие значения без изменений.",
"All files exceed the maximum size.": "Все файлы превышают максимальный размер.",
"All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.": "Все названия групп управляются здесь. Коэффициент применяется, когда вызовы тарифицируются по этой группе; коэффициент пополнения применяется к пользователям, состоящим в этой группе.",
@@ -302,6 +316,7 @@
"All Sync Status": "Все статусы синхронизации",
"All systems operational": "Все системы работают штатно",
"All Tags": "Все теги",
+ "All tests passed": "Все тесты пройдены",
"All Types": "Все типы",
"All upstream data is trusted": "Все вышестоящие данные являются доверенными",
"All users": "Все пользователи",
@@ -341,6 +356,8 @@
"Allow using models without price configuration": "Разрешить использование моделей без настройки цен",
"Allow wallet balance after quota used up": "Разрешить использование баланса кошелька после исчерпания квоты",
"Allowed": "Разрешено",
+ "Allowed channel types": "Разрешённые типы каналов",
+ "Allowed groups": "Разрешённые группы",
"Allowed Origins": "Разрешенные Origins",
"Allowed Ports": "Разрешенные порты",
"Already have an account?": "Уже есть аккаунт?",
@@ -378,6 +395,8 @@
"API Addresses": "Адреса API",
"API Base URL (Important: Not Chat API) *": "Базовый URL API (Важно: Не Chat API) *",
"API Base URL *": "Базовый URL API *",
+ "API endpoint": "Конечная точка API",
+ "API endpoint is too long": "Конечная точка API слишком длинная",
"API Endpoints": "Конечные точки API",
"API Info": "Информация об API",
"API info added. Click \"Save Settings\" to apply.": "Информация API добавлена. Нажмите «Сохранить настройки», чтобы применить.",
@@ -397,8 +416,10 @@
"API key from the provider": "Ключ API от провайдера",
"API key is loading, please try again in a moment": "API-ключ загружается, пожалуйста, попробуйте еще раз через мгновение",
"API key is required": "Требуется ключ API",
+ "API key is too long": "Ключ API слишком длинный",
"API Key mode (does not support batch creation)": "Режим API-ключа (не поддерживает пакетное создание)",
"API Key mode: use APIKey|Region": "Режим API Key: use APIKey|Region",
+ "API key must be a single line": "API-ключ должен быть указан в одной строке",
"API Key updated successfully": "API ключ успешно обновлен",
"API Keys": "Ключи API",
"API Private Key": "Секретный ключ API",
@@ -420,6 +441,7 @@
"appended": "добавлено",
"Application": "Приложение",
"Applied {{name}} pricing to {{count}} models": "Тариф {{name}} применён к {{count}} моделям",
+ "Applied automatically when a contribution is approved.": "Применяется автоматически после одобрения предоставления.",
"Applied upstream model changes to {{count}} channels": "Изменения вышестоящих моделей применены к {{count}} каналам",
"Applied upstream model changes to channel (ID: {{id}})": "Изменения вышестоящих моделей применены к каналу (ID: {{id}})",
"Applies to custom completion endpoints. JSON map of model → ratio.": "Применяется к пользовательским конечным точкам завершения. JSON-карта модель → коэффициент.",
@@ -430,6 +452,11 @@
"Apply reset": "Выполнить сброс",
"Apply Sync": "Применить синхронизацию",
"Applying...": "Применение...",
+ "Approval is bound to this administrator test run ID.": "Одобрение привязано к этому ID тестового запуска администратора.",
+ "Approve": "Одобрить",
+ "Approved": "Одобрено",
+ "Approved channel tag": "Тег одобренного канала",
+ "Approved channels are created with these routing and removal defaults.": "Одобренные каналы создаются с этими параметрами маршрутизации и удаления по умолчанию.",
"Approx.": "Примерно.",
"apps": "приложений",
"Apps": "Приложения",
@@ -460,6 +487,7 @@
"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 is selected": "Выбрана хотя бы одна модель",
"At least one model regex pattern is required": "Требуется хотя бы один шаблон регулярного выражения модели",
"At least one valid key source is required": "Требуется хотя бы один действительный источник ключа",
"Attach": "Прикрепить",
@@ -493,6 +521,7 @@
"auth.resetPasswordConfirm.description": "Подтвердите запрос на сброс, чтобы создать новый пароль.",
"auth.resetPasswordConfirm.retry": "Повторить ({{seconds}}с)",
"auth.resetPasswordConfirm.success": "Ваш пароль успешно сброшен",
+ "Authenticated channel contribution and reward workspace.": "Авторизованное рабочее пространство предоставления каналов и вознаграждений.",
"Authentication": "Аутентификация",
"Authentication Method": "Метод аутентификации",
"Authenticator code": "Код аутентификатора",
@@ -513,12 +542,16 @@
"Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.": "Авто согласовывает HTTP/2 при наличии. HTTP/1.1 использует несколько keep-alive соединений при параллельных запросах.",
"Auto refresh": "Автообновление",
"Auto Sync Upstream Models": "Автоматическая синхронизация моделей провайдера",
+ "Auto-disable models with no available channels": "Автоотключение моделей без доступных каналов",
"Auto-disable rules": "Правила автоотключения",
"Auto-disable status codes": "Коды автоотключения",
"Auto-disable-enabled channels only": "Только каналы с автовыключением",
"Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.": "В этом режиме проверяются только каналы с включённым автоматическим отключением, которые не были отключены вручную.",
+ "Auto-disabled": "Авто-откл.",
"Auto-discover": "Автообнаружение",
"Auto-discovers endpoints from the provider": "Автоматически обнаруживает конечные точки от провайдера",
+ "Auto-enable models disabled by this setting when a channel recovers": "Автоматически включать модели, отключённые этой настройкой, когда канал восстанавливается",
+ "Auto-enabled": "Авто-вкл.",
"Auto-fill when one field exists and another is missing": "Автозаполнение, когда одно поле есть, а другое отсутствует",
"Auto-refreshing every {{seconds}}s": "Автообновление каждые {{seconds}} с",
"Auto-retry status codes": "Коды авто-повтора",
@@ -535,8 +568,9 @@
"Available disk space": "Доступное дисковое пространство",
"Available Models": "Доступные модели",
"Available reset credits": "Доступные сбросы лимита",
+ "Available reward": "Доступное вознаграждение",
"Available Rewards": "Доступные награды",
- "Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.": "Доступные переменные: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, а также пути вида {{current.roles}}.",
+ "Available: {{amount}}": "Доступно: {{amount}}",
"Average latency": "Средняя задержка",
"Average latency, TTFT, and success rate by group": "Средняя задержка, TTFT и доля успешных запросов по группам",
"Average latency, TTFT, TPS, and success rate": "Средняя задержка, TTFT, TPS и доля успешных запросов",
@@ -599,10 +633,12 @@
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "Пакетное обнаружение завершено: {{channels}} каналов, {{add}} для добавления, {{remove}} для удаления, {{fails}} ошибок",
"Batch detection failed": "Пакетное обнаружение не удалось",
"Batch disable failed": "Пакетное отключение не удалось",
+ "Batch Disable Models with No Channels": "Отключить модели без доступных каналов",
"Batch Edit": "Пакетное редактирование",
"Batch edit all channels with this tag. Leave fields empty to keep current values.": "Пакетно редактировать все каналы с этим тегом. Оставьте поля пустыми, чтобы сохранить текущие значения.",
"Batch Edit by Tag": "Пакетное редактирование по тегу",
"Batch enable failed": "Пакетное включение не удалось",
+ "Batch Enable Models with Recovered Channels": "Включить модели с восстановленными каналами",
"Batch Operations": "Пакетные операции",
"Batch processing failed": "Пакетная обработка не удалась",
"Batch set tag for {{count}} channels": "Тег пакетно задан для {{count}} каналов",
@@ -743,6 +779,7 @@
"Change To": "Изменить на",
"Changed Fields": "Изменённые поля",
"Changes are written to the settings draft on save.": "Изменения будут записаны в черновик настроек при сохранении.",
+ "Changing the version requires acceptance on the next submission.": "После изменения версии при следующей отправке потребуется повторное согласие.",
"Changing...": "Изменение...",
"Channel": "Канал",
"Channel {{name}}": "Канал {{name}}",
@@ -751,6 +788,10 @@
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.": "Привязка к каналу повторно использует последний успешный канал на основе ключей, извлечённых из контекста запроса или тела JSON.",
"Channel Affinity: Upstream Cache Hit": "Привязка к каналу: попадание в кэш upstream",
"Channel consistency repaired: {{success}} succeeded, {{fails}} failed": "Согласованность каналов восстановлена: успешно {{success}}, ошибок {{fails}}",
+ "Channel Contribution Agreement": "Соглашение о предоставлении канала",
+ "Channel Contribution Review": "Проверка предоставленных каналов",
+ "Channel contribution settings": "Настройки предоставления каналов",
+ "Channel Contributions": "Предоставление каналов",
"Channel copied successfully": "Канал успешно скопирован",
"Channel created successfully": "Канал успешно создан",
"Channel deleted successfully": "Канал успешно удалён",
@@ -764,9 +805,14 @@
"Channel key unlocked": "Ключ канала разблокирован",
"Channel Management": "Управление каналами",
"Channel models": "Модели каналов",
+ "Channel name": "Название канала",
"Channel name is required": "Имя канала обязательно",
+ "Channel name must not exceed 128 characters": "Название канала не должно превышать 128 символов",
+ "Channel tag is required": "Тег канала обязателен",
+ "Channel tag must not exceed 64 characters": "Тег канала не должен превышать 64 символа",
"Channel test completed": "Тест канала завершён",
"Channel test mode": "Режим проверки каналов",
+ "Channel type": "Тип канала",
"Channel type is required": "Тип канала обязателен",
"Channel updated successfully": "Канал успешно обновлён",
"Channel-specific settings (JSON format)": "Настройки, специфичные для канала (формат JSON)",
@@ -956,6 +1002,7 @@
"Conditions (AND)": "Условия (AND)",
"Confidence": "Уверенность",
"Configuration": "Конфигурация",
+ "Configuration changes invalidate the previous test result.": "Изменения конфигурации аннулируют предыдущий результат теста.",
"Configuration File": "Файл конфигурации",
"Configuration for Creem payment integration": "Конфигурация для интеграции платежей Creem",
"Configuration for Epay payment integration": "Конфигурация для интеграции платежей Epay",
@@ -991,6 +1038,7 @@
"Configure Waffo payment aggregation platform integration": "Настроить интеграцию платёжной платформы Waffo",
"Configure your account behavior preferences": "Настроить предпочтения поведения вашей учетной записи",
"Configure your account preferences and integrations": "Настроить параметры и интеграции вашей учетной записи",
+ "Configured": "Настроено",
"Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.": "Сохраняется как JSON PayMethods. Значение type определяет платежный сценарий: stripe для Stripe, waffo_pancake для Waffo Pancake, остальные значения отправляются в Epay как параметр type.",
"Configured routes and latency checks": "Настроенные маршруты и проверки задержки",
"Confirm": "Подтверждение",
@@ -1029,6 +1077,7 @@
"Connect through OpenAI, Claude, Gemini, and other compatible API routes": "Подключайтесь через OpenAI, Claude, Gemini и другие совместимые API-маршруты",
"Connected to io.net service normally.": "Соединение с сервисом io.net установлено.",
"Connection closed": "Соединение закрыто",
+ "Connection details": "Параметры подключения",
"Connection error": "Ошибка соединения",
"Connection failed": "Не удалось подключиться",
"Connection info detected in clipboard": "В буфере обмена найдены данные подключения",
@@ -1059,7 +1108,26 @@
"Continue with OIDC": "Продолжить с OIDC",
"Continue with Telegram": "Продолжить с Telegram",
"Continue with WeChat": "Продолжить с WeChat",
+ "Continuous failure time before automatic deletion.": "Время непрерывного сбоя до автоматического удаления.",
"Contract review, compliance, summarisation": "Анализ контрактов, комплаенс, резюме",
+ "Contribute": "Предоставить",
+ "Contribute a channel": "Предоставить канал",
+ "Contribution approved": "Предоставление одобрено",
+ "Contribution channel connection settings are read-only here. Submit sensitive changes through channel contribution review; only tag, priority, and weight can be edited.": "Параметры подключения предоставленного канала здесь доступны только для чтения. Изменения чувствительных настроек отправляйте на повторную проверку вклада; здесь можно менять только тег, приоритет и вес.",
+ "Contribution deleted": "Предоставление удалено",
+ "Contribution details": "Сведения о предоставлении",
+ "Contribution details are incomplete": "Сведения о предоставлении неполны",
+ "Contribution draft saved": "Черновик предоставления сохранён",
+ "Contribution eligibility": "Условия предоставления",
+ "Contribution rejected": "Предоставление отклонено",
+ "Contribution review": "Проверка предоставления",
+ "Contribution settings saved": "Настройки предоставления сохранены",
+ "Contribution settings unavailable": "Настройки предоставления недоступны",
+ "Contribution submitted for review": "Предоставление отправлено на проверку",
+ "Contribution withdrawn": "Предоставление отозвано",
+ "Contributions will appear here when users create drafts.": "Предоставления появятся здесь после создания пользователями черновиков.",
+ "Contributor": "Владелец канала",
+ "Control eligibility, routing defaults, health removal, rewards, and the agreement.": "Управляйте условиями, маршрутизацией, удалением по состоянию, вознаграждениями и соглашением.",
"Control which models are exposed and which groups may use them.": "Управляйте тем, какие модели доступны и какие группы могут их использовать.",
"Controls how much the model thinks before answering": "Регулирует глубину размышлений модели перед ответом",
"Controls randomness and creativity": "Управляет случайностью и креативностью",
@@ -1198,6 +1266,7 @@
"Current Billing": "Текущие счета",
"Current Cache Size": "Текущий размер кэша",
"Current domain": "Текущий домен",
+ "Current draft is saved": "Текущий черновик сохранён",
"Current email: {{email}}. Enter a new email to change.": "Текущий email: {{email}}. Введите новый email для изменения.",
"Current key": "Текущий ключ",
"Current legacy JSON is invalid, cannot append": "Текущий JSON старого формата невалиден, добавление невозможно",
@@ -1206,6 +1275,7 @@
"Current Password": "Текущий пароль",
"Current Price": "Текущая цена",
"Current quota": "Текущая квота",
+ "Current reward rate": "Текущая ставка вознаграждения",
"Current Value": "Текущее значение",
"Current version": "Текущая версия",
"Current:": "Текущий:",
@@ -1270,6 +1340,7 @@
"Default Bearer": "Bearer по умолчанию",
"Default Collapse Sidebar": "Сворачивать боковую панель по умолчанию",
"Default consumption chart": "График потребления по умолчанию",
+ "Default is 0 until routing is intentionally enabled.": "По умолчанию 0, пока маршрутизация не будет включена явно.",
"Default Max Tokens": "Максимальное количество токенов по умолчанию",
"Default model call chart": "График вызовов моделей по умолчанию",
"Default range": "Диапазон по умолчанию",
@@ -1295,6 +1366,7 @@
"Delete all stale": "Удалить все устаревшие",
"Delete Auto-Disabled": "Удалить автоматически отключенные",
"Delete Channel": "Удалить канал",
+ "Delete channel contribution?": "Удалить предоставленный канал?",
"Delete Channels?": "Удалить каналы?",
"Delete condition": "Удалить условие",
"Delete Condition": "Удалить условие",
@@ -1359,6 +1431,7 @@
"Describe": "Описание",
"Describe this model...": "Опишите эту модель...",
"Describe this vendor...": "Опишите этого поставщика...",
+ "Describe what must be corrected": "Опишите, что необходимо исправить",
"Description": "Описание",
"Description is required": "Описание обязательно",
"Designed and Developed by": "Разработано и создано",
@@ -1385,6 +1458,7 @@
"Disable": "Отключить",
"Disable 2FA": "Отключить 2FA",
"Disable All": "Отключить все",
+ "Disable Models with No Channels?": "Отключить модели без доступных каналов?",
"Disable on failure": "Отключить при сбое",
"Disable selected channels": "Отключить выбранные каналы",
"Disable selected models": "Отключить выбранные модели",
@@ -1457,6 +1531,7 @@
"Downgrade to pre-purchase group": "Понизить до группы до покупки",
"Downgrade to this group after the subscription expires": "Понизить до этой группы после истечения подписки",
"Download": "Скачать",
+ "Draft": "Черновик",
"Drag {{group}} to reorder": "Перетащите {{group}}, чтобы изменить порядок",
"Draw": "Рисование",
"Drawing": "Рисование",
@@ -1488,7 +1563,6 @@
"e.g. my-gitlab": "например, my-gitlab",
"e.g. New API Console": "напр. консоль New API",
"e.g. openid profile email": "например, openid profile email",
- "e.g. Requires level {{required}}; your current level is {{current}}": "напр. Требуется уровень {{required}}; ваш текущий уровень — {{current}}",
"e.g. Suitable for light usage": "напр. Подходит для лёгкого использования",
"e.g. This request does not meet access policy": "напр. Этот запрос не соответствует политике доступа",
"e.g., 0.95": "напр., 0.95",
@@ -1532,10 +1606,12 @@
"Edit": "Редактировать",
"Edit {{title}}": "Редактировать {{title}}",
"Edit all channels with tag:": "Редактировать все каналы с тегом:",
+ "Edit and resubmit": "Изменить и отправить повторно",
"Edit Announcement": "Редактировать объявление",
"Edit API Shortcut": "Редактировать ярлык API",
"Edit billing ratios and user-selectable groups in one table.": "Редактируйте коэффициенты тарификации и доступные пользователю группы в одной таблице.",
"Edit Channel": "Редактировать канал",
+ "Edit channel contribution": "Изменить предоставленный канал",
"Edit channel routing": "Изменение маршрутизации каналов",
"Edit chat preset": "Редактировать пресет чата",
"Edit discount tier": "Редактировать уровень скидки",
@@ -1596,6 +1672,7 @@
"Enable io.net model deployment service in console": "Включить сервис развертывания моделей io.net в консоли",
"Enable LinuxDO OAuth": "Включить LinuxDO OAuth",
"Enable model performance metrics": "Включить метрики производительности моделей",
+ "Enable Models with Recovered Channels?": "Включить модели с восстановленными каналами?",
"Enable OIDC": "Включить OIDC",
"Enable or disable this channel": "Включить или отключить этот канал",
"Enable or disable this model": "Включить или отключить эту модель",
@@ -1624,6 +1701,7 @@
"Enabled all channels with tag: {{tag}}": "Все каналы с тегом {{tag}} включены",
"Enabled channels with tag {{tag}}": "Включены каналы с тегом {{tag}}",
"Enabled Status": "Статус включения",
+ "Enabling this setting immediately disables all currently enabled models with no available channels. Turning it off later will not automatically re-enable those models. Continue?": "При включении этого параметра все активные модели без доступных каналов будут немедленно отключены. Последующее отключение параметра не включит эти модели автоматически. Продолжить?",
"Enabling...": "Включается...",
"Encourages introducing new topics": "Поощряет введение новых тем",
"Encourages new topics": "Стимулирует новые темы",
@@ -1635,6 +1713,7 @@
"Endpoint": "Точка доступа",
"Endpoint config": "Конфигурация конечной точки",
"Endpoint Configuration": "Конфигурация конечной точки",
+ "Endpoint type": "Тип конечной точки",
"Endpoint Type": "Тип конечной точки",
"Endpoint, provider-specific settings, and credentials.": "Эндпоинт, настройки провайдера и учетные данные.",
"Endpoint:": "Конечная точка:",
@@ -1650,8 +1729,10 @@
"Enter a positive integer": "Введите положительное целое число",
"Enter a positive or negative amount to adjust the quota": "Введите положительную или отрицательную сумму для корректировки квоты",
"Enter a react-icons component name. Invalid names show no icon.": "Введите имя компонента react-icons. Недопустимые имена не отображают значок.",
+ "Enter a valid API endpoint": "Введите допустимую конечную точку API",
"Enter a valid email or leave blank": "Введите действительный email или оставьте пустым",
"Enter a value and press Enter": "Введите значение и нажмите Enter",
+ "Enter a whole number within the allowed range": "Введите целое число в допустимом диапазоне",
"Enter amount in {{currency}}": "Введите сумму в {{currency}}",
"Enter amount in tokens": "Введите сумму в токенах",
"Enter announcement content (supports Markdown & HTML)": "Введите содержимое объявления (поддерживает Markdown и HTML)",
@@ -1689,6 +1770,7 @@
"Enter password (8-20 characters)": "Введите пароль (8-20 символов)",
"Enter quota in {{currency}}": "Введите квоту в {{currency}}",
"Enter quota in tokens": "Введите квоту в токенах",
+ "Enter reward quota": "Введите квоту вознаграждения",
"Enter secret key": "Введите секретный ключ",
"Enter system prompt (user prompt takes priority)": "Введите системный промпт (пользовательский промпт имеет приоритет)",
"Enter tag name (optional)": "Введите имя тега (необязательно)",
@@ -1699,6 +1781,7 @@
"Enter the full URL of your Gotify server": "Введите полный URL вашего сервера Gotify",
"Enter the knowledge base ID": "Введите ID базы знаний",
"Enter the path before /suno, usually just the domain": "Введите путь перед /suno, обычно это просто домен",
+ "Enter the provider API key": "Введите ключ API провайдера",
"Enter the quota amount in {{currency}}": "Введите сумму квоты в {{currency}}",
"Enter the quota amount in tokens": "Введите количество квоты в токенах",
"Enter the verification code": "Введите проверочный код",
@@ -1738,8 +1821,8 @@
"Error Type (optional)": "Тип ошибки (необязательно)",
"Estimated cost": "Примерная стоимость",
"Estimated quota cost": "Ориентир стоимости квоты",
- "Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.": "Проверяет поля ответа с данными пользователя от провайдера. Условия и вложенные группы используют логику and/or.",
"Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.": "Каждое имя группы из таблицы тарифов используется в двух местах: у пользователя (группа пользователя, назначается администратором) и у токена (группа токена, выбирается при создании). Один набор имён — две разные роли.",
+ "Every model has administrator pricing": "Для каждой модели настроена цена администратором",
"Every other device will lose access immediately. This device will remain signed in.": "Все остальные устройства немедленно потеряют доступ. Это устройство останется в системе.",
"Everything configured for this group, in one place.": "Все настройки этой группы в одном месте.",
"Exact": "Точное",
@@ -1802,6 +1885,9 @@
"Failed to {{action}} user": "Не удалось выполнить {{action}} для пользователя",
"Failed to adjust quota": "Не удалось изменить квоту",
"Failed to apply overwrite.": "Не удалось применить перезапись.",
+ "Failed to approve contribution": "Не удалось одобрить предоставление",
+ "Failed to batch disable models": "Не удалось массово отключить модели",
+ "Failed to batch enable models": "Не удалось массово включить модели",
"Failed to bind email": "Не удалось привязать email",
"Failed to change password": "Не удалось изменить пароль",
"Failed to check for updates": "Не удалось проверить обновления",
@@ -1827,6 +1913,7 @@
"Failed to delete API key": "Не удалось удалить API ключ",
"Failed to delete API keys": "Не удалось удалить API ключи",
"Failed to delete channel": "Не удалось удалить канал",
+ "Failed to delete contribution": "Не удалось удалить предоставление",
"Failed to delete disabled channels": "Не удалось удалить отключённые каналы",
"Failed to delete failed models": "Не удалось удалить неуспешные модели",
"Failed to delete group": "Не удалось удалить группу",
@@ -1864,6 +1951,10 @@
"Failed to load": "Не удалось загрузить",
"Failed to load API keys": "Не удалось загрузить API ключи",
"Failed to load billing history": "Не удалось загрузить историю платежей",
+ "Failed to load contribution": "Не удалось загрузить предоставление",
+ "Failed to load contribution rewards": "Не удалось загрузить вознаграждения",
+ "Failed to load contribution settings": "Не удалось загрузить настройки предоставления",
+ "Failed to load contributions": "Не удалось загрузить список предоставлений",
"Failed to load enabled models": "Не удалось загрузить включённые модели",
"Failed to load home page content": "Не удалось загрузить содержимое главной страницы",
"Failed to load image": "Не удалось загрузить изображение",
@@ -1886,6 +1977,7 @@
"Failed to refresh credential": "Не удалось обновить учетные данные",
"Failed to regenerate backup codes": "Не удалось перегенерировать резервные коды",
"Failed to register Passkey": "Не удалось зарегистрировать Passkey",
+ "Failed to reject contribution": "Не удалось отклонить предоставление",
"Failed to remove Passkey": "Не удалось удалить Passkey",
"Failed to repair channel consistency": "Не удалось восстановить согласованность каналов",
"Failed to reset 2FA": "Не удалось сбросить 2FA",
@@ -1895,6 +1987,8 @@
"Failed to save": "Не удалось сохранить",
"Failed to save announcements": "Не удалось сохранить объявления",
"Failed to save API info": "Не удалось сохранить информацию API",
+ "Failed to save contribution draft": "Не удалось сохранить черновик",
+ "Failed to save contribution settings": "Не удалось сохранить настройки предоставления",
"Failed to save FAQ": "Не удалось сохранить FAQ",
"Failed to save Uptime Kuma groups": "Не удалось сохранить группы Uptime Kuma",
"Failed to search API keys": "Не удалось найти API ключи",
@@ -1911,16 +2005,19 @@
"Failed to start Discord login": "Не удалось начать вход через Discord",
"Failed to start GitHub login": "Не удалось начать вход через GitHub",
"Failed to start LinuxDO login": "Не удалось начать вход через LinuxDO",
+ "Failed to start model tests": "Не удалось запустить тесты моделей",
"Failed to start OIDC login": "Не удалось начать вход через OIDC",
"Failed to start Passkey login": "Не удалось начать вход с Passkey",
"Failed to start Passkey registration": "Не удалось начать регистрацию Passkey",
"Failed to start Telegram binding": "Не удалось начать привязку Telegram",
"Failed to start testing all channels": "Не удалось начать тестирование всех каналов",
"Failed to start verification": "Не удалось начать проверку",
+ "Failed to submit contribution": "Не удалось отправить предоставление",
"Failed to sync prices": "Не удалось синхронизировать цены",
"Failed to sync ratios": "Не удалось синхронизировать коэффициенты",
"Failed to test all channels": "Не удалось протестировать все каналы",
"Failed to test channel": "Не удалось протестировать канал",
+ "Failed to transfer rewards": "Не удалось перевести вознаграждения",
"Failed to update all balances": "Не удалось обновить все балансы",
"Failed to update API key": "Не удалось обновить API ключ",
"Failed to update API key status": "Не удалось обновить статус API ключа",
@@ -1935,7 +2032,9 @@
"Failed to update settings": "Не удалось обновить настройки",
"Failed to update tag": "Не удалось обновить тег",
"Failed to update user": "Не удалось обновить пользователя",
+ "Failed to withdraw contribution": "Не удалось отозвать предоставление",
"Failure keywords": "Ключевые слова сбоя",
+ "Failure since": "Сбой с",
"Fair": "Удовлетворительно",
"Fallback": "Резерв",
"Fallback base URL": "Base URL fallback",
@@ -1955,9 +2054,12 @@
"Fetch available models for:": "Получить доступные модели для:",
"Fetch available models from upstream": "Получить доступные модели от вышестоящего поставщика",
"Fetch from Upstream": "Получить из Upstream",
+ "Fetch models": "Получить модели",
"Fetch Models": "Получить модели",
+ "Fetch models or enter model IDs": "Получите модели или введите их ID",
"Fetched {{count}} model(s) from upstream": "Получено {{count}} моделей из upstream",
"Fetched {{count}} models": "Получено {{count}} моделей",
+ "Fetched and saved {{count}} models": "Получено и сохранено моделей: {{count}}",
"Fetching prefill groups...": "Загрузка групп предварительного заполнения...",
"Fetching upstream prices...": "Получение цен провайдера...",
"Fetching upstream ratios...": "Загрузка коэффициентов upstream...",
@@ -1978,10 +2080,6 @@
"Fill in the following info to create a new subscription plan": "Заполните следующую информацию для создания нового плана подписки",
"Fill Related Models": "Заполнить связанные модели",
"Fill Template": "Заполнить шаблон",
- "Fill template: level and active": "Заполнить шаблон: уровень и активность",
- "Fill template: level message": "Заполнить шаблон: сообщение об уровне",
- "Fill template: organization message": "Заполнить шаблон: сообщение об организации",
- "Fill template: organization or role": "Заполнить шаблон: организация или роль",
"Fill Templates": "Заполнить шаблоны",
"Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.": "Укажите полное значение model из тела запроса клиента, например gpt-4o или gemini-2.5-flash. Несколько моделей разделяйте запятыми.",
"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format": "Заполнять thoughtSignature только для каналов Gemini/Vertex, использующих формат OpenAI",
@@ -2092,6 +2190,7 @@
"Full Code": "Полный код",
"Full input length": "Полная длина входа",
"Full layout": "Полная разметка",
+ "Full model test started": "Полный тест моделей запущен",
"Full width": "Полная ширина",
"Function calling": "Вызов функций",
"Functions": "Функции",
@@ -2122,7 +2221,9 @@
"Get started": "Начало работы",
"Get Started": "Начать",
"GitHub": "GitHub",
+ "Give the contributor a clear reason they can address before resubmitting.": "Укажите понятную причину, которую владелец сможет устранить перед повторной отправкой.",
"Give the group a recognizable name and optional description.": "Дайте группе узнаваемое имя и необязательное описание.",
+ "Give this contribution a recognizable name": "Задайте понятное название для предоставления",
"Give this group a recognizable name.": "Дайте этой группе узнаваемое имя.",
"Global configuration and administrative tools.": "Глобальная конфигурация и административные инструменты.",
"Global Coverage": "Глобальное покрытие",
@@ -2166,6 +2267,7 @@
"Group details": "Детали группы",
"Group identifier": "Идентификатор группы",
"Group is required": "Группа обязательна",
+ "Group must not exceed 64 characters": "Название группы не должно превышать 64 символа",
"Group name": "Имя группы",
"Group Name": "Имя группы",
"Group name cannot be changed when editing.": "Имя группы нельзя изменить при редактировании.",
@@ -2205,6 +2307,8 @@
"Header Value (supports string or JSON mapping)": "Значение заголовка (строка или JSON-маппинг)",
"header. Anthropic-formatted endpoints accept the": ". Эндпоинты формата Anthropic вместо этого принимают",
"Health": "Здоровье",
+ "Health check interval (minutes)": "Интервал проверки состояния (минуты)",
+ "Health checks continue while the contributed channel is active.": "Проверки состояния продолжаются, пока предоставленный канал активен.",
"Healthy": "В норме",
"Hidden": "Скрыта",
"Hidden — verify to reveal": "Скрыто — подтвердите, чтобы показать",
@@ -2224,6 +2328,7 @@
"High-risk status code retry risk check 4": "Я добровольно принимаю риски для стабильности системы, включая серьёзные тайм-ауты клиента и возможный сбой сервиса, и несу ответственность за возникшую очередь запросов или недоступность сервиса.",
"High-risk status code retry risk disclaimer": "### ⚠️ Операция высокого риска: предупреждение и отказ от ответственности при повторах для кодов 504/524\n\nПо умолчанию проект не повторяет запросы при кодах `400` (неверный запрос), `504` (тайм-аут шлюза) и `524` (истекло время ожидания). Коды 504 и 524 обычно означают, что **запрос успешно дошёл до вышестоящего ИИ-сервиса и обработка на его стороне уже началась, но соединение закрылось из-за слишком долгой обработки вышестоящим сервисом**. Обычно это указывает на узкое место именно вышестоящего сервиса.\n\nВключение перенаправления или повторов для таких кодов тайм-аута — **операция чрезвычайно высокого риска**. Перед включением внимательно прочитайте и поймите следующие последствия:\n\n#### 1. Основные риски (прочитайте внимательно)\n\n1. 💸 Двойное или многократное списание: большинство вышестоящих ИИ-провайдеров **всё равно взимают плату** за запросы, обработка которых началась, но была прервана сетевым тайм-аутом (504/524). Повтор отправляет новый запрос вышестоящему сервису и может привести к **двойному или многократному списанию**.\n2. ⏳ Серьёзный тайм-аут клиента: если запрос уже завершился по тайм-ауту, повторы могут многократно увеличить общую задержку и вызвать неприемлемое ожидание у конечного клиента.\n3. 💥 Очередь запросов и сбой сервиса: принудительные повторы дольше занимают потоки и соединения. При высокой нагрузке это может создать серьёзную **очередь запросов**, исчерпать ресурсы, вызвать каскадный отказ и остановить прокси-сервис.\n\n#### 2. Принятие рисков\n\nЕсли вы всё же включаете эту функцию, вы подтверждаете следующее:",
"Higher priority channels are selected first": "Каналы с более высоким приоритетом выбираются первыми",
+ "Higher values are selected first.": "Более высокие значения выбираются первыми.",
"Historical Usage": "История использования",
"History of MjProxy-style image tasks.": "История задач генерации изображений в стиле MjProxy.",
"Hit criteria: If cached tokens exist in usage, it counts as a hit.": "Критерий попадания: если в usage есть кэшированные токены, это считается попаданием.",
@@ -2245,6 +2350,7 @@
"How It Works": "Как это работает",
"How model mapping works": "Как работает сопоставление моделей",
"How much to charge for each US dollar of balance (Epay)": "Сколько взимать за каждый доллар США баланса (Epay)",
+ "How often contributed channels are checked.": "Частота проверки предоставленных каналов.",
"How this model name should match requests": "Как это имя модели должно соответствовать запросам",
"How to deliver the resulting image": "Способ доставки изображения",
"How to get an io.net API Key": "Как получить ключ API io.net",
@@ -2280,6 +2386,7 @@
"https://your-server.example.com": "https://your-server.example.com",
"Human-readable name shown to users during Passkey prompts.": "Понятное для человека имя, отображаемое пользователям во время запросов Passkey.",
"I confirm enabling high-risk retry": "Я подтверждаю включение высокорискового повтора",
+ "I have read and agree to": "Я прочитал(а) и принимаю",
"I have read and agree to the": "Я прочитал и согласен с",
"I have read and understood the above compliance reminder": "Я прочитал и понял приведенное выше напоминание о соответствии",
"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.": "Я прочитал и понял приведенное выше напоминание о соответствии, признаю связанные правовые риски и подтверждаю, что несу юридическую ответственность за развертывание, эксплуатацию и взимание платы.",
@@ -2348,6 +2455,7 @@
"Input tokens": "Входные токены",
"Input Tokens": "Входные токены",
"Inset": "Встроенная",
+ "Inspect drafts, approved channels, rejected revisions, and health removals.": "Просматривайте черновики, одобренные каналы, отклонённые версии и удаления по состоянию.",
"Inspect requests, errors, and billing details": "Проверяйте запросы, ошибки и детали оплаты",
"Inspect user prompts": "Просмотр запросов пользователя",
"Instance": "Экземпляр",
@@ -2456,9 +2564,13 @@
"Last 30 days uptime": "Доступность за 30 дней",
"Last active {{time}} · Expires {{expires}}": "Последняя активность: {{time}} · Истекает: {{expires}}",
"Last check time": "Время последней проверки",
+ "Last checked": "Последняя проверка",
"Last detected addable models": "Последние обнаруженные модели для добавления",
+ "Last error": "Последняя ошибка",
+ "Last failure": "Последний сбой",
"Last Login": "Последний вход",
"Last Seen": "Последний сигнал",
+ "Last success": "Последний успех",
"Last Tested": "Последняя проверка",
"Last updated:": "Последнее обновление:",
"Last Used": "Последнее использование",
@@ -2475,6 +2587,7 @@
"Learn more": "Узнать больше",
"Learn more:": "Узнать больше:",
"Leave": "Выйти",
+ "Leave blank to keep the current key": "Оставьте пустым, чтобы сохранить текущий ключ",
"Leave blank to keep the existing credential": "Оставьте пустым, чтобы сохранить существующие учетные данные",
"Leave blank to keep the existing key": "Оставьте пустым, чтобы сохранить существующий ключ",
"Leave blank unless rotating the secret": "Оставьте пустым, если не меняете секрет",
@@ -2505,6 +2618,7 @@
"Less than or equal": "Меньше или равно",
"Less Than or Equal": "Меньше или равно",
"License": "Лицензия",
+ "Lifetime earned": "Заработано всего",
"Light": "Светлая",
"Lightning Fast": "Молниеносно быстро",
"Limit period": "Период ограничения",
@@ -2593,6 +2707,7 @@
"Manual Disabled": "Ручное отключение",
"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).": "Сопоставление полей из ответа информации о пользователе с локальными атрибутами пользователя. Поддерживает вложенные пути (например, ocs.data.id).",
"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.": "Сопоставьте идентификаторы моделей с версиями Gemini API. Запись `default` применяется, если не найдено конкретного совпадения.",
+ "Map public model IDs to the provider model IDs when needed.": "При необходимости сопоставьте публичные ID моделей с ID провайдера.",
"Map request model names to actual provider model names (JSON format)": "Сопоставление имён моделей запроса реальным именам моделей провайдера (формат JSON)",
"Map response status codes (JSON format)": "Сопоставить коды статусов ответа (JSON-формат)",
"Map upstream status codes to different codes": "Сопоставить коды статуса вышестоящего сервера с различными кодами",
@@ -2672,6 +2787,7 @@
"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.": "Создайте новую пару ниже или выберите существующую дальше. Когда будете готовы, нажмите Сохранить.",
"Minute": "Минута",
"minutes": "минут",
+ "Missing": "Отсутствует",
"Missing code": "Код отсутствует",
"Missing Models": "Отсутствующие модели",
"Missing user data from Passkey login response": "В ответе Passkey для входа отсутствуют данные пользователя",
@@ -2701,6 +2817,7 @@
"Model enabled successfully": "Модель успешно включена",
"Model fixed pricing": "Фиксированная цена модели",
"Model Group": "Группа моделей",
+ "Model health": "Состояние моделей",
"Model Limits": "Лимиты модели",
"Model Mapping": "Сопоставление моделей",
"Model Mapping (JSON)": "Сопоставление моделей (JSON)",
@@ -2786,6 +2903,7 @@
"Move {{group}} up": "Переместить {{group}} вверх",
"Move a request header": "Переместить заголовок запроса",
"Move affiliate rewards to your main balance": "Перевести партнерские вознаграждения на основной баланс",
+ "Move available contribution rewards into your wallet balance.": "Переведите доступные вознаграждения на баланс кошелька.",
"Move fallback to end": "Переместить резерв в конец",
"Move Field": "Переместить поле",
"Move Header": "Переместить заголовок",
@@ -2818,6 +2936,7 @@
"Multipliers for recharge pricing based on user groups.": "Множители для ценообразования пополнения на основе групп пользователей.",
"Must be a valid URL": "Должен быть действительный URL",
"Must be at least 8 characters": "Должно быть не менее 8 символов",
+ "My contributions": "Мои предоставления",
"My Subscriptions": "Мои подписки",
"my-status": "мой-статус",
"MySQL detected": "Обнаружен MySQL",
@@ -2851,6 +2970,7 @@
"New API": "Новый API",
"New API <noreply@example.com>": "Новый API <noreply@example.com>",
"New API Project Repository:": "Репозиторий проекта New API:",
+ "New contribution": "Новое предоставление",
"New Format Template": "Шаблон нового формата",
"New Group": "Новая группа",
"New model": "Новая модель",
@@ -2885,6 +3005,7 @@
"No app usage data available for this model.": "Данные об использовании приложений для этой модели пока недоступны.",
"No apps match the selected filters": "Нет приложений, соответствующих фильтрам",
"No Auth": "Без auth",
+ "No auto-disabled models with recovered channels found": "Нет автоматически отключённых моделей с восстановленными каналами",
"No available groups in the global Auto order.": "В глобальном порядке Auto нет доступных групп.",
"No available models": "Нет доступных моделей",
"No available Web chat links": "Нет доступных веб-ссылок для чата",
@@ -2896,6 +3017,7 @@
"No changes": "Нет изменений",
"No changes made": "Изменения не внесены",
"No changes to save": "Нет изменений для сохранения",
+ "No channel contributions yet": "Предоставленных каналов пока нет",
"No channel selected": "Канал не выбран",
"No channel type found.": "Тип канала не найден.",
"No channels available. Create your first channel to get started.": "Нет доступных каналов. Создайте свой первый канал, чтобы начать.",
@@ -2910,6 +3032,7 @@
"No console output": "Нет вывода консоли",
"No containers": "Нет контейнеров",
"No content to copy": "Нет содержимого для копирования",
+ "No contribution rewards yet": "Вознаграждений пока нет",
"No custom groups. Saving will inherit the complete global Auto order.": "Пользовательские группы не заданы. После сохранения будет унаследован полный глобальный порядок Auto.",
"No custom OAuth providers configured yet.": "Пользовательские поставщики OAuth еще не настроены.",
"No data": "Нет данных",
@@ -2946,13 +3069,16 @@
"No Logs Found": "Логи не найдены",
"No mappings configured. Click \"Add Row\" to get started.": "Нет настроенных сопоставлений. Нажмите \"Добавить строку\", чтобы начать.",
"No matches found": "Совпадений не найдено",
+ "No matching contributions": "Подходящих предоставлений нет",
"No matching items": "Нет подходящих элементов",
+ "No matching models": "Подходящих моделей нет",
"No matching results": "Нет совпадений",
"No matching rules": "Нет совпадающих правил",
"No matching token and channel usage was found.": "Подходящее использование токенов и каналов не найдено.",
"No messages yet": "Сообщений пока нет",
"No missing models found.": "Недостающие модели не найдены.",
"No model found.": "Модель не найдена.",
+ "No model health observations": "Наблюдений за состоянием моделей нет",
"No model mappings configured. Click \"Add Mapping\" to get started.": "Не настроены сопоставления моделей. Нажмите \"Добавить сопоставление\", чтобы начать.",
"No model price changes to save": "Нет изменений цен моделей для сохранения",
"No models available": "Модели недоступны",
@@ -2972,6 +3098,7 @@
"No models to add": "Нет моделей для добавления",
"No models to copy": "Нет моделей для копирования",
"No models to remove": "Нет моделей для удаления",
+ "No models with unavailable channels found": "Нет моделей без доступных каналов для отключения",
"No models with unset prices": "Нет моделей без цены",
"No new models to add": "Нет новых моделей для добавления",
"No new models yet": "Новых моделей пока нет",
@@ -3021,6 +3148,7 @@
"No Sync": "Без синхронизации",
"No system announcements": "Нет системных объявлений",
"No system tasks yet.": "Пока нет системных задач.",
+ "No test results": "Результатов теста нет",
"No token found.": "Токен не найден.",
"No tools configured": "Нет настроенных инструментов",
"No Upgrade": "Без повышения",
@@ -3054,6 +3182,7 @@
"Not Equals": "Не равно",
"Not in pricing table": "Нет в таблице тарифных групп",
"Not included": "Не включена",
+ "Not required": "Не требуется",
"Not set": "Не задано",
"Not Set": "Не установлено",
"Not set yet": "Ещё не задано",
@@ -3077,6 +3206,7 @@
"Number of tokens per unit quota": "Количество токенов на единицу квоты",
"Number of top log probabilities returned per token": "Количество top-вероятностей на токен",
"Number of users invited": "Количество приглашенных пользователей",
+ "OAuth": "OAuth",
"OAuth binding timed out. Please try again.": "Время ожидания привязки OAuth истекло. Повторите попытку.",
"OAuth binding window is no longer available": "Окно привязки OAuth больше недоступно",
"OAuth callback URL": "URL обратного вызова OAuth",
@@ -3139,7 +3269,9 @@
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "Будут перезаписаны только выбранные поля. Вы можете повторно запустить мастер синхронизации, если появятся новые конфликты.",
"Only successful requests": "Только успешные запросы",
"Only successful requests count toward this limit.": "Только успешные запросы учитываются в этом лимите.",
+ "Only the connection details required for review are collected.": "Собираются только параметры подключения, необходимые для проверки.",
"Only the last {{value}} log files will be retained; the rest will be deleted.": "Будут сохранены только последние {{value}} файлов журналов; остальные будут удалены.",
+ "Only these groups and provider types can be submitted.": "Можно отправлять только указанные группы и типы провайдеров.",
"Oops! Page Not Found!": "Ой! Страница не найдена!",
"Oops! Something went wrong": "Ой! Что-то пошло не так",
"Open": "Открыть",
@@ -3150,6 +3282,7 @@
"Open in New Tab": "Открыть в новой вкладке",
"Open menu": "Открыть меню",
"Open release": "Открыть выпуск",
+ "Open review": "Открыть проверку",
"Open source": "Открытый исходный код",
"Open Source": "Открытый исходный код",
"Open the io.net console API Keys page": "Открыть страницу ключей API консоли io.net",
@@ -3247,6 +3380,7 @@
"Overwritten": "Перезаписано",
"Page": "Страница",
"Page {{current}} of {{total}}": "Страница {{current}} из {{total}}",
+ "Page {{page}} of {{pages}}": "Страница {{page}} из {{pages}}",
"PaLM": "PaLM",
"Pan": "Панорама",
"Pancake": "Pancake",
@@ -3278,6 +3412,7 @@
"Pass when key is missing": "Пропускать при отсутствии ключа",
"Pass-Through": "Сквозной доступ",
"Pass-through Headers (comma-separated or JSON array)": "Пробрасываемые заголовки (через запятую или JSON-массив)",
+ "Passed": "Пройдено",
"Passive recovery only": "Только пассивное восстановление",
"Passkey": "Passkey",
"Passkey Authentication": "Аутентификация Passkey",
@@ -3348,6 +3483,7 @@
"Penalises repetition of frequent tokens": "Штрафует повторение частых токенов",
"pending": "ожидание",
"Pending": "Ожидает",
+ "Pending review": "Ожидает проверки",
"per": "за",
"Per 1K tokens": "За 1K токенов",
"Per 1M tokens": "За 1M токенов",
@@ -3679,6 +3815,7 @@
"Received": "Получено",
"Received amount": "Полученная сумма",
"Recent maintenance tasks running across instances and their execution status.": "Недавние задачи обслуживания, выполняемые на всех экземплярах, и их статус выполнения.",
+ "Recent transfers": "Недавние переводы",
"Recently completed or failed system task runs.": "Недавние запуски системных задач, завершенные или завершившиеся с ошибкой.",
"Recently launched models": "Недавно запущенные модели",
"Recently launched models gaining traction": "Недавно вышедшие модели, набирающие популярность",
@@ -3750,7 +3887,10 @@
"Registry (optional)": "Реестр (необязательно)",
"Registry secret": "Секрет реестра",
"Registry username": "Имя пользователя реестра",
+ "Reject": "Отклонить",
+ "Reject contribution": "Отклонить предоставление",
"Reject Reason": "Причина отклонения",
+ "Rejection reason": "Причина отклонения",
"Release details": "Детали релиза",
"Released": "Выпущено",
"Relying Party Display Name": "Отображаемое имя проверяющей стороны",
@@ -3846,6 +3986,7 @@
"Required": "Обязательно",
"Required events:": "Обязательные события:",
"Required provider, authentication, model, and group settings": "Обязательные настройки провайдера, аутентификации, моделей и групп",
+ "Required tests passed within the last 30 minutes": "Обязательные тесты пройдены за последние 30 минут",
"Required to expose MjProxy-style image generation to end users.": "Необходимо для предоставления генерации изображений в стиле MjProxy конечным пользователям.",
"Rerank": "Переранжировать",
"Reroll": "Повторить",
@@ -3889,6 +4030,7 @@
"Reset usage window": "Сбросить окно использования",
"Resets in:": "Сброс через:",
"Resetting...": "Сброс...",
+ "Resize column": "Изменить ширину столбца",
"Resolve Conflicts": "Разрешить конфликты",
"Resource Configuration": "Конфигурация ресурсов",
"Resources": "Ресурсы",
@@ -3921,11 +4063,22 @@
"Revenue": "Доход",
"Review & initialize": "Проверить и инициализировать",
"Review and sign out devices currently using your account.": "Просмотрите устройства, использующие вашу учётную запись, и завершите их сеансы.",
+ "Review contributed channels and configure contribution policy.": "Проверяйте предоставленные каналы и настраивайте политику.",
+ "Review contributions": "Проверить предоставления",
"Review model rates before scaling traffic": "Проверьте тарифы моделей перед масштабированием трафика",
+ "Review note": "Примечание проверки",
+ "Review rejected": "Проверка отклонена",
+ "Review status and per-model channel health history.": "Просматривайте статус проверки и историю состояния канала по моделям.",
"Review your payment details": "Проверьте свои платежные данные",
"Review your purchase details before proceeding.": "Просмотрите детали покупки перед продолжением.",
+ "Revision": "Версия",
"Revoke": "Отозвать",
"Revoke session?": "Отозвать сеанс?",
+ "Reward basis points": "Базисные пункты вознаграждения",
+ "Reward ledger": "Журнал вознаграждений",
+ "Rewards": "Вознаграждения",
+ "Rewards are credited after billable requests use an approved channel.": "Вознаграждения начисляются после платного запроса через одобренный канал.",
+ "Rewards transferred to your wallet": "Вознаграждения переведены в кошелёк",
"Rewards will be added directly to your balance": "Награды будут добавлены напрямую в ваш баланс",
"Rewrite callback URLs to the local server": "Перезаписывать URL обратных вызовов на локальный сервер",
"Right to Left": "Справа налево",
@@ -3946,6 +4099,7 @@
"Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.": "Маршруты с одним входным путем разделяются по точной модели клиента. Несовпавшие запросы идут в последний резерв.",
"Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.": "Маршруты с одним входным путем сопоставляются с точными именами моделей клиента. Несколько моделей разделяйте запятыми, пустым оставляйте только последний резерв.",
"Routing & Overrides": "Маршрутизация и переопределения",
+ "Routing and health": "Маршрутизация и состояние",
"Routing Reliability": "Надежность маршрутизации",
"Routing Strategy": "Стратегия маршрутизации",
"Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.": "Строки — группы пользователей, столбцы — тарифные группы. Пустые ячейки используют базовый коэффициент, показанный серым.",
@@ -3970,8 +4124,11 @@
"Rules JSON": "Правила JSON",
"Rules JSON must be an array": "JSON правил должен быть массивом",
"Rules match the original model value from the client request body.": "Правила сопоставляются с исходным значением model из тела клиентского запроса.",
+ "Run admin test": "Запустить тест администратора",
+ "Run an independent administrator test before approving this revision.": "Перед одобрением этой версии запустите независимый тест администратора.",
"Run GC": "Запустить GC",
"Run tests for the selected models": "Запустить тесты для выбранных моделей",
+ "Run the full model test before submitting.": "Перед отправкой запустите полный тест моделей.",
"running": "выполняется",
"Running": "Выполняется",
"Runtime": "Среда выполнения",
@@ -3990,6 +4147,7 @@
"Save chat settings": "Сохранить настройки чата",
"Save check-in settings": "Сохранить настройки прибытия",
"Save Creem settings": "Сохранить настройки Creem",
+ "Save draft": "Сохранить черновик",
"Save drawing settings": "Сохранить настройки рисования",
"Save Epay settings": "Сохранить настройки Epay",
"Save failed": "Не удалось сохранить",
@@ -4008,11 +4166,13 @@
"Save preview": "Предпросмотр сохранения",
"Save rate limits": "Сохранить лимиты скорости",
"Save sensitive words": "Сохранить чувствительные слова",
+ "Save settings": "Сохранить настройки",
"Save Settings": "Сохранить настройки",
"Save sidebar modules": "Сохранить модули боковой панели",
"Save SMTP settings": "Сохранить настройки SMTP",
"Save SSRF settings": "Сохранить настройки SSRF",
"Save Stripe settings": "Сохранить настройки Stripe",
+ "Save the draft, test every model, then submit it for review.": "Сохраните черновик, протестируйте каждую модель и отправьте на проверку.",
"Save these backup codes in a safe place. Each code can only be used once.": "Сохраните эти резервные коды в безопасном месте. Каждый код может быть использован только один раз.",
"Save these codes in a safe place. Each code can only be used once.": "Сохраните эти коды в безопасном месте. Каждый код может быть использован только один раз.",
"Save this token now. You won't be able to view it again after closing this dialog.": "Сохраните этот токен сейчас. После закрытия диалогового окна вы не сможете просмотреть его снова.",
@@ -4020,6 +4180,7 @@
"Save tool prices": "Сохранить цены инструментов",
"Save Waffo Pancake settings": "Сохранить настройки Waffo Pancake",
"Save Worker settings": "Сохранить настройки Worker",
+ "Saved drafts and submitted channels will appear here.": "Сохранённые черновики и отправленные каналы появятся здесь.",
"Saved successfully": "Сохранено успешно",
"Saving...": "Сохранение...",
"Scan QR Code": "Сканировать QR-код",
@@ -4089,15 +4250,20 @@
"Select all (filtered)": "& Выбрать все отфильтрованные",
"Select all models": "Выбрать все модели",
"Select All Visible": "Выбрать все видимые",
+ "Select an allowed group": "Выберите разрешённую группу",
"Select an operation mode and enter the amount": "Выберите режим операции и введите сумму",
"Select announcement type": "Выбрать тип объявления",
+ "Select at least one allowed channel type": "Выберите хотя бы один разрешённый тип канала",
+ "Select at least one allowed group": "Выберите хотя бы одну разрешённую группу",
"Select at least one Auto group or restore global Auto.": "Выберите хотя бы одну группу Auto или восстановите глобальный порядок Auto.",
"Select at least one field to overwrite.": "Выберите хотя бы одно поле для перезаписи.",
+ "Select at least one model": "Выберите хотя бы одну модель",
"Select at least one target model": "Выберите хотя бы одну целевую модель",
"Select at most {{max}} Auto groups": "Выберите не более {{max}} групп Auto",
"Select body font": "Выберите шрифт текста",
"Select border radius": "Выберите радиус скругления",
"Select channel type": "Выбрать тип канала",
+ "Select channel types": "Выберите типы каналов",
"Select color preset": "Выберите цветовую предустановку",
"Select content width": "Выберите ширину контента",
"Select corner radius": "Выберите радиус скругления",
@@ -4363,6 +4529,7 @@
"Structured output": "Структурированный вывод",
"Submit": "Отправить",
"Submit directly": "Отправить напрямую",
+ "Submit for review": "Отправить на проверку",
"Submit Result": "Отправить результат",
"Submit Time": "Время отправки",
"Submitted": "Отправлено",
@@ -4391,7 +4558,9 @@
"Successfully deleted {{count}} invalid redemption codes": "Успешно удалено {{count}} недействительных кодов активации",
"Successfully deleted {{count}} model(s)": "Успешно удалено {{count}} моделей",
"Successfully disabled {{count}} model(s)": "Успешно отключено {{count}} моделей",
+ "Successfully disabled {{count}} model(s) with no available channels": "Отключено моделей без доступных каналов: {{count}}",
"Successfully enabled {{count}} model(s)": "Успешно включено {{count}} моделей",
+ "Successfully enabled {{count}} model(s) with recovered channels": "Включено моделей с восстановленными каналами: {{count}}",
"Suffix": "Суффикс",
"Suffix Match": "Совпадение по суффиксу",
"Summarize text": "Кратко изложить текст",
@@ -4403,7 +4572,6 @@
"Supported Applications": "Поддерживаемые приложения",
"Supported Imagine Models": "Поддерживаемые модели Imagine",
"Supported modalities": "Поддерживаемые модальности",
- "Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.": "Поддерживаемые операторы: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Оставьте поле пустым, чтобы разрешить доступ всем пользователям.",
"Supported parameters": "Поддерживаемые параметры",
"Supported variables": "Поддерживаемые переменные",
"Supports `-thinking`, `-thinking-": "Поддерживает `-thinking`, `-thinking-",
@@ -4497,12 +4665,14 @@
"Test {{count}} matching models": "Проверить совпадающие модели: {{count}}",
"Test {{count}} selected": "Проверить {{count}} выбранных",
"Test a model with a starter prompt, or write your own request below.": "Проверьте модель с начальным промптом или напишите собственный запрос ниже.",
+ "Test all": "Протестировать всё",
"Test all {{count}} models": "Проверить все модели: {{count}}",
"Test All Channels": "Проверить все каналы",
"Test Channel Connection": "Проверить подключение канала",
"Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.": "Тестирование каналов, обновление балансов и включение/отключение отдельных, пакетных или помеченных каналов.",
"Test Connection": "Проверить подключение",
"Test connectivity for:": "Проверить подключение для:",
+ "Test expired": "Тест устарел",
"Test failed": "Тест не выполнен",
"Test interval (minutes)": "Интервал проверки (минуты)",
"Test Latency": "Проверить задержку",
@@ -4512,6 +4682,8 @@
"Test selected models": "Проверить выбранные модели",
"Testing all enabled channels started. Please refresh to see results.": "Тестирование всех включенных каналов начато. Пожалуйста, обновите страницу, чтобы увидеть результаты.",
"Testing...": "Тестирование...",
+ "Tests are starting...": "Тесты запускаются...",
+ "Tests failed": "Тесты не пройдены",
"Text": "Текст",
"Text description of the desired image": "Текстовое описание желаемого изображения",
"Text description of the desired video": "Текстовое описание желаемого видео",
@@ -4530,6 +4702,8 @@
"The binding will complete automatically after authorization": "Привязка завершится автоматически после авторизации",
"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.": "Привязанный продукт используется для пополнения кошелька: когда пользователь вводит любую сумму, new-api запускает оплату через этот единственный продукт Pancake и переопределяет цену для каждой сессии — не нужно заранее создавать SKU на $1 / $5 / $10.",
"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.": "Привязанный магазин является родительским контейнером для всех продуктов Pancake, которые new-api создает из этой админки: как продукта пополнения кошелька, так и продуктов планов подписки. Одного магазина достаточно; выбирайте другой только если действительно ведете отдельные каталоги Pancake.",
+ "The channel will leave review or service and can be edited before resubmission.": "Канал будет снят с проверки или обслуживания, после чего его можно изменить и отправить повторно.",
+ "The contribution will be deleted and any linked channel will be removed from service.": "Вклад будет удалён, а все связанные с ним каналы будут выведены из обслуживания.",
"The deployment node that handled the requests": "Узел развёртывания, обработавший запросы",
"The effective domain for Passkey registration. Must match the current domain or be its parent domain.": "Действующий домен для регистрации Passkey. Должен совпадать с текущим доменом или быть его родительским доменом.",
"The entered text does not match the required text.": "Введенный текст не совпадает с требуемым.",
@@ -4537,12 +4711,14 @@
"The exact model identifier as used in API requests.": "Точный идентификатор модели, используемый в запросах API.",
"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.": "Следующие модели имеют конфликты типов тарификации (фиксированная цена против тарификации по соотношению). Подтвердите, чтобы продолжить изменения.",
"The following models in the model redirect have not been added to the \"Models\" list and may fail during invocation due to missing available models:": "Следующие модели в перенаправлении модели не были добавлены в список \"Модели\" и могут не работать при вызове из-за отсутствия доступных моделей:",
+ "The linked contributed channel will be removed from service.": "Связанный предоставленный канал будет выведен из обслуживания.",
"The login session that started this Telegram binding is no longer valid.": "Сеанс входа, из которого была начата привязка Telegram, больше недействителен.",
"The mapped upstream model(s)": "Сопоставленные upstream модель(и)",
"The model that was requested": "Запрошенная модель",
"The model you're looking for doesn't exist.": "Модель, которую вы ищете, не существует.",
"The name displayed across the application": "Имя, отображаемое в приложении",
"The new token will only be shown once. Copy it and store it securely.": "Новый токен будет показан только один раз. Скопируйте его и сохраните в безопасном месте.",
+ "The provider returned no models": "Провайдер не вернул ни одной модели",
"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations": "Публичный URL вашего сервера, используемый для OAuth-перенаправлений, вебхуков и других внешних интеграций",
"The requested chat preset does not exist or has been removed.": "Запрошенный предустановленный чат не существует или был удален.",
"The reset request stays disabled until a credit is available.": "Запрос сброса недоступен, пока нет доступного сброса.",
@@ -4564,6 +4740,7 @@
"Theme preset": "Пресет темы",
"Theme Settings": "Настройки темы",
"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?": "Есть модели для добавления и удаления, но вы выбрали только один тип. Подтвердить отправку только выбранных элементов?",
+ "There are no contributions waiting for review.": "Нет предоставлений, ожидающих проверки.",
"There is a rule for vip billed as premium → use its ratio 0.3": "Есть правило «vip по premium» → используется его коэффициент 0,3",
"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.": "Эти имена всё ещё отмечены в выборе, но не возвращены в списке upstream; ключи только как источники model_mapping исключены. Скорректируйте выбор перед сохранением.",
"These toggles affect whether certain request fields are passed through to the upstream provider.": "Эти переключатели влияют на то, передаются ли определенные поля запроса вышестоящему поставщику.",
@@ -4610,6 +4787,7 @@
"This site currently has {{count}} models enabled": "На этом сайте сейчас включено моделей: {{count}}",
"This Telegram account is already bound.": "Эта учётная запись Telegram уже привязана.",
"This Telegram binding request has expired or has already been used.": "Этот запрос на привязку Telegram истёк или уже был использован.",
+ "This test result is older than 30 minutes. Run all tests again before submitting.": "Этому результату более 30 минут. Перед отправкой повторите все тесты.",
"This tier catches any request that did not match earlier tiers.": "Этот уровень обрабатывает все запросы, которые не совпали с предыдущими уровнями.",
"this token group": "эта группа токенов",
"This Uptime Kuma group will be removed from the list.": "Эта группа Uptime Kuma будет удалена из списка.",
@@ -4623,6 +4801,8 @@
"This will delete all": "Это удалит все",
"This will delete all channel affinity cache entries still in memory.": "Это удалит все записи кэша привязки каналов из памяти.",
"This will delete temporary cache files that have not been used for more than 10 minutes": "Будут удалены временные файлы кэша, не использовавшиеся более 10 минут",
+ "This will disable all currently enabled models that have no available channels. Continue?": "Будут отключены все включённые модели без доступных каналов. Продолжить?",
+ "This will enable models that were auto-disabled by channel availability and now have recovered channels. Manually disabled models are not changed. Continue?": "Будут включены только модели, автоматически отключённые из‑за доступности каналов, у которых каналы восстановились. Вручную отключённые модели не изменятся. Продолжить?",
"This will extend the deployment by the specified hours.": "Это продлит развертывание на указанное количество часов.",
"This will immediately invalidate your existing access token. Any applications or scripts using it will stop working.": "Это немедленно сделает текущий токен доступа недействительным. Использующие его приложения и скрипты перестанут работать.",
"This will permanently delete all manually and automatically disabled channels. This action cannot be undone.": "Это навсегда удалит все каналы, отключённые вручную и автоматически. Это действие нельзя отменить.",
@@ -4773,16 +4953,21 @@
"Total:": "Всего:",
"TPM": "TPM",
"Track per-request consumption to power usage analytics. Keeping this on increases database writes.": "Отслеживать потребление для каждого запроса для аналитики использования. Сохранение этой опции увеличивает количество записей в базу данных.",
+ "Track review, availability, and deletion status for every channel.": "Отслеживайте проверку, доступность и удаление каждого канала.",
"Track usage, costs and performance with real-time analytics": "Отслеживайте использование, затраты и производительность с помощью аналитики в реальном времени",
"Tracked apps": "Отслеживаемые приложения",
"Tracks current account base limits and additional metered usage on Codex upstream.": "Отслеживает базовые лимиты и дополнительное потребление (metered) аккаунта на стороне Codex.",
"Trading insights, accounting, advisory": "Торговые инсайты, учёт, консалтинг",
"Transfer": "Перевод",
+ "Transfer all": "Перевести всё",
+ "Transfer amount": "Сумма перевода",
"Transfer Amount": "Сумма перевода",
"Transfer failed": "Перевод не удался",
+ "Transfer rewards": "Перевести вознаграждения",
"Transfer Rewards": "Перевести награды",
"Transfer successful": "Перевод успешен",
"Transfer to Balance": "Перевести на баланс",
+ "Transfer to wallet": "Перевести в кошелёк",
"Translation": "Перевод",
"Transparent Billing": "Прозрачная тарификация",
"Trend": "Тренд",
@@ -4834,6 +5019,9 @@
"Unable to read clipboard": "Не удалось прочитать буфер обмена",
"Unauthorized": "Не авторизован",
"Unauthorized Access": "Несанкционированный доступ",
+ "Unavailable": "Недоступно",
+ "Unavailable deletion threshold (hours)": "Порог удаления при недоступности (часы)",
+ "Unavailable since": "Недоступно с",
"Unbind": "Отвязать",
"Unbind failed": "Не удалось отвязать",
"Unbound {{provider}}": "{{provider}} отвязан",
@@ -4861,6 +5049,7 @@
"Untitled": "Без названия",
"Untrusted upstream data:": "Недоверенные вышестоящие данные:",
"Unused": "Неиспользованные",
+ "Up to 100 unique models can be tested in one contribution.": "В одном предоставлении можно протестировать до 100 уникальных моделей.",
"Up to 4 strings that stop generation": "До 4 строк, останавливающих генерацию",
"Update": "Обновить",
"Update All Balances": "Обновить все балансы",
@@ -4895,6 +5084,7 @@
"Updated a vendor": "Обновлён поставщик",
"Updated channel {{name}} (ID: {{id}})": "Обновлён канал {{name}} (ID: {{id}})",
"Updated daily": "Обновляется ежедневно",
+ "Updated model statuses in batch": "Статусы моделей обновлены пакетно",
"Updated successfully": "Обновлено успешно",
"Updated system setting {{key}}": "Обновлён системный параметр {{key}}",
"Updated user {{username}} (ID: {{id}})": "Обновлён пользователь {{username}} (ID: {{id}})",
@@ -4952,6 +5142,7 @@
"Usage logs": "Журналы использования",
"Usage Logs": "Журнал использования",
"Usage mode": "Режим использования",
+ "Usage reward": "Вознаграждение за использование",
"Usage-based": "На основе использования",
"USD": "USD",
"USD Exchange Rate": "Обменный курс USD",
@@ -4978,6 +5169,7 @@
"Use the full-width table to scan prices, then select a row to edit it here.": "Просмотрите цены в таблице, затем выберите строку для редактирования здесь.",
"Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.": "Используется группа токена. Если у токена нет группы — группа пользователя. Группа auto перебирает порядок автоназначения сверху вниз.",
"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.": "Используйте таблицу групп тарификации, чтобы управлять коэффициентом и отображением группы в списке создания токена.",
+ "Use the provider base URL without a model-specific path.": "Используйте базовый URL провайдера без пути конкретной модели.",
"Use this callback URL pattern when registering a custom OAuth provider.": "Используйте этот формат URL обратного вызова при регистрации пользовательского провайдера OAuth.",
"Use this token for API authentication": "Используйте этот токен для аутентификации API",
"Use your Passkey": "Используйте свой ключ доступа",
@@ -5001,6 +5193,7 @@
"User Analytics": "Аналитика пользователей",
"User Consumption Ranking": "Рейтинг потребления",
"User Consumption Trend": "Тренд потребления",
+ "User contribution view": "Пользовательский раздел",
"User created successfully": "Пользователь успешно создан",
"User dashboard and quota controls.": "Панель пользователя и управление квотами.",
"User deleted successfully": "Пользователь успешно удален",
@@ -5038,8 +5231,10 @@
"Users must wait for a successful drawing before upscales or variations.": "Пользователи должны дождаться успешного рисунка перед апскейлом или вариациями.",
"Users of vip, when billed as premium, pay ratio": "Пользователи vip при тарификации по premium платят коэффициент",
"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.": "Пользователи видят только группы, отмеченные как доступные для выбора. Недоступные для выбора группы всё равно могут назначаться администраторами.",
+ "Users review this exact content before every first submission or resubmission.": "Пользователи видят именно этот текст перед первой и каждой повторной отправкой.",
"uses": "использует",
"Using the complete global Auto order ({{count}} groups)": "Используется полный глобальный порядок Auto (групп: {{count}})",
+ "Validation and submission": "Проверка и отправка",
"Validity": "Срок действия",
"Validity Period": "Срок действия",
"Value": "Значение",
@@ -5074,6 +5269,7 @@
"Verification scope is missing": "Область проверки не указана",
"Verify": "Проверить",
"Verify and Sign In": "Подтвердить и войти",
+ "Verify every current revision independently before approval.": "Перед одобрением независимо проверяйте каждую текущую версию.",
"Verify routing with Playground or your client": "Проверьте маршрутизацию через Playground или ваш клиент",
"Verify Setup": "Проверить настройку",
"Verify to view channel key": "Подтвердить для просмотра ключа канала",
@@ -5094,6 +5290,7 @@
"View all currently available models": "Просмотреть все доступные модели",
"View channel lists and details without secrets.": "Просмотр списков и сведений о каналах без секретов.",
"View channel secrets": "Просматривать секреты каналов",
+ "View contribution details": "Просмотреть сведения",
"View detailed information about this user including balance, usage statistics, and invitation details.": "Просмотр подробной информации об этом пользователе, включая баланс, статистику использования и данные приглашения.",
"View details": "Просмотреть детали",
"View document": "Просмотреть документ",
@@ -5150,6 +5347,7 @@
"Wallet Management": "Управление кошельком",
"Wallet management and personal preferences.": "Управление кошельком и личные предпочтения.",
"Wallet Only": "Только кошелёк",
+ "Wallet transfer": "Перевод в кошелёк",
"Warning": "Предупреждение",
"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.": "Предупреждение: базовый URL не должен заканчиваться на /v1. Новый API обработает это автоматически. Это может привести к сбоям запросов.",
"Warning: Disabling 2FA will make your account less secure.": "Внимание: Отключение 2FA сделает вашу учетную запись менее безопасной.",
@@ -5218,6 +5416,9 @@
"Wire encoding for the embedding vectors": "Кодирование векторов в передаче",
"with conflicts": "с конфликтами",
"with the API key from your token settings.": "на API-ключ из настроек токенов.",
+ "Withdraw": "Отозвать",
+ "Withdraw channel contribution?": "Отозвать предоставленный канал?",
+ "Withdraw contribution": "Отозвать предоставление",
"Without additional conditions, only the type above is used for pruning.": "Без дополнительных условий для очистки используется только тип выше.",
"Worked example": "Разобранный пример",
"Worker Access Key": "Ключ доступа воркера",
diff --git a/web/src/i18n/locales/vi.json b/web/src/i18n/locales/vi.json
index 4f42938a7e95..aa99521ef5d6 100644
--- a/web/src/i18n/locales/vi.json
+++ b/web/src/i18n/locales/vi.json
@@ -61,6 +61,7 @@
"{{field}} updated to {{value}}": "{{field}} đã cập nhật thành {{value}}",
"{{field}} updated to {{value}} for tag: {{tag}}": "{{field}} đã cập nhật thành {{value}} cho nhãn: {{tag}}",
"{{method}} {{route}}": "{{method}} {{route}}",
+ "{{milliseconds}} ms": "{{milliseconds}} ms",
"{{modality}} not supported": "Không hỗ trợ {{modality}}",
"{{modality}} supported": "Hỗ trợ {{modality}}",
"{{n}} model(s) selected": "Đã chọn {{n}} model",
@@ -98,6 +99,7 @@
"1. Create an application in your Gotify server": "1. Tạo một ứng dụng trong máy chủ Gotify của bạn",
"10 / page": "10 / trang",
"100 / page": "100 / trang",
+ "100 basis points equals 1% of billed quota.": "100 điểm cơ bản tương đương 1% hạn mức tính phí.",
"14 Days": "14 ngày",
"192.168.1.1
10.0.0.0/8": "192.168.1.1
10.0.0.0/8",
"1M": "1M",
@@ -118,9 +120,11 @@
"7 days ago": "7 ngày trước",
"80,443,8080": "80,443,8080",
"A billing multiplier. Lower ratios mean lower API call costs.": "Hệ số tính phí. Tỷ lệ càng thấp thì chi phí gọi API càng thấp.",
+ "A contribution can contain at most 100 models": "Một đóng góp có thể chứa tối đa 100 mô hình",
"A focused home for keys, balance, routing, and service health.": "Trang tổng quan tập trung cho khóa, số dư, định tuyến và trạng thái dịch vụ.",
"About": "Giới thiệu",
"About {{days}} days left": "Còn khoảng {{days}} ngày",
+ "Accept the channel contribution agreement": "Chấp nhận thỏa thuận đóng góp kênh",
"Accept Unpriced Models": "Chấp nhận các Mô hình chưa định giá",
"Accepts a JSON array of model identifiers that support the Imagine API.": "Chấp nhận một mảng JSON gồm các mã định danh mô hình hỗ trợ API Imagine.",
"Accepts comma-separated status codes and inclusive ranges.": "Chấp nhận mã trạng thái phân cách bằng dấu phẩy và phạm vi bao gồm.",
@@ -167,6 +171,7 @@
"Add a new model to the system by providing the necessary information.": "Thêm một mô hình mới vào hệ thống bằng cách cung cấp thông tin cần thiết.",
"Add a new user by providing necessary info.": "Thêm người dùng mới bằng cách cung cấp thông tin cần thiết.",
"Add a new vendor to the system": "Thêm một nhà cung cấp mới vào hệ thống",
+ "Add an allowed group": "Thêm nhóm được phép",
"Add an extra layer of security to your account": "Thêm một lớp bảo mật bổ sung cho tài khoản của bạn",
"Add and submit": "Thêm và gửi",
"Add Announcement": "Thêm Thông báo",
@@ -244,6 +249,8 @@
"Administer user accounts and roles.": "Quản lý tài khoản người dùng và vai trò.",
"Administrator account": "Tài khoản quản trị viên",
"Administrator username": "Tên người dùng quản trị viên",
+ "Administrator verification": "Xác minh của quản trị viên",
+ "Administrator verification started": "Đã bắt đầu xác minh của quản trị viên",
"Advance next reset time": "Dời thời gian đặt lại tiếp theo",
"Advanced": "Nâng cao",
"Advanced Configuration": "Cấu hình nâng cao",
@@ -272,6 +279,12 @@
"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.": "tổng hợp hơn 50 nhà cung cấp AI sau một API thống nhất. Quản lý truy cập, theo dõi chi phí và mở rộng dễ dàng.",
"Aggregation bucket": "Khoảng tổng hợp",
"AGPL v3.0 License": "Giấy phép AGPL v3.0",
+ "Agreement content is required": "Nội dung thỏa thuận là bắt buộc",
+ "Agreement Markdown": "Markdown của thỏa thuận",
+ "Agreement version": "Phiên bản thỏa thuận",
+ "Agreement version is required": "Phiên bản thỏa thuận là bắt buộc",
+ "Agreement version must not exceed 64 characters": "Phiên bản thỏa thuận không được vượt quá 64 ký tự",
+ "Agreement version: {{version}}": "Phiên bản thỏa thuận: {{version}}",
"AI Application Infrastructure Foundation": "Nền tảng hạ tầng ứng dụng AI",
"AI model testing environment": "Môi trường thử nghiệm mô hình AI",
"AI models": "mô hình AI",
@@ -287,6 +300,7 @@
"All API tokens": "Tất cả khóa API",
"All categories": "Tất cả danh mục",
"All conditions must match before this tier is used.": "Tất cả điều kiện phải khớp trước khi tầng này được sử dụng.",
+ "All contributions": "Tất cả đóng góp",
"All edits are overwrite operations. Leave fields empty to keep current values unchanged.": "Tất cả các chỉnh sửa đều là thao tác ghi đè. Để trống các trường để giữ nguyên giá trị hiện tại.",
"All files exceed the maximum size.": "Tất cả các tệp vượt quá kích thước tối đa.",
"All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.": "Tất cả tên nhóm được quản lý tại đây. Hệ số áp dụng khi cuộc gọi được tính phí theo nhóm này; hệ số nạp tiền áp dụng cho người dùng thuộc nhóm này.",
@@ -302,6 +316,7 @@
"All Sync Status": "Tất cả Trạng thái Đồng bộ",
"All systems operational": "Tất cả hệ thống hoạt động bình thường",
"All Tags": "Tất cả Thẻ",
+ "All tests passed": "Tất cả kiểm thử đã đạt",
"All Types": "All types",
"All upstream data is trusted": "Tất cả dữ liệu thượng nguồn đều được tin cậy",
"All users": "Tất cả người dùng",
@@ -341,6 +356,8 @@
"Allow using models without price configuration": "Cho phép sử dụng mô hình không có cấu hình giá",
"Allow wallet balance after quota used up": "Cho phép dùng số dư ví sau khi dùng hết hạn ngạch",
"Allowed": "Cho phép",
+ "Allowed channel types": "Loại kênh được phép",
+ "Allowed groups": "Nhóm được phép",
"Allowed Origins": "Nguồn gốc được phép",
"Allowed Ports": "Cổng được phép",
"Already have an account?": "Đã có tài khoản?",
@@ -378,6 +395,8 @@
"API Addresses": "Địa chỉ API",
"API Base URL (Important: Not Chat API) *": "URL cơ sở API (Quan trọng: Không phải API Chat) *",
"API Base URL *": "URL cơ sở API *",
+ "API endpoint": "Điểm cuối API",
+ "API endpoint is too long": "Điểm cuối API quá dài",
"API Endpoints": "Điểm cuối API",
"API Info": "Thông tin API",
"API info added. Click \"Save Settings\" to apply.": "Thông tin API đã được thêm. Nhấp vào \"Lưu Cài đặt\" để áp dụng.",
@@ -397,8 +416,10 @@
"API key from the provider": "khóa API từ nhà cung cấp",
"API key is loading, please try again in a moment": "Khóa API đang tải, vui lòng thử lại sau một chút",
"API key is required": "Khóa API là bắt buộc",
+ "API key is too long": "Khóa API quá dài",
"API Key mode (does not support batch creation)": "Chế độ Khóa API (không hỗ trợ tạo hàng loạt)",
"API Key mode: use APIKey|Region": "Chế độ khóa API: sử dụng APIKey|Region",
+ "API key must be a single line": "Khóa API phải nằm trên một dòng",
"API Key updated successfully": "API Key đã được cập nhật thành công",
"API Keys": "Khóa API",
"API Private Key": "Khóa riêng API",
@@ -420,6 +441,7 @@
"appended": "đã thêm vào cuối, được phụ lục",
"Application": "Ứng dụng",
"Applied {{name}} pricing to {{count}} models": "Đã áp dụng giá của {{name}} cho {{count}} mô hình",
+ "Applied automatically when a contribution is approved.": "Tự động áp dụng khi đóng góp được phê duyệt.",
"Applied upstream model changes to {{count}} channels": "Đã áp dụng thay đổi mô hình thượng nguồn cho {{count}} kênh",
"Applied upstream model changes to channel (ID: {{id}})": "Đã áp dụng thay đổi mô hình thượng nguồn cho kênh (ID: {{id}})",
"Applies to custom completion endpoints. JSON map of model → ratio.": "Áp dụng cho các điểm cuối hoàn thành tùy chỉnh. Bản đồ JSON của mô hình → tỷ lệ.",
@@ -430,6 +452,11 @@
"Apply reset": "Thực hiện đặt lại",
"Apply Sync": "Áp dụng đồng bộ",
"Applying...": "Đang áp dụng...",
+ "Approval is bound to this administrator test run ID.": "Phê duyệt được liên kết với ID lần chạy kiểm thử của quản trị viên này.",
+ "Approve": "Phê duyệt",
+ "Approved": "Đã phê duyệt",
+ "Approved channel tag": "Nhãn kênh đã phê duyệt",
+ "Approved channels are created with these routing and removal defaults.": "Kênh được phê duyệt sẽ được tạo với các giá trị mặc định về định tuyến và xóa này.",
"Approx.": "Xấp xỉ.",
"apps": "ứng dụng",
"Apps": "Ứng dụng",
@@ -460,6 +487,7 @@
"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 is selected": "Đã chọn ít nhất một mô hình",
"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ệ",
"Attach": "Đính kèm",
@@ -493,6 +521,7 @@
"auth.resetPasswordConfirm.description": "Xác nhận yêu cầu đặt lại để tạo mật khẩu mới.",
"auth.resetPasswordConfirm.retry": "Thử lại ({{seconds}} giây)",
"auth.resetPasswordConfirm.success": "Mật khẩu của bạn đã được đặt lại thành công",
+ "Authenticated channel contribution and reward workspace.": "Không gian đóng góp kênh và phần thưởng yêu cầu đăng nhập.",
"Authentication": "Xác thực",
"Authentication Method": "Phương thức xác thực",
"Authenticator code": "Mã xác thực",
@@ -513,12 +542,16 @@
"Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.": "Tự động đàm phán HTTP/2 khi khả dụng. HTTP/1.1 buộc dùng nhiều kết nối keep-alive khi có đồng thời.",
"Auto refresh": "Tự động làm mới",
"Auto Sync Upstream Models": "Tự động đồng bộ mô hình nguồn",
+ "Auto-disable models with no available channels": "Tự động tắt các model không có kênh khả dụng",
"Auto-disable rules": "Quy tắc tự động tắt",
"Auto-disable status codes": "Mã trạng thái tự tắt",
"Auto-disable-enabled channels only": "Chỉ kênh đã bật tự động vô hiệu hóa",
"Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.": "Chế độ này chỉ kiểm tra các kênh đã bật tự động vô hiệu hóa và không bị vô hiệu hóa thủ công.",
+ "Auto-disabled": "Tự tắt",
"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-enable models disabled by this setting when a channel recovers": "Tự động bật lại các model bị tắt bởi cài đặt này khi kênh khôi phục",
+ "Auto-enabled": "Tự bật",
"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",
@@ -535,8 +568,9 @@
"Available disk space": "Dung lượng đĩa khả dụng",
"Available Models": "Mô hình khả dụng",
"Available reset credits": "Lượt đặt lại khả dụng",
+ "Available reward": "Phần thưởng khả dụng",
"Available Rewards": "Phần thưởng hiện có",
- "Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.": "Các biến khả dụng: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}} và các đường dẫn như {{current.roles}}.",
+ "Available: {{amount}}": "Khả dụng: {{amount}}",
"Average latency": "Độ trễ trung bình",
"Average latency, TTFT, and success rate by group": "Độ trễ trung bình, TTFT và tỷ lệ thành công theo nhóm",
"Average latency, TTFT, TPS, and success rate": "Độ trễ trung bình, TTFT, TPS và tỷ lệ thành công",
@@ -599,10 +633,12 @@
"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",
"Batch detection failed": "Phát hiện hàng loạt thất bại",
"Batch disable failed": "Vô hiệu hóa hàng loạt thất bại",
+ "Batch Disable Models with No Channels": "Tắt model không có kênh khả dụng",
"Batch Edit": "Chỉnh sửa hàng loạt",
"Batch edit all channels with this tag. Leave fields empty to keep current values.": "Chỉnh sửa hàng loạt tất cả các kênh có gắn thẻ này. Để trống các trường để giữ nguyên giá trị hiện tại.",
"Batch Edit by Tag": "Chỉnh sửa hàng loạt theo Thẻ",
"Batch enable failed": "Kích hoạt hàng loạt thất bại",
+ "Batch Enable Models with Recovered Channels": "Bật model có kênh đã khôi phục",
"Batch Operations": "Thao tác hàng loạt",
"Batch processing failed": "Xử lý hàng loạt thất bại",
"Batch set tag for {{count}} channels": "Đã đặt thẻ hàng loạt cho {{count}} kênh",
@@ -743,6 +779,7 @@
"Change To": "Thay đổi thành",
"Changed Fields": "Trường đã thay đổi",
"Changes are written to the settings draft on save.": "Các thay đổi sẽ được ghi vào bản nháp cài đặt khi lưu.",
+ "Changing the version requires acceptance on the next submission.": "Khi đổi phiên bản, người dùng phải chấp nhận lại ở lần gửi tiếp theo.",
"Changing...": "Đang thay đổi...",
"Channel": "Kênh",
"Channel {{name}}": "Kênh {{name}}",
@@ -751,6 +788,10 @@
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.": "Ưu tiên kênh sẽ sử dụng lại kênh thành công gần nhất dựa trên các khóa được trích xuất từ ngữ cảnh yêu cầu hoặc JSON body.",
"Channel Affinity: Upstream Cache Hit": "Ưu tiên kênh: Cache hit từ upstream",
"Channel consistency repaired: {{success}} succeeded, {{fails}} failed": "Đã sửa tính nhất quán kênh: {{success}} thành công, {{fails}} thất bại",
+ "Channel Contribution Agreement": "Thỏa thuận đóng góp kênh",
+ "Channel Contribution Review": "Xét duyệt đóng góp kênh",
+ "Channel contribution settings": "Cài đặt đóng góp kênh",
+ "Channel Contributions": "Đóng góp kênh",
"Channel copied successfully": "Sao chép kênh thành công",
"Channel created successfully": "Tạo kênh thành công",
"Channel deleted successfully": "Xóa kênh thành công",
@@ -764,9 +805,14 @@
"Channel key unlocked": "Khóa kênh đã được mở khóa",
"Channel Management": "Quản lý kênh",
"Channel models": "Mô hình kênh",
+ "Channel name": "Tên kênh",
"Channel name is required": "Tên kênh là bắt buộc",
+ "Channel name must not exceed 128 characters": "Tên kênh không được vượt quá 128 ký tự",
+ "Channel tag is required": "Nhãn kênh là bắt buộc",
+ "Channel tag must not exceed 64 characters": "Nhãn kênh không được vượt quá 64 ký tự",
"Channel test completed": "Kiểm tra kênh hoàn tất",
"Channel test mode": "Chế độ kiểm tra kênh",
+ "Channel type": "Loại kênh",
"Channel type is required": "Loại kênh là bắt buộc",
"Channel updated successfully": "Kênh đã được cập nhật thành công",
"Channel-specific settings (JSON format)": "Cài đặt dành riêng cho kênh (định dạng JSON)",
@@ -956,6 +1002,7 @@
"Conditions (AND)": "Điều kiện (AND)",
"Confidence": "Tự tin",
"Configuration": "Cấu hình",
+ "Configuration changes invalidate the previous test result.": "Thay đổi cấu hình sẽ làm mất hiệu lực kết quả kiểm thử trước đó.",
"Configuration File": "Tệp Cấu hình",
"Configuration for Creem payment integration": "Cấu hình tích hợp thanh toán Creem",
"Configuration for Epay payment integration": "Cấu hình cho tích hợp thanh toán Epay",
@@ -991,6 +1038,7 @@
"Configure Waffo payment aggregation platform integration": "Cấu hình tích hợp nền tảng tổng hợp thanh toán Waffo",
"Configure your account behavior preferences": "Cấu hình tùy chọn hành vi tài khoản của bạn",
"Configure your account preferences and integrations": "Cấu hình các tùy chọn và tích hợp tài khoản của bạn",
+ "Configured": "Đã cấu hình",
"Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.": "Được lưu dưới dạng JSON PayMethods. Giá trị type quyết định luồng thanh toán sẽ dùng: stripe cho Stripe, waffo_pancake cho Waffo Pancake, các giá trị khác được gửi tới Epay dưới dạng tham số type.",
"Configured routes and latency checks": "Tuyến đã cấu hình và kiểm tra độ trễ",
"Confirm": "Xác nhận",
@@ -1029,6 +1077,7 @@
"Connect through OpenAI, Claude, Gemini, and other compatible API routes": "Kết nối qua OpenAI, Claude, Gemini và các tuyến API tương thích khác",
"Connected to io.net service normally.": "Đã kết nối bình thường tới dịch vụ io.net.",
"Connection closed": "Kết nối đã đóng",
+ "Connection details": "Chi tiết kết nối",
"Connection error": "Lỗi kết nối",
"Connection failed": "Kết nối thất bại",
"Connection info detected in clipboard": "Đã phát hiện thông tin kết nối trong bảng tạm",
@@ -1059,7 +1108,26 @@
"Continue with OIDC": "Tiếp tục với OIDC",
"Continue with Telegram": "Tiếp tục với Telegram",
"Continue with WeChat": "Tiếp tục với WeChat",
+ "Continuous failure time before automatic deletion.": "Thời gian lỗi liên tục trước khi tự động xóa.",
"Contract review, compliance, summarisation": "Rà soát hợp đồng, tuân thủ, tóm tắt",
+ "Contribute": "Đóng góp",
+ "Contribute a channel": "Đóng góp một kênh",
+ "Contribution approved": "Đóng góp đã được phê duyệt",
+ "Contribution channel connection settings are read-only here. Submit sensitive changes through channel contribution review; only tag, priority, and weight can be edited.": "Cấu hình kết nối của kênh đóng góp chỉ có thể đọc tại đây. Hãy gửi thay đổi nhạy cảm qua quy trình xét duyệt lại đóng góp; tại đây chỉ có thể sửa thẻ, độ ưu tiên và trọng số.",
+ "Contribution deleted": "Đóng góp đã bị xóa",
+ "Contribution details": "Chi tiết đóng góp",
+ "Contribution details are incomplete": "Chi tiết đóng góp chưa đầy đủ",
+ "Contribution draft saved": "Đã lưu bản nháp đóng góp",
+ "Contribution eligibility": "Điều kiện đóng góp",
+ "Contribution rejected": "Đóng góp đã bị từ chối",
+ "Contribution review": "Xét duyệt đóng góp",
+ "Contribution settings saved": "Đã lưu cài đặt đóng góp",
+ "Contribution settings unavailable": "Cài đặt đóng góp không khả dụng",
+ "Contribution submitted for review": "Đã gửi đóng góp để xét duyệt",
+ "Contribution withdrawn": "Đã rút đóng góp",
+ "Contributions will appear here when users create drafts.": "Đóng góp sẽ xuất hiện ở đây khi người dùng tạo bản nháp.",
+ "Contributor": "Người đóng góp",
+ "Control eligibility, routing defaults, health removal, rewards, and the agreement.": "Quản lý điều kiện, định tuyến mặc định, xóa theo tình trạng, phần thưởng và thỏa thuận.",
"Control which models are exposed and which groups may use them.": "Kiểm soát mô hình được hiển thị và nhóm nào có thể sử dụng chúng.",
"Controls how much the model thinks before answering": "Điều chỉnh mức suy luận trước khi trả lời",
"Controls randomness and creativity": "Điều chỉnh độ ngẫu nhiên và sáng tạo",
@@ -1198,6 +1266,7 @@
"Current Billing": "Thanh toán hiện tại",
"Current Cache Size": "Kích thước bộ nhớ đệm hiện tại",
"Current domain": "Tên miền hiện tại",
+ "Current draft is saved": "Bản nháp hiện tại đã được lưu",
"Current email: {{email}}. Enter a new email to change.": "Email hiện tại: {{email}}. Nhập email mới để thay đổi.",
"Current key": "Khóa hiện tại",
"Current legacy JSON is invalid, cannot append": "JSON định dạng cũ hiện tại không hợp lệ, không thể thêm",
@@ -1206,6 +1275,7 @@
"Current Password": "Mật khẩu hiện tại",
"Current Price": "Giá hiện tại",
"Current quota": "Hạn mức hiện tại",
+ "Current reward rate": "Tỷ lệ phần thưởng hiện tại",
"Current Value": "Present value",
"Current version": "Phiên bản hiện tại",
"Current:": "Hiện tại:",
@@ -1270,6 +1340,7 @@
"Default Bearer": "Bearer mặc định",
"Default Collapse Sidebar": "Mặc định Thu gọn Thanh bên",
"Default consumption chart": "Biểu đồ tiêu thụ mặc định",
+ "Default is 0 until routing is intentionally enabled.": "Mặc định là 0 cho đến khi định tuyến được chủ động bật.",
"Default Max Tokens": "Tokens Tối đa Mặc định",
"Default model call chart": "Biểu đồ lượt gọi mô hình mặc định",
"Default range": "Khoảng mặc định",
@@ -1295,6 +1366,7 @@
"Delete all stale": "Xóa tất cả mất kết nối",
"Delete Auto-Disabled": "Xóa Tự động vô hiệu hóa",
"Delete Channel": "Xóa Kênh",
+ "Delete channel contribution?": "Xóa đóng góp kênh?",
"Delete Channels?": "Xóa các kênh?",
"Delete condition": "Xóa điều kiện",
"Delete Condition": "Xóa điều kiện",
@@ -1359,6 +1431,7 @@
"Describe": "Mô tả",
"Describe this model...": "Mô tả mô hình này...",
"Describe this vendor...": "Mô tả nhà cung cấp này...",
+ "Describe what must be corrected": "Mô tả nội dung cần sửa",
"Description": "Mô tả",
"Description is required": "Mô tả là bắt buộc",
"Designed and Developed by": "Thiết kế và Phát triển bởi",
@@ -1385,6 +1458,7 @@
"Disable": "Vô hiệu hóa",
"Disable 2FA": "Tắt 2FA",
"Disable All": "Vô hiệu hóa tất cả",
+ "Disable Models with No Channels?": "Tắt các model không có kênh khả dụng?",
"Disable on failure": "Vô hiệu hóa khi lỗi",
"Disable selected channels": "Vô hiệu hóa các kênh đã chọn",
"Disable selected models": "Vô hiệu hóa các mô hình đã chọn",
@@ -1457,6 +1531,7 @@
"Downgrade to pre-purchase group": "Hạ xuống nhóm trước khi mua",
"Downgrade to this group after the subscription expires": "Hạ xuống nhóm này sau khi đăng ký hết hạn",
"Download": "Tải xuống",
+ "Draft": "Bản nháp",
"Drag {{group}} to reorder": "Kéo {{group}} để sắp xếp lại",
"Draw": "Vẽ",
"Drawing": "Vẽ",
@@ -1488,7 +1563,6 @@
"e.g. my-gitlab": "ví dụ: my-gitlab",
"e.g. New API Console": "Ví dụ: Bảng điều khiển API mới",
"e.g. openid profile email": "ví dụ: openid profile email",
- "e.g. Requires level {{required}}; your current level is {{current}}": "ví dụ: Yêu cầu cấp độ {{required}}; cấp độ hiện tại của bạn là {{current}}",
"e.g. Suitable for light usage": "ví dụ: Phù hợp cho sử dụng nhẹ",
"e.g. This request does not meet access policy": "ví dụ: Yêu cầu này không đáp ứng chính sách truy cập",
"e.g., 0.95": "e.g., 0.95",
@@ -1532,10 +1606,12 @@
"Edit": "Chỉnh sửa",
"Edit {{title}}": "Chỉnh sửa {{title}}",
"Edit all channels with tag:": "Chỉnh sửa tất cả các kênh với thẻ:",
+ "Edit and resubmit": "Chỉnh sửa và gửi lại",
"Edit Announcement": "Chỉnh sửa thông báo",
"Edit API Shortcut": "Chỉnh sửa lối tắt API",
"Edit billing ratios and user-selectable groups in one table.": "Chỉnh sửa tỷ lệ tính phí và nhóm người dùng có thể chọn trong một bảng.",
"Edit Channel": "Chỉnh sửa Kênh",
+ "Edit channel contribution": "Chỉnh sửa đóng góp kênh",
"Edit channel routing": "Chỉnh sửa định tuyến kênh",
"Edit chat preset": "Chỉnh sửa cài đặt trước trò chuyện",
"Edit discount tier": "Chỉnh sửa bậc giảm giá",
@@ -1596,6 +1672,7 @@
"Enable io.net model deployment service in console": "Bật dịch vụ triển khai mô hình io.net trong bảng điều khiển",
"Enable LinuxDO OAuth": "Bật LinuxDO OAuth",
"Enable model performance metrics": "Bật chỉ số hiệu năng mô hình",
+ "Enable Models with Recovered Channels?": "Bật các model có kênh đã khôi phục?",
"Enable OIDC": "Bật OIDC",
"Enable or disable this channel": "Bật hoặc tắt kênh này",
"Enable or disable this model": "Bật hoặc tắt mô hình này",
@@ -1624,6 +1701,7 @@
"Enabled all channels with tag: {{tag}}": "Đã bật tất cả kênh với nhãn: {{tag}}",
"Enabled channels with tag {{tag}}": "Đã kích hoạt các kênh có thẻ {{tag}}",
"Enabled Status": "Trạng thái kích hoạt",
+ "Enabling this setting immediately disables all currently enabled models with no available channels. Turning it off later will not automatically re-enable those models. Continue?": "Bật cài đặt này sẽ ngay lập tức tắt tất cả mô hình đang hoạt động nhưng không có kênh khả dụng. Việc tắt cài đặt sau đó sẽ không tự động bật lại các mô hình này. Tiếp tục?",
"Enabling...": "Đang bật...",
"Encourages introducing new topics": "Khuyến khích chủ đề mới",
"Encourages new topics": "Khuyến khích chủ đề mới",
@@ -1635,6 +1713,7 @@
"Endpoint": "Endpoint",
"Endpoint config": "Cấu hình điểm cuối",
"Endpoint Configuration": "Cấu hình điểm cuối",
+ "Endpoint type": "Loại điểm cuối",
"Endpoint Type": "Loại điểm cuối",
"Endpoint, provider-specific settings, and credentials.": "Endpoint, cài đặt riêng của nhà cung cấp và thông tin xác thực.",
"Endpoint:": "Điểm cuối:",
@@ -1650,8 +1729,10 @@
"Enter a positive integer": "Nhập một số nguyên dương",
"Enter a positive or negative amount to adjust the quota": "Nhập một giá trị dương hoặc âm để điều chỉnh hạn ngạch",
"Enter a react-icons component name. Invalid names show no icon.": "Nhập tên component react-icons. Tên không hợp lệ sẽ không hiển thị biểu tượng.",
+ "Enter a valid API endpoint": "Nhập điểm cuối API hợp lệ",
"Enter a valid email or leave blank": "Nhập email hợp lệ hoặc để trống",
"Enter a value and press Enter": "Nhập giá trị và nhấn Enter",
+ "Enter a whole number within the allowed range": "Nhập số nguyên trong phạm vi cho phép",
"Enter amount in {{currency}}": "Nhập số tiền bằng {{currency}}",
"Enter amount in tokens": "Nhập số lượng token",
"Enter announcement content (supports Markdown & HTML)": "Nhập nội dung thông báo (hỗ trợ Markdown & HTML)",
@@ -1689,6 +1770,7 @@
"Enter password (8-20 characters)": "Nhập mật khẩu (8-20 ký tự)",
"Enter quota in {{currency}}": "Nhập hạn mức bằng {{currency}}",
"Enter quota in tokens": "Nhập hạn mức bằng token",
+ "Enter reward quota": "Nhập hạn mức phần thưởng",
"Enter secret key": "Nhập khóa bí mật",
"Enter system prompt (user prompt takes priority)": "Nhập lời nhắc hệ thống (lời nhắc người dùng được ưu tiên)",
"Enter tag name (optional)": "Nhập tên thẻ (tùy chọn)",
@@ -1699,6 +1781,7 @@
"Enter the full URL of your Gotify server": "Nhập URL đầy đủ của máy chủ Gotify của bạn",
"Enter the knowledge base ID": "Nhập ID cơ sở tri thức",
"Enter the path before /suno, usually just the domain": "Nhập đường dẫn trước /suno, thường chỉ là tên miền",
+ "Enter the provider API key": "Nhập khóa API của nhà cung cấp",
"Enter the quota amount in {{currency}}": "Nhập số lượng hạn mức bằng {{currency}}",
"Enter the quota amount in tokens": "Nhập số lượng hạn ngạch bằng token",
"Enter the verification code": "Nhập mã xác minh",
@@ -1738,8 +1821,8 @@
"Error Type (optional)": "Loại lỗi (tùy chọn)",
"Estimated cost": "Chi phí ước tính",
"Estimated quota cost": "Ước tính chi phí hạn mức",
- "Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.": "Đánh giá các trường trong phản hồi thông tin người dùng của nhà cung cấp. Điều kiện và nhóm lồng nhau sử dụng logic and/or.",
"Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.": "Mỗi tên nhóm trong bảng định giá có thể dùng ở hai nơi: trên người dùng (nhóm người dùng, do quản trị viên gán) và trên token (nhóm token, chọn khi tạo token). Cùng một bộ tên, hai vai trò khác nhau.",
+ "Every model has administrator pricing": "Mọi mô hình đều có giá do quản trị viên cấu hình",
"Every other device will lose access immediately. This device will remain signed in.": "Mọi thiết bị khác sẽ mất quyền truy cập ngay lập tức. Thiết bị này vẫn duy trì đăng nhập.",
"Everything configured for this group, in one place.": "Toàn bộ cấu hình của nhóm này, tại một nơi.",
"Exact": "Chính xác",
@@ -1802,6 +1885,9 @@
"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",
"Failed to apply overwrite.": "Không thể áp dụng ghi đè.",
+ "Failed to approve contribution": "Không thể phê duyệt đóng góp",
+ "Failed to batch disable models": "Không thể tắt hàng loạt model",
+ "Failed to batch enable models": "Không thể bật hàng loạt model",
"Failed to bind email": "Không thể liên kết email",
"Failed to change password": "Không thể thay đổi mật khẩu",
"Failed to check for updates": "Không thể kiểm tra cập nhật",
@@ -1827,6 +1913,7 @@
"Failed to delete API key": "Xóa API key thất bại",
"Failed to delete API keys": "Không thể xóa khóa API",
"Failed to delete channel": "Không thể xóa kênh",
+ "Failed to delete contribution": "Không thể xóa đóng góp",
"Failed to delete disabled channels": "Không thể xóa các kênh đã vô hiệu hóa",
"Failed to delete failed models": "Xóa các mô hình thất bại không thành công",
"Failed to delete group": "Không thể xóa nhóm",
@@ -1864,6 +1951,10 @@
"Failed to load": "Tải thất bại",
"Failed to load API keys": "Không thể tải khóa API",
"Failed to load billing history": "Không thể tải lịch sử thanh toán",
+ "Failed to load contribution": "Không thể tải đóng góp",
+ "Failed to load contribution rewards": "Không thể tải phần thưởng đóng góp",
+ "Failed to load contribution settings": "Không thể tải cài đặt đóng góp",
+ "Failed to load contributions": "Không thể tải danh sách đóng góp",
"Failed to load enabled models": "Không thể tải các mô hình đã bật",
"Failed to load home page content": "Không thể tải nội dung trang chủ",
"Failed to load image": "Không thể tải ảnh",
@@ -1886,6 +1977,7 @@
"Failed to refresh credential": "Không thể làm mới thông tin xác thực",
"Failed to regenerate backup codes": "Không thể tạo lại mã sao lưu",
"Failed to register Passkey": "Không thể đăng ký Passkey",
+ "Failed to reject contribution": "Không thể từ chối đóng góp",
"Failed to remove Passkey": "Không thể xóa Passkey",
"Failed to repair channel consistency": "Không thể sửa tính nhất quán kênh",
"Failed to reset 2FA": "Không thể đặt lại 2FA",
@@ -1895,6 +1987,8 @@
"Failed to save": "Lưu thất bại",
"Failed to save announcements": "Không thể lưu thông báo",
"Failed to save API info": "Không thể lưu thông tin API",
+ "Failed to save contribution draft": "Không thể lưu bản nháp đóng góp",
+ "Failed to save contribution settings": "Không thể lưu cài đặt đóng góp",
"Failed to save FAQ": "Không thể lưu FAQ",
"Failed to save Uptime Kuma groups": "Không thể lưu nhóm Uptime Kuma",
"Failed to search API keys": "Không thể tìm kiếm khóa API",
@@ -1911,16 +2005,19 @@
"Failed to start Discord login": "Không thể bắt đầu đăng nhập Discord",
"Failed to start GitHub login": "Không thể bắt đầu đăng nhập GitHub",
"Failed to start LinuxDO login": "Không thể bắt đầu đăng nhập LinuxDO",
+ "Failed to start model tests": "Không thể bắt đầu kiểm thử mô hình",
"Failed to start OIDC login": "Không thể bắt đầu đăng nhập OIDC",
"Failed to start Passkey login": "Không thể bắt đầu đăng nhập Passkey",
"Failed to start Passkey registration": "Không thể bắt đầu đăng ký Passkey",
"Failed to start Telegram binding": "Không thể bắt đầu liên kết Telegram",
"Failed to start testing all channels": "Không thể bắt đầu kiểm tra tất cả các kênh",
"Failed to start verification": "Không thể bắt đầu xác minh",
+ "Failed to submit contribution": "Không thể gửi đóng góp",
"Failed to sync prices": "Không thể đồng bộ giá",
"Failed to sync ratios": "Không thể đồng bộ tỷ lệ",
"Failed to test all channels": "Không thể kiểm tra tất cả các kênh",
"Failed to test channel": "Không thể kiểm tra kênh",
+ "Failed to transfer rewards": "Không thể chuyển phần thưởng",
"Failed to update all balances": "Không thể cập nhật tất cả số dư",
"Failed to update API key": "Không thể cập nhật khóa API",
"Failed to update API key status": "Không thể cập nhật trạng thái khóa API",
@@ -1935,7 +2032,9 @@
"Failed to update settings": "Không thể cập nhật cài đặt",
"Failed to update tag": "Không thể cập nhật thẻ",
"Failed to update user": "Không thể cập nhật người dùng",
+ "Failed to withdraw contribution": "Không thể rút đóng góp",
"Failure keywords": "Từ khóa thất bại",
+ "Failure since": "Lỗi từ",
"Fair": "Công bằng",
"Fallback": "Dự phòng",
"Fallback base URL": "Base URL fallback",
@@ -1955,9 +2054,12 @@
"Fetch available models for:": "Tìm nạp các mô hình khả dụng cho:",
"Fetch available models from upstream": "Lấy các mô hình khả dụng từ nguồn trên",
"Fetch from Upstream": "Lấy từ nguồn",
+ "Fetch models": "Lấy mô hình",
"Fetch Models": "Tìm nạp Mô hình",
+ "Fetch models or enter model IDs": "Lấy mô hình hoặc nhập ID mô hình",
"Fetched {{count}} model(s) from upstream": "Đã lấy {{count}} mô hình từ upstream",
"Fetched {{count}} models": "Đã lấy {{count}} mô hình",
+ "Fetched and saved {{count}} models": "Đã lấy và lưu {{count}} mô hình",
"Fetching prefill groups...": "Đang tải nhóm điền sẵn...",
"Fetching upstream prices...": "Đang lấy giá upstream...",
"Fetching upstream ratios...": "Đang lấy tỷ lệ thượng nguồn...",
@@ -1978,10 +2080,6 @@
"Fill in the following info to create a new subscription plan": "Điền thông tin sau để tạo gói đăng ký mới",
"Fill Related Models": "Điền Mô hình Liên quan",
"Fill Template": "Điền Mẫu",
- "Fill template: level and active": "Điền mẫu: cấp độ và trạng thái hoạt động",
- "Fill template: level message": "Điền mẫu: thông báo cấp độ",
- "Fill template: organization message": "Điền mẫu: thông báo tổ chức",
- "Fill template: organization or role": "Điền mẫu: tổ chức hoặc vai trò",
"Fill Templates": "Điền mẫu",
"Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.": "Nhập đầy đủ giá trị model trong body yêu cầu của client, ví dụ gpt-4o hoặc gemini-2.5-flash. Ngăn cách nhiều model bằng dấu phẩy.",
"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format": "Điền thoughtSignature chỉ dành cho các kênh Gemini/Vertex sử dụng định dạng OpenAI",
@@ -2092,6 +2190,7 @@
"Full Code": "Mã đầy đủ",
"Full input length": "Độ dài đầu vào đầy đủ",
"Full layout": "Bố cục đầy đủ",
+ "Full model test started": "Đã bắt đầu kiểm thử toàn bộ mô hình",
"Full width": "Toàn chiều rộng",
"Function calling": "Gọi hàm",
"Functions": "Hàm",
@@ -2122,7 +2221,9 @@
"Get started": "Bắt đầu",
"Get Started": "Bắt đầu",
"GitHub": "GitHub",
+ "Give the contributor a clear reason they can address before resubmitting.": "Nêu rõ lý do để người đóng góp có thể khắc phục trước khi gửi lại.",
"Give the group a recognizable name and optional description.": "Đặt cho nhóm một cái tên dễ nhận biết và mô tả tùy chọn.",
+ "Give this contribution a recognizable name": "Đặt tên dễ nhận biết cho đóng góp này",
"Give this group a recognizable name.": "Hãy đặt cho nhóm này một cái tên dễ nhận biết.",
"Global configuration and administrative tools.": "Cấu hình toàn cục và công cụ quản trị.",
"Global Coverage": "Phạm vi toàn cầu",
@@ -2166,6 +2267,7 @@
"Group details": "Chi tiết nhóm",
"Group identifier": "Định danh nhóm",
"Group is required": "Yêu cầu nhóm",
+ "Group must not exceed 64 characters": "Nhóm không được vượt quá 64 ký tự",
"Group name": "Tên nhóm",
"Group Name": "Tên Nhóm",
"Group name cannot be changed when editing.": "Tên nhóm không thể thay đổi khi chỉnh sửa.",
@@ -2205,6 +2307,8 @@
"Header Value (supports string or JSON mapping)": "Giá trị header (hỗ trợ chuỗi hoặc ánh xạ JSON)",
"header. Anthropic-formatted endpoints accept the": ". Các endpoint định dạng Anthropic chấp nhận header",
"Health": "Sức khỏe",
+ "Health check interval (minutes)": "Khoảng kiểm tra tình trạng (phút)",
+ "Health checks continue while the contributed channel is active.": "Kiểm tra tình trạng tiếp tục khi kênh đóng góp còn hoạt động.",
"Healthy": "Bình thường",
"Hidden": "Ẩn",
"Hidden — verify to reveal": "Ẩn — xác minh để hiển thị",
@@ -2224,6 +2328,7 @@
"High-risk status code retry risk check 4": "Tôi tự nguyện chấp nhận rủi ro về độ ổn định hệ thống, gồm hết thời gian chờ nghiêm trọng ở phía máy khách và khả năng dịch vụ gặp sự cố, đồng thời chịu trách nhiệm về tình trạng tồn đọng yêu cầu hoặc gián đoạn dịch vụ phát sinh.",
"High-risk status code retry risk disclaimer": "### ⚠️ Thao tác rủi ro cao: cảnh báo và tuyên bố miễn trừ trách nhiệm khi thử lại mã 504/524\n\nTheo mặc định, dự án không thử lại với mã `400` (yêu cầu không hợp lệ), `504` (gateway hết thời gian chờ) hoặc `524` (đã hết thời gian chờ). Mã 504 và 524 thường có nghĩa là **yêu cầu đã đến dịch vụ AI thượng nguồn thành công và phía thượng nguồn đã bắt đầu xử lý, nhưng kết nối bị đóng vì quá trình xử lý ở thượng nguồn mất quá nhiều thời gian**. Điều này thường cho thấy nút thắt nằm ở dịch vụ thượng nguồn.\n\nBật chuyển hướng hoặc thử lại cho các mã hết thời gian chờ này là một **thao tác có rủi ro cực kỳ cao**. Trước khi bật, bạn phải đọc kỹ và hiểu các hậu quả sau:\n\n#### 1. Rủi ro chính (hãy đọc kỹ)\n\n1. 💸 Tính phí hai lần hoặc nhiều lần: phần lớn nhà cung cấp AI thượng nguồn **vẫn tính phí** cho yêu cầu đã bắt đầu xử lý nhưng bị ngắt do hết thời gian chờ mạng (504/524). Mỗi lần thử lại gửi một yêu cầu hoàn toàn mới đến thượng nguồn và có thể gây **tính phí hai lần hoặc nhiều lần**.\n2. ⏳ Hết thời gian chờ nghiêm trọng ở phía máy khách: khi một yêu cầu đã hết thời gian chờ, việc thử lại có thể làm tổng độ trễ tăng nhiều lần và gây thời gian chờ nghiêm trọng hoặc không thể chấp nhận cho máy khách cuối.\n3. 💥 Tồn đọng yêu cầu và sự cố dịch vụ: buộc thử lại giữ luồng và kết nối lâu hơn. Khi tải cao, điều này có thể gây **tồn đọng yêu cầu** nghiêm trọng, cạn kiệt tài nguyên, phát sinh lỗi dây chuyền và làm dịch vụ proxy ngừng hoạt động.\n\n#### 2. Xác nhận rủi ro\n\nNếu vẫn chọn bật tính năng này, bạn xác nhận tất cả nội dung sau:",
"Higher priority channels are selected first": "Các kênh ưu tiên cao hơn được chọn trước tiên",
+ "Higher values are selected first.": "Giá trị cao hơn được chọn trước.",
"Historical Usage": "Lịch sử sử dụng",
"History of MjProxy-style image tasks.": "Lịch sử các tác vụ hình ảnh kiểu MjProxy.",
"Hit criteria: If cached tokens exist in usage, it counts as a hit.": "Tiêu chí trúng: Nếu cached tokens tồn tại trong usage, được tính là trúng.",
@@ -2245,6 +2350,7 @@
"How It Works": "Cách hoạt động",
"How model mapping works": "Cách hoạt động của ánh xạ mô hình",
"How much to charge for each US dollar of balance (Epay)": "Tính phí bao nhiêu cho mỗi đô la Mỹ số dư (Epay)",
+ "How often contributed channels are checked.": "Tần suất kiểm tra kênh đóng góp.",
"How this model name should match requests": "Tên mô hình này nên khớp với các yêu cầu như thế nào",
"How to deliver the resulting image": "Cách trả về ảnh kết quả",
"How to get an io.net API Key": "Cách lấy Khóa API io.net",
@@ -2280,6 +2386,7 @@
"https://your-server.example.com": "https://your-server.example.com",
"Human-readable name shown to users during Passkey prompts.": "Tên dễ đọc hiển thị cho người dùng trong quá trình nhắc nhở Passkey.",
"I confirm enabling high-risk retry": "Tôi xác nhận bật thử lại rủi ro cao",
+ "I have read and agree to": "Tôi đã đọc và đồng ý với",
"I have read and agree to the": "Tôi đã đọc và đồng ý với",
"I have read and understood the above compliance reminder": "Tôi đã đọc và hiểu nhắc nhở tuân thủ ở trên",
"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.": "Tôi đã đọc và hiểu nhắc nhở tuân thủ ở trên, thừa nhận các rủi ro pháp lý liên quan và xác nhận rằng tôi chịu trách nhiệm pháp lý phát sinh từ việc triển khai, vận hành và thu phí.",
@@ -2348,6 +2455,7 @@
"Input tokens": "Token đầu vào",
"Input Tokens": "Token đầu vào",
"Inset": "Khung trong",
+ "Inspect drafts, approved channels, rejected revisions, and health removals.": "Xem bản nháp, kênh đã phê duyệt, bản sửa đổi bị từ chối và các lần xóa theo tình trạng.",
"Inspect requests, errors, and billing details": "Kiểm tra yêu cầu, lỗi và chi tiết thanh toán",
"Inspect user prompts": "Kiểm tra lời nhắc của người dùng",
"Instance": "Phiên bản",
@@ -2456,9 +2564,13 @@
"Last 30 days uptime": "Uptime 30 ngày qua",
"Last active {{time}} · Expires {{expires}}": "Hoạt động gần nhất {{time}} · Hết hạn {{expires}}",
"Last check time": "Thời gian kiểm tra gần nhất",
+ "Last checked": "Kiểm tra gần nhất",
"Last detected addable models": "Mô hình có thể thêm được phát hiện gần nhất",
+ "Last error": "Lỗi gần nhất",
+ "Last failure": "Lỗi gần nhất",
"Last Login": "Lần đăng nhập cuối",
"Last Seen": "Lần cuối thấy",
+ "Last success": "Lần thành công gần nhất",
"Last Tested": "Được kiểm tra lần cuối",
"Last updated:": "Cập nhật lần cuối:",
"Last Used": "Dùng lần cuối",
@@ -2475,6 +2587,7 @@
"Learn more": "Tìm hiểu thêm",
"Learn more:": "Tìm hiểu thêm:",
"Leave": "Rời khỏi",
+ "Leave blank to keep the current key": "Để trống để giữ khóa hiện tại",
"Leave blank to keep the existing credential": "Để trống để giữ thông tin xác thực hiện có",
"Leave blank to keep the existing key": "Để trống để giữ khóa hiện có",
"Leave blank unless rotating the secret": "Để trống trừ khi xoay vòng bí mật",
@@ -2505,6 +2618,7 @@
"Less than or equal": "Nhỏ hơn hoặc bằng",
"Less Than or Equal": "Nhỏ hơn hoặc bằng",
"License": "Giấy phép",
+ "Lifetime earned": "Tổng đã nhận",
"Light": "Ánh sáng",
"Lightning Fast": "Nhanh như chớp",
"Limit period": "Thời hiệu",
@@ -2593,6 +2707,7 @@
"Manual Disabled": "Vô hiệu hóa thủ công",
"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).": "Ánh xạ các trường từ phản hồi thông tin người dùng sang thuộc tính người dùng cục bộ. Hỗ trợ đường dẫn lồng nhau (ví dụ: ocs.data.id).",
"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.": "Ánh xạ các mã định danh mô hình với các phiên bản API Gemini. Một mục `default` áp dụng khi không tìm thấy kết quả khớp cụ thể nào.",
+ "Map public model IDs to the provider model IDs when needed.": "Ánh xạ ID mô hình công khai sang ID của nhà cung cấp khi cần.",
"Map request model names to actual provider model names (JSON format)": "Ánh xạ tên mô hình yêu cầu đến tên mô hình thực tế của nhà cung cấp (định dạng JSON)",
"Map response status codes (JSON format)": "Ánh xạ mã trạng thái phản hồi (định dạng JSON)",
"Map upstream status codes to different codes": "Ánh xạ mã trạng thái upstream sang các mã khác",
@@ -2672,6 +2787,7 @@
"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.": "Tạo một cặp mới bên dưới, hoặc chọn một cặp hiện có ở phía dưới. Nhấn Lưu khi đã sẵn sàng.",
"Minute": "Phút",
"minutes": "phút",
+ "Missing": "Thiếu",
"Missing code": "Thiếu mã",
"Missing Models": "Thiếu Mô hình",
"Missing user data from Passkey login response": "Thiếu dữ liệu người dùng từ phản hồi đăng nhập Passkey",
@@ -2701,6 +2817,7 @@
"Model enabled successfully": "Model đã được kích hoạt thành công",
"Model fixed pricing": "Fixed-price model",
"Model Group": "Nhóm Mô hình",
+ "Model health": "Tình trạng mô hình",
"Model Limits": "Giới hạn Mô hình",
"Model Mapping": "Ánh xạ mô hình",
"Model Mapping (JSON)": "Ánh xạ mô hình (JSON)",
@@ -2786,6 +2903,7 @@
"Move {{group}} up": "Di chuyển {{group}} lên",
"Move a request header": "Di chuyển header yêu cầu",
"Move affiliate rewards to your main balance": "Chuyển phần thưởng liên kết vào số dư chính của bạn",
+ "Move available contribution rewards into your wallet balance.": "Chuyển phần thưởng đóng góp khả dụng vào số dư ví.",
"Move fallback to end": "Đưa dự phòng xuống cuối",
"Move Field": "Di chuyển trường",
"Move Header": "Di chuyển tiêu đề",
@@ -2818,6 +2936,7 @@
"Multipliers for recharge pricing based on user groups.": "Hệ số nhân cho việc định giá nạp tiền dựa trên nhóm người dùng.",
"Must be a valid URL": "Phải là URL hợp lệ",
"Must be at least 8 characters": "Phải có ít nhất 8 ký tự",
+ "My contributions": "Đóng góp của tôi",
"My Subscriptions": "Gói đăng ký của tôi",
"my-status": "trạng thái của tôi",
"MySQL detected": "Đã phát hiện MySQL",
@@ -2851,6 +2970,7 @@
"New API": "API mới",
"New API <noreply@example.com>": "API mới <noreply@example.com>",
"New API Project Repository:": "Kho lưu trữ Dự án API Mới:",
+ "New contribution": "Đóng góp mới",
"New Format Template": "Mẫu định dạng mới",
"New Group": "Nhóm mới",
"New model": "Mô hình mới",
@@ -2885,6 +3005,7 @@
"No app usage data available for this model.": "Chưa có dữ liệu sử dụng ứng dụng cho mô hình này.",
"No apps match the selected filters": "Không có ứng dụng phù hợp bộ lọc",
"No Auth": "Không xác thực",
+ "No auto-disabled models with recovered channels found": "Không có model bị tự động tắt và đã khôi phục kênh",
"No available groups in the global Auto order.": "Không có nhóm khả dụng trong thứ tự Auto toàn cục.",
"No available models": "Không có mô hình khả dụng",
"No available Web chat links": "Không có liên kết Web chat khả dụng",
@@ -2896,6 +3017,7 @@
"No changes": "Không có thay đổi",
"No changes made": "Không có thay đổi nào được thực hiện",
"No changes to save": "Không có thay đổi nào để lưu",
+ "No channel contributions yet": "Chưa có đóng góp kênh",
"No channel selected": "Chưa chọn kênh nào",
"No channel type found.": "Không tìm thấy loại kênh.",
"No channels available. Create your first channel to get started.": "Không có kênh nào khả dụng. Hãy tạo kênh đầu tiên của bạn để bắt đầu.",
@@ -2910,6 +3032,7 @@
"No console output": "Không có đầu ra console",
"No containers": "Không có container",
"No content to copy": "Không có nội dung để sao chép",
+ "No contribution rewards yet": "Chưa có phần thưởng đóng góp",
"No custom groups. Saving will inherit the complete global Auto order.": "Chưa có nhóm tùy chỉnh. Sau khi lưu, thứ tự Auto toàn cục đầy đủ sẽ được kế thừa.",
"No custom OAuth providers configured yet.": "Chưa có nhà cung cấp OAuth tùy chỉnh nào được cấu hình.",
"No data": "Không có dữ liệu",
@@ -2946,13 +3069,16 @@
"No Logs Found": "Không tìm thấy nhật ký",
"No mappings configured. Click \"Add Row\" to get started.": "Chưa có ánh xạ nào được cấu hình. Nhấp vào \"Thêm hàng\" để bắt đầu.",
"No matches found": "Không tìm thấy kết quả nào",
+ "No matching contributions": "Không có đóng góp phù hợp",
"No matching items": "Không có mục phù hợp",
+ "No matching models": "Không có mô hình phù hợp",
"No matching results": "Không có kết quả phù hợp",
"No matching rules": "Không có quy tắc phù hợp",
"No matching token and channel usage was found.": "Không tìm thấy mức sử dụng token và kênh phù hợp.",
"No messages yet": "Chưa có tin nhắn",
"No missing models found.": "Không tìm thấy mô hình nào bị thiếu.",
"No model found.": "Không tìm thấy mô hình.",
+ "No model health observations": "Chưa có dữ liệu theo dõi tình trạng mô hình",
"No model mappings configured. Click \"Add Mapping\" to get started.": "Chưa có ánh xạ mô hình nào được cấu hình. Nhấp vào \"Thêm ánh xạ\" để bắt đầu.",
"No model price changes to save": "Không có thay đổi giá mô hình nào cần lưu",
"No models available": "Không có mô hình nào khả dụng",
@@ -2972,6 +3098,7 @@
"No models to add": "Không có mô hình để thêm",
"No models to copy": "Không có mô hình nào để sao chép",
"No models to remove": "Không có mô hình để xóa",
+ "No models with unavailable channels found": "Không có model không có kênh khả dụng cần tắt",
"No models with unset prices": "Không có mô hình chưa thiết lập giá",
"No new models to add": "Không có mô hình mới để thêm",
"No new models yet": "Chưa có mô hình mới",
@@ -3021,6 +3148,7 @@
"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 test results": "Chưa có kết quả kiểm thử",
"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",
@@ -3054,6 +3182,7 @@
"Not Equals": "Không bằng",
"Not in pricing table": "Không có trong bảng định giá",
"Not included": "Không bao gồm",
+ "Not required": "Không bắt buộc",
"Not set": "Chưa đặt",
"Not Set": "Chưa đặt",
"Not set yet": "Chưa thiết lập",
@@ -3077,6 +3206,7 @@
"Number of tokens per unit quota": "Số token trên đơn vị hạn mức",
"Number of top log probabilities returned per token": "Số log probabilities hàng đầu trên mỗi token",
"Number of users invited": "Số người dùng được mời",
+ "OAuth": "OAuth",
"OAuth binding timed out. Please try again.": "Liên kết OAuth đã hết thời gian chờ. Vui lòng thử lại.",
"OAuth binding window is no longer available": "Cửa sổ liên kết OAuth không còn khả dụng",
"OAuth callback URL": "URL callback OAuth",
@@ -3139,7 +3269,9 @@
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "Chỉ các trường được chọn sẽ bị ghi đè. Bạn có thể chạy lại trình hướng dẫn đồng bộ hóa nếu có xung đột mới xuất hiện.",
"Only successful requests": "Chỉ các yêu cầu thành công",
"Only successful requests count toward this limit.": "Chỉ những yêu cầu thành công mới được tính vào giới hạn này.",
+ "Only the connection details required for review are collected.": "Chỉ thu thập thông tin kết nối cần thiết để xét duyệt.",
"Only the last {{value}} log files will be retained; the rest will be deleted.": "Chỉ giữ lại {{value}} tệp nhật ký gần nhất; phần còn lại sẽ bị xóa.",
+ "Only these groups and provider types can be submitted.": "Chỉ có thể gửi các nhóm và loại nhà cung cấp này.",
"Oops! Page Not Found!": "Ối! Không tìm thấy trang!",
"Oops! Something went wrong": "Oops! An error occurred.",
"Open": "Mở",
@@ -3150,6 +3282,7 @@
"Open in New Tab": "Mở trong tab mới",
"Open menu": "Mở menu",
"Open release": "Phát hành mở",
+ "Open review": "Mở xét duyệt",
"Open source": "Mã nguồn mở",
"Open Source": "Mã nguồn mở",
"Open the io.net console API Keys page": "Mở trang Khóa API của console io.net",
@@ -3247,6 +3380,7 @@
"Overwritten": "Đã ghi đè",
"Page": "Trang",
"Page {{current}} of {{total}}": "Trang {{current}} / {{total}}",
+ "Page {{page}} of {{pages}}": "Trang {{page}} / {{pages}}",
"PaLM": "PaLM",
"Pan": "Pan",
"Pancake": "Pancake",
@@ -3278,6 +3412,7 @@
"Pass when key is missing": "Cho qua khi thiếu khóa",
"Pass-Through": "Chuyển tiếp",
"Pass-through Headers (comma-separated or JSON array)": "Header chuyển tiếp (phân cách bằng dấu phẩy hoặc mảng JSON)",
+ "Passed": "Đạt",
"Passive recovery only": "Chỉ khôi phục thụ động",
"Passkey": "Khóa truy cập",
"Passkey Authentication": "Xác thực khóa truy cập",
@@ -3348,6 +3483,7 @@
"Penalises repetition of frequent tokens": "Phạt việc lặp các token phổ biến",
"pending": "đang chờ",
"Pending": "Đang chờ",
+ "Pending review": "Đang chờ xét duyệt",
"per": "per",
"Per 1K tokens": "Mỗi 1K tokens",
"Per 1M tokens": "Mỗi 1M tokens",
@@ -3679,6 +3815,7 @@
"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.",
+ "Recent transfers": "Chuyển gần đây",
"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",
@@ -3750,7 +3887,10 @@
"Registry (optional)": "Registry (tùy chọn)",
"Registry secret": "Bí mật Registry",
"Registry username": "Tên người dùng Registry",
+ "Reject": "Từ chối",
+ "Reject contribution": "Từ chối đóng góp",
"Reject Reason": "Lý do từ chối",
+ "Rejection reason": "Lý do từ chối",
"Release details": "Chi tiết phiên bản",
"Released": "Phát hành",
"Relying Party Display Name": "Tên Hiển Thị của Bên Tin Cậy",
@@ -3846,6 +3986,7 @@
"Required": "Bắt buộc",
"Required events:": "Sự kiện bắt buộc:",
"Required provider, authentication, model, and group settings": "Thiết lập bắt buộc về nhà cung cấp, xác thực, mô hình và nhóm",
+ "Required tests passed within the last 30 minutes": "Các kiểm thử bắt buộc đã đạt trong 30 phút gần đây",
"Required to expose MjProxy-style image generation to end users.": "Cần thiết để cung cấp tính năng tạo hình ảnh kiểu MjProxy cho người dùng cuối.",
"Rerank": "Re-rank",
"Reroll": "Quay lại",
@@ -3889,6 +4030,7 @@
"Reset usage window": "Đặt lại cửa sổ mức dùng",
"Resets in:": "Đặt lại sau:",
"Resetting...": "Đang đặt lại...",
+ "Resize column": "Đổi kích thước cột",
"Resolve Conflicts": "Giải quyết Xung đột",
"Resource Configuration": "Cấu hình tài nguyên",
"Resources": "Tài nguyên",
@@ -3921,11 +4063,22 @@
"Revenue": "Doanh thu",
"Review & initialize": "Xem lại và khởi tạo",
"Review and sign out devices currently using your account.": "Xem lại và đăng xuất các thiết bị hiện đang sử dụng tài khoản của bạn.",
+ "Review contributed channels and configure contribution policy.": "Xét duyệt kênh đóng góp và cấu hình chính sách đóng góp.",
+ "Review contributions": "Xét duyệt đóng góp",
"Review model rates before scaling traffic": "Xem giá mô hình trước khi mở rộng lưu lượng",
+ "Review note": "Ghi chú xét duyệt",
+ "Review rejected": "Xét duyệt bị từ chối",
+ "Review status and per-model channel health history.": "Xem trạng thái xét duyệt và lịch sử tình trạng kênh theo từng mô hình.",
"Review your payment details": "Xem lại chi tiết thanh toán của bạn",
"Review your purchase details before proceeding.": "Xem lại chi tiết mua hàng trước khi tiếp tục.",
+ "Revision": "Bản sửa đổi",
"Revoke": "Thu hồi",
"Revoke session?": "Thu hồi phiên này?",
+ "Reward basis points": "Điểm cơ bản phần thưởng",
+ "Reward ledger": "Sổ phần thưởng",
+ "Rewards": "Phần thưởng",
+ "Rewards are credited after billable requests use an approved channel.": "Phần thưởng được ghi nhận sau khi yêu cầu tính phí dùng kênh đã phê duyệt.",
+ "Rewards transferred to your wallet": "Đã chuyển phần thưởng vào ví",
"Rewards will be added directly to your balance": "Phần thưởng sẽ được thêm trực tiếp vào số dư của bạn",
"Rewrite callback URLs to the local server": "Viết lại URL callback đến máy chủ cục bộ",
"Right to Left": "Phải sang trái",
@@ -3946,6 +4099,7 @@
"Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.": "Các tuyến có cùng đường dẫn vào được tách theo model client chính xác. Yêu cầu chưa khớp sẽ dùng nhánh dự phòng cuối cùng.",
"Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.": "Các tuyến có cùng đường dẫn vào khớp theo tên model chính xác từ yêu cầu client. Ngăn cách nhiều model bằng dấu phẩy và chỉ để trống nhánh dự phòng cuối cùng.",
"Routing & Overrides": "Định tuyến & ghi đè",
+ "Routing and health": "Định tuyến và tình trạng",
"Routing Reliability": "Độ tin cậy định tuyến",
"Routing Strategy": "Chiến lược định tuyến",
"Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.": "Hàng là nhóm người dùng, cột là nhóm tính phí. Ô trống sẽ dùng hệ số cơ bản hiển thị màu xám.",
@@ -3970,8 +4124,11 @@
"Rules JSON": "JSON quy tắc",
"Rules JSON must be an array": "JSON quy tắc phải là một mảng",
"Rules match the original model value from the client request body.": "Quy tắc khớp với giá trị model gốc trong thân yêu cầu của client.",
+ "Run admin test": "Chạy kiểm thử quản trị viên",
+ "Run an independent administrator test before approving this revision.": "Chạy kiểm thử độc lập của quản trị viên trước khi phê duyệt bản sửa đổi này.",
"Run GC": "Chạy GC",
"Run tests for the selected models": "Chạy kiểm thử cho các mô hình đã chọn",
+ "Run the full model test before submitting.": "Chạy kiểm thử toàn bộ mô hình trước khi gửi.",
"running": "đang chạy",
"Running": "Đang chạy",
"Runtime": "Môi trường chạy",
@@ -3990,6 +4147,7 @@
"Save chat settings": "Lưu cài đặt trò chuyện",
"Save check-in settings": "Lưu cài đặt điểm danh",
"Save Creem settings": "Lưu cài đặt Creem",
+ "Save draft": "Lưu bản nháp",
"Save drawing settings": "Lưu cài đặt bản vẽ",
"Save Epay settings": "Lưu cài đặt Epay",
"Save failed": "Lưu thất bại",
@@ -4008,11 +4166,13 @@
"Save preview": "Xem trước lưu",
"Save rate limits": "Lưu giới hạn tốc độ",
"Save sensitive words": "Lưu từ nhạy cảm",
+ "Save settings": "Lưu cài đặt",
"Save Settings": "Lưu Cài đặt",
"Save sidebar modules": "Lưu các mô-đun thanh bên",
"Save SMTP settings": "Lưu cài đặt SMTP",
"Save SSRF settings": "Lưu cài đặt SSRF",
"Save Stripe settings": "Lưu cài đặt Stripe",
+ "Save the draft, test every model, then submit it for review.": "Lưu bản nháp, kiểm thử từng mô hình rồi gửi để xét duyệt.",
"Save these backup codes in a safe place. Each code can only be used once.": "Lưu các mã dự phòng này ở nơi an toàn. Mỗi mã chỉ được sử dụng một lần.",
"Save these codes in a safe place. Each code can only be used once.": "Hãy lưu các mã này ở nơi an toàn. Mỗi mã chỉ có thể được sử dụng một lần.",
"Save this token now. You won't be able to view it again after closing this dialog.": "Hãy lưu token này ngay. Bạn sẽ không thể xem lại sau khi đóng hộp thoại.",
@@ -4020,6 +4180,7 @@
"Save tool prices": "Lưu giá công cụ",
"Save Waffo Pancake settings": "Lưu cài đặt Waffo Pancake",
"Save Worker settings": "Lưu cài đặt Worker",
+ "Saved drafts and submitted channels will appear here.": "Bản nháp đã lưu và kênh đã gửi sẽ xuất hiện tại đây.",
"Saved successfully": "Lưu thành công",
"Saving...": "Đang lưu...",
"Scan QR Code": "Quét mã QR",
@@ -4089,15 +4250,20 @@
"Select all (filtered)": "Chọn tất cả (đã lọc)",
"Select all models": "Chọn tất cả mô hình",
"Select All Visible": "Chọn tất cả hiển thị",
+ "Select an allowed group": "Chọn nhóm được phép",
"Select an operation mode and enter the amount": "Chọn chế độ thao tác và nhập số tiền",
"Select announcement type": "Select notification type",
+ "Select at least one allowed channel type": "Chọn ít nhất một loại kênh được phép",
+ "Select at least one allowed group": "Chọn ít nhất một nhóm được phép",
"Select at least one Auto group or restore global Auto.": "Chọn ít nhất một nhóm Auto hoặc khôi phục Auto toàn cục.",
"Select at least one field to overwrite.": "Chọn ít nhất một trường để ghi đè.",
+ "Select at least one model": "Chọn ít nhất một mô hình",
"Select at least one target model": "Chọn ít nhất một mô hình đích",
"Select at most {{max}} Auto groups": "Chọn tối đa {{max}} nhóm Auto",
"Select body font": "Chọn phông chữ nội dung",
"Select border radius": "Chọn độ bo góc",
"Select channel type": "Chọn loại kênh",
+ "Select channel types": "Chọn loại kênh",
"Select color preset": "Chọn cài đặt màu sẵn",
"Select content width": "Chọn chiều rộng nội dung",
"Select corner radius": "Chọn độ bo góc",
@@ -4363,6 +4529,7 @@
"Structured output": "Đầu ra có cấu trúc",
"Submit": "Gửi",
"Submit directly": "Gửi trực tiếp",
+ "Submit for review": "Gửi để xét duyệt",
"Submit Result": "Gửi Kết quả",
"Submit Time": "Thời gian gửi",
"Submitted": "Đã gửi",
@@ -4391,7 +4558,9 @@
"Successfully deleted {{count}} invalid redemption codes": "Đã xóa thành công {{count}} mã đổi thưởng không hợp lệ",
"Successfully deleted {{count}} model(s)": "Đã xóa thành công {{count}} mô hình",
"Successfully disabled {{count}} model(s)": "Đã tắt thành công {{count}} mô hình",
+ "Successfully disabled {{count}} model(s) with no available channels": "Đã tắt {{count}} model không có kênh khả dụng",
"Successfully enabled {{count}} model(s)": "Đã bật thành công {{count}} mô hình",
+ "Successfully enabled {{count}} model(s) with recovered channels": "Đã bật {{count}} model có kênh đã khôi phục",
"Suffix": "Hậu tố",
"Suffix Match": "Khớp hậu tố",
"Summarize text": "Tóm tắt văn bản",
@@ -4403,7 +4572,6 @@
"Supported Applications": "Ứng dụng được hỗ trợ",
"Supported Imagine Models": "Mô hình Imagine được hỗ trợ",
"Supported modalities": "Phương thức hỗ trợ",
- "Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.": "Toán tử được hỗ trợ: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Để trống để cho phép tất cả người dùng.",
"Supported parameters": "Tham số hỗ trợ",
"Supported variables": "Biến được hỗ trợ",
"Supports `-thinking`, `-thinking-": "Hỗ trợ `-thinking`, `-thinking-",
@@ -4497,12 +4665,14 @@
"Test {{count}} matching models": "Kiểm thử {{count}} mô hình phù hợp",
"Test {{count}} selected": "Kiểm tra {{count}} mục đã chọn",
"Test a model with a starter prompt, or write your own request below.": "Kiểm thử mô hình bằng prompt gợi ý, hoặc viết yêu cầu của riêng bạn bên dưới.",
+ "Test all": "Kiểm thử tất cả",
"Test all {{count}} models": "Kiểm thử tất cả {{count}} mô hình",
"Test All Channels": "Kiểm tra tất cả các kênh",
"Test Channel Connection": "Kiểm tra kết nối kênh",
"Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.": "Kiểm thử kênh, làm mới số dư và bật/tắt từng kênh, hàng loạt hoặc theo thẻ.",
"Test Connection": "Kiểm tra kết nối",
"Test connectivity for:": "Kiểm tra kết nối cho:",
+ "Test expired": "Kiểm thử đã hết hạn",
"Test failed": "Kiểm tra thất bại",
"Test interval (minutes)": "Khoảng thời gian kiểm tra (phút)",
"Test Latency": "Kiểm tra độ trễ",
@@ -4512,6 +4682,8 @@
"Test selected models": "Kiểm tra các mô hình đã chọn",
"Testing all enabled channels started. Please refresh to see results.": "Bắt đầu kiểm tra tất cả các kênh đã kích hoạt. Vui lòng làm mới để xem kết quả.",
"Testing...": "Đang kiểm tra...",
+ "Tests are starting...": "Đang bắt đầu kiểm thử...",
+ "Tests failed": "Kiểm thử thất bại",
"Text": "Văn bản",
"Text description of the desired image": "Mô tả văn bản cho ảnh mong muốn",
"Text description of the desired video": "Mô tả văn bản cho video mong muốn",
@@ -4530,6 +4702,8 @@
"The binding will complete automatically after authorization": "Việc liên kết sẽ hoàn tất tự động sau khi ủy quyền",
"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.": "Sản phẩm đã liên kết dùng cho nạp ví: khi người dùng nhập bất kỳ số tiền nào, new-api chạy thanh toán trên một sản phẩm Pancake duy nhất này và ghi đè giá theo từng phiên — không cần tạo trước SKU $1 / $5 / $10.",
"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.": "Cửa hàng đã liên kết là vùng chứa cha cho mọi sản phẩm Pancake mà new-api tạo từ trang quản trị này — bao gồm sản phẩm nạp ví và mọi sản phẩm gói đăng ký. Một cửa hàng là đủ; chỉ ghim cửa hàng khác nếu bạn thực sự vận hành các catalog Pancake riêng.",
+ "The channel will leave review or service and can be edited before resubmission.": "Kênh sẽ rời trạng thái xét duyệt hoặc phục vụ và có thể chỉnh sửa trước khi gửi lại.",
+ "The contribution will be deleted and any linked channel will be removed from service.": "Đóng góp sẽ bị xóa và mọi kênh liên kết sẽ bị gỡ khỏi dịch vụ.",
"The deployment node that handled the requests": "Nút triển khai đã xử lý các yêu cầu",
"The effective domain for Passkey registration. Must match the current domain or be its parent domain.": "Mi",
"The entered text does not match the required text.": "Văn bản đã nhập không khớp với văn bản yêu cầu.",
@@ -4537,12 +4711,14 @@
"The exact model identifier as used in API requests.": "Mã định danh mô hình chính xác như được sử dụng trong các yêu cầu API.",
"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.": "Các mô hình sau có xung đột loại thanh toán (giá cố định so với thanh toán theo tỷ lệ). Xác nhận để tiếp tục với các thay đổi.",
"The following models in the model redirect have not been added to the \"Models\" list and may fail during invocation due to missing available models:": "Các mô hình sau trong chuyển hướng mô hình chưa được thêm vào danh sách \"Mô hình\" và có thể gọi thất bại do thiếu các mô hình có sẵn:",
+ "The linked contributed channel will be removed from service.": "Kênh đóng góp liên kết sẽ bị gỡ khỏi dịch vụ.",
"The login session that started this Telegram binding is no longer valid.": "Phiên đăng nhập đã bắt đầu liên kết Telegram này không còn hợp lệ.",
"The mapped upstream model(s)": "Mô hình(s) thượng nguồn được ánh xạ",
"The model that was requested": "Mô hình đã được yêu cầu",
"The model you're looking for doesn't exist.": "Mô hình bạn đang tìm kiếm không tồn tại.",
"The name displayed across the application": "Tên hiển thị trên ứng dụng",
"The new token will only be shown once. Copy it and store it securely.": "Token mới chỉ được hiển thị một lần. Hãy sao chép và lưu trữ an toàn.",
+ "The provider returned no models": "Nhà cung cấp không trả về mô hình nào",
"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations": "URL công khai của máy chủ, dùng cho callback OAuth, webhook và các tích hợp bên ngoài khác",
"The requested chat preset does not exist or has been removed.": "Cài đặt sẵn cuộc trò chuyện được yêu cầu không tồn tại hoặc đã bị xóa.",
"The reset request stays disabled until a credit is available.": "Yêu cầu đặt lại sẽ bị tắt cho đến khi có lượt khả dụng.",
@@ -4564,6 +4740,7 @@
"Theme preset": "Tùy chỉnh chủ đề",
"Theme Settings": "Cài đặt chủ đề",
"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?": "Có cả mô hình cần thêm và xóa đang chờ, nhưng bạn chỉ chọn một loại. Xác nhận chỉ gửi các mục đã chọn?",
+ "There are no contributions waiting for review.": "Không có đóng góp nào đang chờ xét duyệt.",
"There is a rule for vip billed as premium → use its ratio 0.3": "Có quy tắc «vip theo premium» → dùng hệ số 0.3 của quy tắc",
"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.": "Các model này vẫn được chọn nhưng không còn xuất hiện trong danh sách upstream; tên chỉ là khóa nguồn trong model_mapping đã được loại. Điều chỉnh trước khi lưu.",
"These toggles affect whether certain request fields are passed through to the upstream provider.": "Các chuyển đổi này ảnh hưởng đến việc các trường yêu cầu nhất định có được chuyển đến nhà cung cấp dịch vụ đầu vào hay không.",
@@ -4610,6 +4787,7 @@
"This site currently has {{count}} models enabled": "Trang này hiện đã bật {{count}} mô hình",
"This Telegram account is already bound.": "Tài khoản Telegram này đã được liên kết.",
"This Telegram binding request has expired or has already been used.": "Yêu cầu liên kết Telegram này đã hết hạn hoặc đã được sử dụng.",
+ "This test result is older than 30 minutes. Run all tests again before submitting.": "Kết quả kiểm thử này đã quá 30 phút. Hãy chạy lại tất cả kiểm thử trước khi gửi.",
"This tier catches any request that did not match earlier tiers.": "Tầng này bắt mọi yêu cầu không khớp với các tầng trước.",
"this token group": "nhóm token này",
"This Uptime Kuma group will be removed from the list.": "Nhóm Uptime Kuma này sẽ bị xóa khỏi danh sách.",
@@ -4623,6 +4801,8 @@
"This will delete all": "Thao tác này sẽ xóa tất cả",
"This will delete all channel affinity cache entries still in memory.": "Thao tác này sẽ xóa tất cả mục bộ nhớ đệm ưu tiên kênh còn trong bộ nhớ.",
"This will delete temporary cache files that have not been used for more than 10 minutes": "Thao tác này sẽ xóa các tệp bộ nhớ đệm tạm không được sử dụng hơn 10 phút",
+ "This will disable all currently enabled models that have no available channels. Continue?": "Thao tác sẽ tắt mọi model đang bật nhưng không có kênh khả dụng. Tiếp tục?",
+ "This will enable models that were auto-disabled by channel availability and now have recovered channels. Manually disabled models are not changed. Continue?": "Chỉ bật các model bị tắt tự động do kênh không khả dụng và hiện đã có kênh khôi phục. Model tắt thủ công sẽ không đổi. Tiếp tục?",
"This will extend the deployment by the specified hours.": "Thao tác này sẽ kéo dài triển khai thêm số giờ được chỉ định.",
"This will immediately invalidate your existing access token. Any applications or scripts using it will stop working.": "Thao tác này sẽ vô hiệu hóa ngay token truy cập hiện có. Mọi ứng dụng hoặc tập lệnh đang sử dụng token đó sẽ ngừng hoạt động.",
"This will permanently delete all manually and automatically disabled channels. This action cannot be undone.": "Thao tác này sẽ xóa vĩnh viễn tất cả các kênh bị tắt thủ công và tự động. Hành động này không thể hoàn tác.",
@@ -4773,16 +4953,21 @@
"Total:": "Tổng cộng:",
"TPM": "TPM",
"Track per-request consumption to power usage analytics. Keeping this on increases database writes.": "Theo dõi mức tiêu thụ theo từng yêu cầu để phục vụ phân tích mức độ sử dụng. Việc bật tính năng này làm tăng số lượt ghi vào cơ sở dữ liệu.",
+ "Track review, availability, and deletion status for every channel.": "Theo dõi trạng thái xét duyệt, khả dụng và xóa của từng kênh.",
"Track usage, costs and performance with real-time analytics": "Theo dõi sử dụng, chi phí và hiệu suất với phân tích thời gian thực",
"Tracked apps": "Ứng dụng được theo dõi",
"Tracks current account base limits and additional metered usage on Codex upstream.": "Theo dõi hạn cơ bản và mức dùng tính phí bổ sung của tài khoản ở phía upstream Codex.",
"Trading insights, accounting, advisory": "Phân tích giao dịch, kế toán, tư vấn",
"Transfer": "Chuyển",
+ "Transfer all": "Chuyển tất cả",
+ "Transfer amount": "Số lượng chuyển",
"Transfer Amount": "Số tiền chuyển khoản",
"Transfer failed": "Chuyển thất bại",
+ "Transfer rewards": "Chuyển phần thưởng",
"Transfer Rewards": "Chuyển thưởng",
"Transfer successful": "Chuyển thành công",
"Transfer to Balance": "Chuyển vào số dư",
+ "Transfer to wallet": "Chuyển vào ví",
"Translation": "Dịch thuật",
"Transparent Billing": "Thanh toán minh bạch",
"Trend": "Xu hướng",
@@ -4834,6 +5019,9 @@
"Unable to read clipboard": "Không thể đọc bảng tạm",
"Unauthorized": "Chưa xác thực",
"Unauthorized Access": "Truy cập trái phép",
+ "Unavailable": "Không khả dụng",
+ "Unavailable deletion threshold (hours)": "Ngưỡng xóa khi không khả dụng (giờ)",
+ "Unavailable since": "Không khả dụng từ",
"Unbind": "Hủy liên kết",
"Unbind failed": "Hủy liên kết thất bại",
"Unbound {{provider}}": "Đã hủy liên kết {{provider}}",
@@ -4861,6 +5049,7 @@
"Untitled": "Không có tiêu đề",
"Untrusted upstream data:": "Dữ liệu nguồn không đáng tin cậy:",
"Unused": "Chưa sử dụng",
+ "Up to 100 unique models can be tested in one contribution.": "Một đóng góp có thể kiểm thử tối đa 100 mô hình riêng biệt.",
"Up to 4 strings that stop generation": "Tối đa 4 chuỗi để dừng sinh",
"Update": "Cập nhật",
"Update All Balances": "Cập nhật tất cả số dư",
@@ -4895,6 +5084,7 @@
"Updated a vendor": "Đã cập nhật một nhà cung cấp",
"Updated channel {{name}} (ID: {{id}})": "Đã cập nhật kênh {{name}} (ID: {{id}})",
"Updated daily": "Cập nhật hàng ngày",
+ "Updated model statuses in batch": "Đã cập nhật hàng loạt trạng thái mô hình",
"Updated successfully": "Cập nhật thành công",
"Updated system setting {{key}}": "Đã cập nhật cài đặt hệ thống {{key}}",
"Updated user {{username}} (ID: {{id}})": "Đã cập nhật người dùng {{username}} (ID: {{id}})",
@@ -4952,6 +5142,7 @@
"Usage logs": "Nhật ký sử dụng",
"Usage Logs": "Nhật ký sử dụng",
"Usage mode": "Chế độ sử dụng",
+ "Usage reward": "Phần thưởng sử dụng",
"Usage-based": "Dựa trên sử dụng",
"USD": "USD",
"USD Exchange Rate": "Tỷ giá USD",
@@ -4978,6 +5169,7 @@
"Use the full-width table to scan prices, then select a row to edit it here.": "Duyệt giá trong bảng, rồi chọn một hàng để chỉnh sửa tại đây.",
"Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.": "Dùng nhóm đặt trên token. Nếu token không có nhóm, dùng nhóm người dùng. Nhóm auto thử theo thứ tự gán tự động từ trên xuống dưới.",
"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.": "Dùng bảng nhóm định giá để quản lý tỷ lệ và việc nhóm có xuất hiện trong danh sách tạo token hay không.",
+ "Use the provider base URL without a model-specific path.": "Dùng URL cơ sở của nhà cung cấp, không kèm đường dẫn riêng của mô hình.",
"Use this callback URL pattern when registering a custom OAuth provider.": "Dùng mẫu URL callback này khi đăng ký nhà cung cấp OAuth tùy chỉnh.",
"Use this token for API authentication": "Sử dụng token này để xác thực API",
"Use your Passkey": "Sử dụng Passkey của bạn",
@@ -5001,6 +5193,7 @@
"User Analytics": "Thống kê người dùng",
"User Consumption Ranking": "Xếp hạng tiêu thụ",
"User Consumption Trend": "Xu hướng tiêu thụ",
+ "User contribution view": "Giao diện đóng góp của người dùng",
"User created successfully": "Tạo người dùng thành công",
"User dashboard and quota controls.": "Bảng điều khiển người dùng và kiểm soát hạn ngạch.",
"User deleted successfully": "Xóa người dùng thành công",
@@ -5038,8 +5231,10 @@
"Users must wait for a successful drawing before upscales or variations.": "Người dùng phải chờ vẽ thành công trước khi upscale hoặc biến thể.",
"Users of vip, when billed as premium, pay ratio": "Người dùng của vip, khi tính phí theo premium, trả hệ số",
"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.": "Người dùng chỉ thấy các nhóm được đánh dấu là có thể chọn. Nhóm không thể chọn vẫn có thể do quản trị viên gán.",
+ "Users review this exact content before every first submission or resubmission.": "Người dùng xem đúng nội dung này trước mỗi lần gửi đầu tiên hoặc gửi lại.",
"uses": "sử dụng",
"Using the complete global Auto order ({{count}} groups)": "Đang dùng thứ tự Auto toàn cục đầy đủ ({{count}} nhóm)",
+ "Validation and submission": "Xác thực và gửi",
"Validity": "Hiệu lực",
"Validity Period": "Thời hạn hiệu lực",
"Value": "Giá trị",
@@ -5074,6 +5269,7 @@
"Verification scope is missing": "Thiếu phạm vi xác minh",
"Verify": "Kiểm tra",
"Verify and Sign In": "Xác minh và Đăng nhập",
+ "Verify every current revision independently before approval.": "Xác minh độc lập từng bản sửa đổi hiện tại trước khi phê duyệt.",
"Verify routing with Playground or your client": "Xác minh định tuyến bằng Playground hoặc client của bạn",
"Verify Setup": "Xác minh thiết lập",
"Verify to view channel key": "Xác minh để xem khóa kênh",
@@ -5094,6 +5290,7 @@
"View all currently available models": "Xem tất cả mô hình hiện có",
"View channel lists and details without secrets.": "Xem danh sách và chi tiết kênh không chứa bí mật.",
"View channel secrets": "Xem bí mật kênh",
+ "View contribution details": "Xem chi tiết đóng góp",
"View detailed information about this user including balance, usage statistics, and invitation details.": "Xem thông tin chi tiết về người dùng này bao gồm số dư, thống kê sử dụng và chi tiết lời mời.",
"View details": "Xem chi tiết",
"View document": "Xem tài liệu",
@@ -5150,6 +5347,7 @@
"Wallet Management": "Quản lý ví",
"Wallet management and personal preferences.": "Quản lý ví và sở thích cá nhân.",
"Wallet Only": "Chỉ dùng ví",
+ "Wallet transfer": "Chuyển vào ví",
"Warning": "Cảnh báo",
"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.": "Cảnh báo: URL cơ sở không nên kết thúc bằng /v1. API mới sẽ xử lý tự động. Điều này có thể gây ra lỗi yêu cầu.",
"Warning: Disabling 2FA will make your account less secure.": "Cảnh báo: Vô hiệu hóa 2FA sẽ khiến tài khoản của bạn kém an toàn hơn.",
@@ -5218,6 +5416,9 @@
"Wire encoding for the embedding vectors": "Định dạng truyền cho vector embedding",
"with conflicts": "với các xung đột",
"with the API key from your token settings.": "bằng API key từ trang Tokens của bạn.",
+ "Withdraw": "Rút lại",
+ "Withdraw channel contribution?": "Rút đóng góp kênh?",
+ "Withdraw contribution": "Rút đóng góp",
"Without additional conditions, only the type above is used for pruning.": "Không có điều kiện bổ sung, chỉ type ở trên được sử dụng để dọn dẹp.",
"Worked example": "Ví dụ minh họa",
"Worker Access Key": "Khóa truy cập nhân viên",
diff --git a/web/src/i18n/locales/zh-TW.json b/web/src/i18n/locales/zh-TW.json
index ab6acc0de9a3..45ca9314bd9a 100644
--- a/web/src/i18n/locales/zh-TW.json
+++ b/web/src/i18n/locales/zh-TW.json
@@ -61,6 +61,7 @@
"{{field}} updated to {{value}}": "{{field}} 已更新為 {{value}}",
"{{field}} updated to {{value}} for tag: {{tag}}": "標籤「{{tag}}」的 {{field}} 已更新為 {{value}}",
"{{method}} {{route}}": "{{method}} {{route}}",
+ "{{milliseconds}} ms": "{{milliseconds}} 毫秒",
"{{modality}} not supported": "不支援 {{modality}}",
"{{modality}} supported": "支援 {{modality}}",
"{{n}} model(s) selected": "已選 {{n}} 個模型",
@@ -98,6 +99,7 @@
"1. Create an application in your Gotify server": "1. 在您的 Gotify 伺服器中建立一個套用程式",
"10 / page": "10 條/頁",
"100 / page": "100 條/頁",
+ "100 basis points equals 1% of billed quota.": "100 個基點等於計費額度的 1%。",
"14 Days": "14 日",
"192.168.1.1
10.0.0.0/8": "192.168.1.1
10.0.0.0/8",
"1M": "1 個月",
@@ -118,9 +120,11 @@
"7 days ago": "7 日前",
"80,443,8080": "80,443,8080",
"A billing multiplier. Lower ratios mean lower API call costs.": "收費乘數,倍率越低,API 呼叫費用越低。",
+ "A contribution can contain at most 100 models": "一次貢獻最多可包含 100 個模型",
"A focused home for keys, balance, routing, and service health.": "集中展示金鑰、餘額、路由和服務健康狀態。",
"About": "關於",
"About {{days}} days left": "約剩 {{days}} 日",
+ "Accept the channel contribution agreement": "同意渠道貢獻協議",
"Accept Unpriced Models": "接受未定價模型",
"Accepts a JSON array of model identifiers that support the Imagine API.": "接受支援 Imagine API 的模型標識符的 JSON 陣列。",
"Accepts comma-separated status codes and inclusive ranges.": "接受逗號分隔的狀態碼和包含性範圍。",
@@ -167,6 +171,7 @@
"Add a new model to the system by providing the necessary information.": "透過提供必要資訊向系統新增模型。",
"Add a new user by providing necessary info.": "透過提供必要資訊新增用戶。",
"Add a new vendor to the system": "向系統新增供應商",
+ "Add an allowed group": "新增允許的分組",
"Add an extra layer of security to your account": "為您的用戶添加額外的安全層",
"Add and submit": "新增並提交",
"Add Announcement": "新增公告",
@@ -244,6 +249,8 @@
"Administer user accounts and roles.": "管理用戶用戶和角色。",
"Administrator account": "管理員用戶",
"Administrator username": "管理員用戶名",
+ "Administrator verification": "管理員驗證",
+ "Administrator verification started": "管理員驗證已開始",
"Advance next reset time": "推進下次重置時間",
"Advanced": "進階",
"Advanced Configuration": "進階設定",
@@ -272,6 +279,12 @@
"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.": "聚合 50+ AI 供應商於統一 API 之後。輕鬆管理存取、追蹤成本、彈性擴展。",
"Aggregation bucket": "聚合時間桶",
"AGPL v3.0 License": "AGPL v3.0 協議",
+ "Agreement content is required": "協議內容為必填項",
+ "Agreement Markdown": "協議 Markdown",
+ "Agreement version": "協議版本",
+ "Agreement version is required": "協議版本為必填項",
+ "Agreement version must not exceed 64 characters": "協議版本不能超過 64 個字元",
+ "Agreement version: {{version}}": "協議版本:{{version}}",
"AI Application Infrastructure Foundation": "人工智能套用基座",
"AI model testing environment": "AI模型測試環境",
"AI models": "AI 模型",
@@ -287,6 +300,7 @@
"All API tokens": "全部 API 金鑰",
"All categories": "全部分類",
"All conditions must match before this tier is used.": "所有條件都匹配後才會使用此階梯。",
+ "All contributions": "全部貢獻",
"All edits are overwrite operations. Leave fields empty to keep current values unchanged.": "所有編輯都是覆蓋操作。留空欄位將保持目前值不變。",
"All files exceed the maximum size.": "所有檔案都超過最大尺寸。",
"All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.": "所有分組名稱都在這裡管理。倍率在呼叫按該分組收費時生效;儲值倍率對所屬該分組的用戶生效。",
@@ -302,6 +316,7 @@
"All Sync Status": "所有同步狀態",
"All systems operational": "所有系統正常運作",
"All Tags": "所有標籤",
+ "All tests passed": "所有測試均已通過",
"All Types": "所有類型",
"All upstream data is trusted": "所有上游數據均受信任",
"All users": "全部用戶",
@@ -341,6 +356,8 @@
"Allow using models without price configuration": "允許使用未設定價格的模型",
"Allow wallet balance after quota used up": "額度用盡後允許使用錢包餘額",
"Allowed": "允許",
+ "Allowed channel types": "允許的渠道類型",
+ "Allowed groups": "允許的分組",
"Allowed Origins": "允許的 Origins",
"Allowed Ports": "允許的端口",
"Already have an account?": "已有用戶?",
@@ -378,6 +395,8 @@
"API Addresses": "API 地址",
"API Base URL (Important: Not Chat API) *": "API 基礎 URL (重要:非聊天 API) *",
"API Base URL *": "API 基礎 URL *",
+ "API endpoint": "API 端點",
+ "API endpoint is too long": "API 端點過長",
"API Endpoints": "API 端點",
"API Info": "API 資訊",
"API info added. Click \"Save Settings\" to apply.": "API 資訊已新增。點擊「儲存設定」以套用。",
@@ -397,8 +416,10 @@
"API key from the provider": "來自供應商的 API 金鑰",
"API key is loading, please try again in a moment": "API 金鑰正在載入,請稍後再試",
"API key is required": "需要 API 金鑰",
+ "API key is too long": "API 金鑰過長",
"API Key mode (does not support batch creation)": "API Key 模式(不支援大量建立)",
"API Key mode: use APIKey|Region": "API Key 模式:使用 APIKey|Region",
+ "API key must be a single line": "API 金鑰必須為單行內容",
"API Key updated successfully": "API 金鑰更新成功",
"API Keys": "API 金鑰",
"API Private Key": "API 私鑰",
@@ -420,6 +441,7 @@
"appended": "已追加",
"Application": "套用程式",
"Applied {{name}} pricing to {{count}} models": "已將 {{name}} 的定價套用到 {{count}} 個模型",
+ "Applied automatically when a contribution is approved.": "貢獻審核通過後自動套用。",
"Applied upstream model changes to {{count}} channels": "對 {{count}} 個渠道套用了上游模型變更",
"Applied upstream model changes to channel (ID: {{id}})": "對渠道(ID: {{id}})套用了上游模型變更",
"Applies to custom completion endpoints. JSON map of model → ratio.": "適用於自訂補全端點。模型 → 比例的 JSON 映射。",
@@ -430,6 +452,11 @@
"Apply reset": "執行重置",
"Apply Sync": "套用同步",
"Applying...": "正在套用...",
+ "Approval is bound to this administrator test run ID.": "審核通過操作將綁定此管理員測試執行 ID。",
+ "Approve": "通過",
+ "Approved": "已通過",
+ "Approved channel tag": "審核通過後的渠道標籤",
+ "Approved channels are created with these routing and removal defaults.": "審核通過的渠道將使用這些路由與刪除預設值建立。",
"Approx.": "約",
"apps": "個套用",
"Apps": "套用",
@@ -460,6 +487,7 @@
"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 is selected": "已選擇至少一個模型",
"At least one model regex pattern is required": "至少需要一個模型正則匹配模式",
"At least one valid key source is required": "至少需要一個有效的金鑰來源",
"Attach": "附加",
@@ -493,6 +521,7 @@
"auth.resetPasswordConfirm.description": "確認重設請求以產生新密碼。",
"auth.resetPasswordConfirm.retry": "重試 ({{seconds}}s)",
"auth.resetPasswordConfirm.success": "您的密碼已成功重設",
+ "Authenticated channel contribution and reward workspace.": "需要登入的渠道貢獻與獎勵工作區。",
"Authentication": "身份驗證",
"Authentication Method": "認證方式",
"Authenticator code": "身份驗證器代碼",
@@ -513,12 +542,16 @@
"Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.": "自動在可用時協商 HTTP/2。HTTP/1.1 會在並發時使用多條保持連線的連線。",
"Auto refresh": "自動重新整理",
"Auto Sync Upstream Models": "自動同步上游模型",
+ "Auto-disable models with no available channels": "無可用渠道時自動停用模型",
"Auto-disable rules": "自動停用規則",
"Auto-disable status codes": "自動停用狀態碼",
"Auto-disable-enabled channels only": "僅測試已啟用自動停用的渠道",
"Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.": "此模式僅探測已啟用自動停用且未被手動停用的渠道。",
+ "Auto-disabled": "自動停用",
"Auto-discover": "自動發現",
"Auto-discovers endpoints from the provider": "自動從供應商發現端點",
+ "Auto-enable models disabled by this setting when a channel recovers": "可用渠道恢復時自動啟用由此設定停用的模型",
+ "Auto-enabled": "自動啟用",
"Auto-fill when one field exists and another is missing": "在一個欄位有值、另一個缺失時自動補齊",
"Auto-refreshing every {{seconds}}s": "每 {{seconds}} 秒自動重新整理",
"Auto-retry status codes": "自動重試狀態碼",
@@ -535,8 +568,9 @@
"Available disk space": "可用磁碟空間",
"Available Models": "可用模型",
"Available reset credits": "可用重置次數",
+ "Available reward": "可用獎勵",
"Available Rewards": "可用獎勵",
- "Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.": "可用變數:{{provider}}、{{field}}、{{op}}、{{required}}、{{current}},以及 {{current.roles}} 等路徑變數。",
+ "Available: {{amount}}": "可用:{{amount}}",
"Average latency": "平均延遲",
"Average latency, TTFT, and success rate by group": "各分組的平均延遲、首 Token 延遲和成功率",
"Average latency, TTFT, TPS, and success rate": "平均延遲、TTFT、TPS 和成功率",
@@ -599,10 +633,12 @@
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "大量檢測完成:渠道 {{channels}} 個,新增 {{add}} 個,刪除 {{remove}} 個,失敗 {{fails}} 個",
"Batch detection failed": "大量檢測失敗",
"Batch disable failed": "大量停用失敗",
+ "Batch Disable Models with No Channels": "停用無可用渠道的模型",
"Batch Edit": "大量編輯",
"Batch edit all channels with this tag. Leave fields empty to keep current values.": "大量編輯帶有此標籤的所有渠道。留空欄位以保留目前值。",
"Batch Edit by Tag": "按標籤大量編輯",
"Batch enable failed": "大量啟用失敗",
+ "Batch Enable Models with Recovered Channels": "啟用渠道已恢復的模型",
"Batch Operations": "大量操作",
"Batch processing failed": "大量處理失敗",
"Batch set tag for {{count}} channels": "大量为 {{count}} 個渠道設定標籤",
@@ -743,6 +779,7 @@
"Change To": "更改為",
"Changed Fields": "變更欄位",
"Changes are written to the settings draft on save.": "儲存後會寫入設定草稿。",
+ "Changing the version requires acceptance on the next submission.": "變更版本後,使用者下次提交時必須重新同意。",
"Changing...": "修改中...",
"Channel": "渠道",
"Channel {{name}}": "渠道 {{name}}",
@@ -751,6 +788,10 @@
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.": "渠道親和性會基於從請求上下文或 JSON Body 提取的 Key,優先複用上一次成功的渠道。",
"Channel Affinity: Upstream Cache Hit": "渠道親和性:上游緩存命中",
"Channel consistency repaired: {{success}} succeeded, {{fails}} failed": "渠道一致性修復完成:{{success}} 個成功,{{fails}} 個失敗",
+ "Channel Contribution Agreement": "渠道貢獻協議",
+ "Channel Contribution Review": "渠道貢獻審核",
+ "Channel contribution settings": "渠道貢獻設定",
+ "Channel Contributions": "渠道貢獻",
"Channel copied successfully": "渠道複製成功",
"Channel created successfully": "渠道建立成功",
"Channel deleted successfully": "渠道刪除成功",
@@ -764,9 +805,14 @@
"Channel key unlocked": "渠道金鑰已解鎖",
"Channel Management": "渠道管理",
"Channel models": "渠道模型",
+ "Channel name": "渠道名稱",
"Channel name is required": "渠道名稱是必填的",
+ "Channel name must not exceed 128 characters": "渠道名稱不能超過 128 個字元",
+ "Channel tag is required": "渠道標籤為必填項",
+ "Channel tag must not exceed 64 characters": "渠道標籤不能超過 64 個字元",
"Channel test completed": "渠道測試完成",
"Channel test mode": "渠道測試模式",
+ "Channel type": "渠道類型",
"Channel type is required": "渠道類型是必填的",
"Channel updated successfully": "渠道更新成功",
"Channel-specific settings (JSON format)": "渠道特定設定(JSON 格式)",
@@ -956,6 +1002,7 @@
"Conditions (AND)": "條件(AND)",
"Confidence": "置信度",
"Configuration": "設定",
+ "Configuration changes invalidate the previous test result.": "設定變更會使先前的測試結果失效。",
"Configuration File": "設定文件",
"Configuration for Creem payment integration": "Creem 支付整合的設定",
"Configuration for Epay payment integration": "Epay 支付整合的設定",
@@ -991,6 +1038,7 @@
"Configure Waffo payment aggregation platform integration": "設定 Waffo 支付聚合平台整合",
"Configure your account behavior preferences": "設定您的用戶行為偏好",
"Configure your account preferences and integrations": "設定您的用戶偏好和整合",
+ "Configured": "已設定",
"Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.": "儲存為 PayMethods JSON。type 值決定點擊後使用哪個支付流程:stripe 走 Stripe,waffo_pancake 走 Waffo Pancake,其他值作為 Epay 的 type 參數提交。",
"Configured routes and latency checks": "已設定路由和延遲檢測",
"Confirm": "確認",
@@ -1029,6 +1077,7 @@
"Connect through OpenAI, Claude, Gemini, and other compatible API routes": "透過 OpenAI、Claude、Gemini 以及其他兼容 API 路由接入",
"Connected to io.net service normally.": "已正常連接 io.net 服務。",
"Connection closed": "連接已關閉",
+ "Connection details": "連線詳情",
"Connection error": "連接錯誤",
"Connection failed": "連接失敗",
"Connection info detected in clipboard": "偵測到剪貼簿中的連線資訊",
@@ -1059,7 +1108,26 @@
"Continue with OIDC": "使用 OIDC 繼續",
"Continue with Telegram": "使用 Telegram 繼續",
"Continue with WeChat": "使用 微信 繼續",
+ "Continuous failure time before automatic deletion.": "連續不可用達到此時長後自動刪除。",
"Contract review, compliance, summarisation": "合同審閱、合規與摘要",
+ "Contribute": "貢獻",
+ "Contribute a channel": "貢獻渠道",
+ "Contribution approved": "貢獻已通過",
+ "Contribution channel connection settings are read-only here. Submit sensitive changes through channel contribution review; only tag, priority, and weight can be edited.": "貢獻渠道的連線設定在此處為唯讀。如需修改敏感設定,請透過渠道貢獻複審提交;此處僅可編輯標籤、優先級和權重。",
+ "Contribution deleted": "貢獻已刪除",
+ "Contribution details": "貢獻詳情",
+ "Contribution details are incomplete": "貢獻詳情不完整",
+ "Contribution draft saved": "貢獻草稿已儲存",
+ "Contribution eligibility": "貢獻資格",
+ "Contribution rejected": "貢獻已駁回",
+ "Contribution review": "貢獻審核",
+ "Contribution settings saved": "貢獻設定已儲存",
+ "Contribution settings unavailable": "貢獻設定無法使用",
+ "Contribution submitted for review": "貢獻已提交審核",
+ "Contribution withdrawn": "貢獻已撤回",
+ "Contributions will appear here when users create drafts.": "使用者建立草稿後,貢獻會顯示在這裡。",
+ "Contributor": "貢獻者",
+ "Control eligibility, routing defaults, health removal, rewards, and the agreement.": "管理貢獻資格、路由預設值、健康刪除、獎勵與協議。",
"Control which models are exposed and which groups may use them.": "控制對外暴露的模型,以及哪些分組可以使用它們。",
"Controls how much the model thinks before answering": "控制模型回答前的推理深度",
"Controls randomness and creativity": "控制輸出的隨機性和創造性",
@@ -1198,6 +1266,7 @@
"Current Billing": "目前收費",
"Current Cache Size": "目前緩存大小",
"Current domain": "目前域名",
+ "Current draft is saved": "目前草稿已儲存",
"Current email: {{email}}. Enter a new email to change.": "目前電郵:{{email}}。輸入新電郵以更改。",
"Current key": "目前金鑰",
"Current legacy JSON is invalid, cannot append": "目前舊格式 JSON 不合法,無法追加模板",
@@ -1206,6 +1275,7 @@
"Current Password": "目前密碼",
"Current Price": "目前價格",
"Current quota": "目前額度",
+ "Current reward rate": "目前獎勵比例",
"Current Value": "目前值",
"Current version": "目前版本",
"Current:": "目前:",
@@ -1270,6 +1340,7 @@
"Default Bearer": "預設 Bearer",
"Default Collapse Sidebar": "預設摺疊側邊欄",
"Default consumption chart": "預設消耗分佈圖",
+ "Default is 0 until routing is intentionally enabled.": "預設為 0,直到明確啟用路由。",
"Default Max Tokens": "預設最大 Token 數",
"Default model call chart": "預設模型呼叫圖",
"Default range": "預設範圍",
@@ -1295,6 +1366,7 @@
"Delete all stale": "刪除所有失聯",
"Delete Auto-Disabled": "刪除自動停用",
"Delete Channel": "刪除渠道",
+ "Delete channel contribution?": "刪除渠道貢獻?",
"Delete Channels?": "刪除渠道?",
"Delete condition": "刪除條件",
"Delete Condition": "刪除條件",
@@ -1359,6 +1431,7 @@
"Describe": "圖生文",
"Describe this model...": "描述此模型...",
"Describe this vendor...": "描述此供應商...",
+ "Describe what must be corrected": "說明需要修正的內容",
"Description": "說明資訊",
"Description is required": "描述為必填項",
"Designed and Developed by": "設計與開發",
@@ -1385,6 +1458,7 @@
"Disable": "停用",
"Disable 2FA": "停用 2FA",
"Disable All": "停用全部",
+ "Disable Models with No Channels?": "停用無可用渠道的模型?",
"Disable on failure": "失敗時停用",
"Disable selected channels": "停用選定的渠道",
"Disable selected models": "停用選定的模型",
@@ -1457,6 +1531,7 @@
"Downgrade to pre-purchase group": "降級到購買前分組",
"Downgrade to this group after the subscription expires": "訂閱過期後降級到該分組",
"Download": "下載",
+ "Draft": "草稿",
"Drag {{group}} to reorder": "拖曳 {{group}} 以重新排序",
"Draw": "繪圖",
"Drawing": "繪圖",
@@ -1488,7 +1563,6 @@
"e.g. my-gitlab": "例如:my-gitlab",
"e.g. New API Console": "例如,New API 控制台",
"e.g. openid profile email": "例如:openid profile email",
- "e.g. Requires level {{required}}; your current level is {{current}}": "例如:需要等級 {{required}};你目前的等級是 {{current}}",
"e.g. Suitable for light usage": "例如:適合輕度使用",
"e.g. This request does not meet access policy": "例如:該請求不滿足准入策略",
"e.g., 0.95": "例如,0.95",
@@ -1532,10 +1606,12 @@
"Edit": "編輯",
"Edit {{title}}": "編輯{{title}}",
"Edit all channels with tag:": "編輯所有帶有標籤的渠道:",
+ "Edit and resubmit": "編輯並重新提交",
"Edit Announcement": "編輯公告",
"Edit API Shortcut": "編輯 API 快捷方式",
"Edit billing ratios and user-selectable groups in one table.": "在一個表格中編輯收費倍率和用戶可選分組。",
"Edit Channel": "編輯渠道",
+ "Edit channel contribution": "編輯渠道貢獻",
"Edit channel routing": "編輯渠道路由",
"Edit chat preset": "編輯聊天預設",
"Edit discount tier": "編輯折扣檔位",
@@ -1596,6 +1672,7 @@
"Enable io.net model deployment service in console": "在控制台啟用 io.net 模型部署服務",
"Enable LinuxDO OAuth": "啟用 LinuxDO OAuth",
"Enable model performance metrics": "啟用模型效能指標",
+ "Enable Models with Recovered Channels?": "啟用渠道已恢復的模型?",
"Enable OIDC": "啟用 OIDC",
"Enable or disable this channel": "啟用或停用此渠道",
"Enable or disable this model": "啟用或停用此模型",
@@ -1624,6 +1701,7 @@
"Enabled all channels with tag: {{tag}}": "已啟用標籤「{{tag}}」下的所有渠道",
"Enabled channels with tag {{tag}}": "啟用標籤為 {{tag}} 的渠道",
"Enabled Status": "啟用狀態",
+ "Enabling this setting immediately disables all currently enabled models with no available channels. Turning it off later will not automatically re-enable those models. Continue?": "啟用此設定後,將立即停用所有沒有可用渠道的已啟用模型。之後關閉此設定也不會自動重新啟用這些模型。是否繼續?",
"Enabling...": "正在啟用...",
"Encourages introducing new topics": "鼓勵引入新話題",
"Encourages new topics": "鼓勵討論新話題",
@@ -1635,6 +1713,7 @@
"Endpoint": "端點",
"Endpoint config": "端點設定",
"Endpoint Configuration": "端點設定",
+ "Endpoint type": "端點類型",
"Endpoint Type": "端點類型",
"Endpoint, provider-specific settings, and credentials.": "接口地址、供應商專屬設定和憑證。",
"Endpoint:": "端點:",
@@ -1650,8 +1729,10 @@
"Enter a positive integer": "請輸入正整數",
"Enter a positive or negative amount to adjust the quota": "輸入正數或負數以調整配額",
"Enter a react-icons component name. Invalid names show no icon.": "輸入 react-icons 組件名。無法解析的名稱不會顯示圖標。",
+ "Enter a valid API endpoint": "請輸入有效的 API 端點",
"Enter a valid email or leave blank": "請輸入有效的電郵地址或留空",
"Enter a value and press Enter": "輸入值並按 Enter 鍵",
+ "Enter a whole number within the allowed range": "請輸入允許範圍內的整數",
"Enter amount in {{currency}}": "輸入金額({{currency}})",
"Enter amount in tokens": "輸入額度(Token)",
"Enter announcement content (supports Markdown & HTML)": "輸入公告內容(支援 Markdown 和 HTML)",
@@ -1689,6 +1770,7 @@
"Enter password (8-20 characters)": "輸入密碼(8-20 個字元)",
"Enter quota in {{currency}}": "輸入 {{currency}} 額度",
"Enter quota in tokens": "輸入令牌配額",
+ "Enter reward quota": "輸入獎勵額度",
"Enter secret key": "輸入金鑰",
"Enter system prompt (user prompt takes priority)": "輸入系統提示詞(用戶提示詞優先)",
"Enter tag name (optional)": "輸入標籤名稱(可選)",
@@ -1699,6 +1781,7 @@
"Enter the full URL of your Gotify server": "輸入您的 Gotify 伺服器的完整 URL",
"Enter the knowledge base ID": "輸入知識庫 ID",
"Enter the path before /suno, usually just the domain": "輸入 /suno 之前的路徑,通常只是域名",
+ "Enter the provider API key": "輸入服務商 API 金鑰",
"Enter the quota amount in {{currency}}": "輸入 {{currency}} 的配額數量",
"Enter the quota amount in tokens": "輸入令牌配額數量",
"Enter the verification code": "輸入驗證碼",
@@ -1738,8 +1821,8 @@
"Error Type (optional)": "錯誤類型(可選)",
"Estimated cost": "預計成本",
"Estimated quota cost": "估算配額費用",
- "Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.": "根據提供商回傳的用戶資訊欄位執行政策判斷。條件和巢狀分組支援 and/or 邏輯。",
"Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.": "定價表中的每個分組名可用在兩個地方:用戶身上(用戶分組,由管理員分配)和令牌身上(令牌分組,建立令牌時選擇)。同一批名字,兩種不同職責。",
+ "Every model has administrator pricing": "所有模型均已設定管理員價格",
"Every other device will lose access immediately. This device will remain signed in.": "其他所有裝置將立即失去存取權限,目前裝置將保持登入。",
"Everything configured for this group, in one place.": "該分組的全部設定,一處看全。",
"Exact": "精確",
@@ -1802,6 +1885,9 @@
"Failed to {{action}} user": "{{action}}用戶失敗",
"Failed to adjust quota": "調整額度失敗",
"Failed to apply overwrite.": "套用覆蓋失敗。",
+ "Failed to approve contribution": "貢獻審核通過失敗",
+ "Failed to batch disable models": "批次停用模型失敗",
+ "Failed to batch enable models": "批次啟用模型失敗",
"Failed to bind email": "連結電郵失敗",
"Failed to change password": "修改密碼失敗",
"Failed to check for updates": "檢查更新失敗",
@@ -1827,6 +1913,7 @@
"Failed to delete API key": "刪除API金鑰失敗",
"Failed to delete API keys": "刪除API金鑰失敗",
"Failed to delete channel": "刪除渠道失敗",
+ "Failed to delete contribution": "刪除貢獻失敗",
"Failed to delete disabled channels": "刪除已停用渠道失敗",
"Failed to delete failed models": "刪除失敗模型失敗",
"Failed to delete group": "刪除分組失敗",
@@ -1864,6 +1951,10 @@
"Failed to load": "載入失敗",
"Failed to load API keys": "載入 API 金鑰失敗",
"Failed to load billing history": "載入收費歷史失敗",
+ "Failed to load contribution": "載入貢獻失敗",
+ "Failed to load contribution rewards": "載入貢獻獎勵失敗",
+ "Failed to load contribution settings": "載入貢獻設定失敗",
+ "Failed to load contributions": "載入貢獻清單失敗",
"Failed to load enabled models": "獲取啟用模型失敗",
"Failed to load home page content": "載入首頁內容失敗",
"Failed to load image": "無法載入圖像",
@@ -1886,6 +1977,7 @@
"Failed to refresh credential": "重新整理憑證失敗",
"Failed to regenerate backup codes": "重新生成備份代碼失敗",
"Failed to register Passkey": "註冊 Passkey 失敗",
+ "Failed to reject contribution": "駁回貢獻失敗",
"Failed to remove Passkey": "移除 Passkey 失敗",
"Failed to repair channel consistency": "修復渠道一致性失敗",
"Failed to reset 2FA": "重置 2FA 失敗",
@@ -1895,6 +1987,8 @@
"Failed to save": "儲存失敗",
"Failed to save announcements": "儲存公告失敗",
"Failed to save API info": "儲存 API 資訊失敗",
+ "Failed to save contribution draft": "儲存貢獻草稿失敗",
+ "Failed to save contribution settings": "儲存貢獻設定失敗",
"Failed to save FAQ": "儲存 FAQ 失敗",
"Failed to save Uptime Kuma groups": "儲存 Uptime Kuma 組失敗",
"Failed to search API keys": "搜尋 API 金鑰失敗",
@@ -1911,16 +2005,19 @@
"Failed to start Discord login": "啟動 Discord 登入失敗",
"Failed to start GitHub login": "啟動 GitHub 登入失敗",
"Failed to start LinuxDO login": "啟動 LinuxDO 登入失敗",
+ "Failed to start model tests": "啟動模型測試失敗",
"Failed to start OIDC login": "啟動 OIDC 登入失敗",
"Failed to start Passkey login": "無法啟動 Passkey 登入",
"Failed to start Passkey registration": "啟動 Passkey 註冊失敗",
"Failed to start Telegram binding": "啟動 Telegram 綁定失敗",
"Failed to start testing all channels": "無法開始測試所有渠道",
"Failed to start verification": "啟動驗證失敗",
+ "Failed to submit contribution": "提交貢獻失敗",
"Failed to sync prices": "同步價格失敗",
"Failed to sync ratios": "同步比率失敗",
"Failed to test all channels": "無法測試所有渠道",
"Failed to test channel": "測試渠道失敗",
+ "Failed to transfer rewards": "轉入獎勵失敗",
"Failed to update all balances": "無法更新所有餘額",
"Failed to update API key": "更新 API 金鑰失敗",
"Failed to update API key status": "更新 API 金鑰狀態失敗",
@@ -1935,7 +2032,9 @@
"Failed to update settings": "無法更新設定",
"Failed to update tag": "更新標籤失敗",
"Failed to update user": "更新用戶失敗",
+ "Failed to withdraw contribution": "撤回貢獻失敗",
"Failure keywords": "失敗關鍵詞",
+ "Failure since": "失敗開始時間",
"Fair": "公平",
"Fallback": "兜底",
"Fallback base URL": "兜底 Base URL",
@@ -1955,9 +2054,12 @@
"Fetch available models for:": "獲取可用模型:",
"Fetch available models from upstream": "從上游獲取可用模型",
"Fetch from Upstream": "從上游獲取",
+ "Fetch models": "取得模型",
"Fetch Models": "獲取模型",
+ "Fetch models or enter model IDs": "取得模型或輸入模型 ID",
"Fetched {{count}} model(s) from upstream": "從上游獲取了 {{count}} 個模型",
"Fetched {{count}} models": "已獲取 {{count}} 個模型",
+ "Fetched and saved {{count}} models": "已取得並儲存 {{count}} 個模型",
"Fetching prefill groups...": "正在獲取預填充分組...",
"Fetching upstream prices...": "正在獲取上游價格...",
"Fetching upstream ratios...": "正在獲取上游比例...",
@@ -1978,10 +2080,6 @@
"Fill in the following info to create a new subscription plan": "填寫以下資訊建立新的訂閱套餐",
"Fill Related Models": "填入相關模型",
"Fill Template": "填入模板",
- "Fill template: level and active": "填入模板:等級和啟用狀態",
- "Fill template: level message": "填入模板:等級提示",
- "Fill template: organization message": "填入模板:組織提示",
- "Fill template: organization or role": "填入模板:組織或角色",
"Fill Templates": "填充模板",
"Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.": "填寫客戶端請求體裡的完整 model 值,例如 gpt-4o 或 gemini-2.5-flash。多個模型用英文逗號分隔。",
"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format": "僅為使用 OpenAI 格式的 Gemini/Vertex 渠道填充 thoughtSignature",
@@ -2092,6 +2190,7 @@
"Full Code": "完整代碼",
"Full input length": "完整輸入長度",
"Full layout": "全屏佈局",
+ "Full model test started": "全模型測試已開始",
"Full width": "全寬",
"Function calling": "函數呼叫",
"Functions": "函數",
@@ -2122,7 +2221,9 @@
"Get started": "開始使用",
"Get Started": "開始使用",
"GitHub": "GitHub",
+ "Give the contributor a clear reason they can address before resubmitting.": "請向貢獻者說明可在重新提交前修正的明確原因。",
"Give the group a recognizable name and optional description.": "為該分組提供一個可識別的名稱和可選的描述。",
+ "Give this contribution a recognizable name": "為此貢獻填寫易識別的名稱",
"Give this group a recognizable name.": "為此分組提供一個可識別的名稱。",
"Global configuration and administrative tools.": "全局設定和管理工具。",
"Global Coverage": "全球覆蓋",
@@ -2166,6 +2267,7 @@
"Group details": "分組詳情",
"Group identifier": "分組標識符",
"Group is required": "組是必需的",
+ "Group must not exceed 64 characters": "分組不能超過 64 個字元",
"Group name": "分組名稱",
"Group Name": "分組名稱",
"Group name cannot be changed when editing.": "編輯時無法更改組名稱。",
@@ -2205,6 +2307,8 @@
"Header Value (supports string or JSON mapping)": "請求頭值(支援字串或 JSON 映射)",
"header. Anthropic-formatted endpoints accept the": " 請求頭。Anthropic 格式的端點也接受",
"Health": "健康",
+ "Health check interval (minutes)": "健康檢查間隔(分鐘)",
+ "Health checks continue while the contributed channel is active.": "貢獻渠道處於啟用狀態時會持續進行健康檢查。",
"Healthy": "正常",
"Hidden": "屏蔽",
"Hidden — verify to reveal": "隱藏 — 驗證以顯示",
@@ -2224,6 +2328,7 @@
"High-risk status code retry risk check 4": "我自願承擔系統穩定性風險:本人知悉該操作可能導致用戶端嚴重逾時及服務崩潰。若因本人開啟此功能導致請求積壓或服務不可用,後果由本人自行承擔。",
"High-risk status code retry risk disclaimer": "### ⚠️ 高風險操作:504/524 狀態碼重試風險告知與免責聲明\n\n本專案預設對 `400`(請求錯誤)、`504`(閘道逾時)與 `524`(CDN 逾時)狀態碼不進行重試。504 與 524 錯誤通常代表**請求已成功送達上游 AI 服務,且上游正在處理,但因上游處理時間過長導致連線中斷**。這通常表示逾時源於上游服務瓶頸。\n\n開啟此類逾時狀態碼的重新導向/重試屬於**極高風險操作**。在開啟該功能前,您必須仔細閱讀並知悉以下嚴重後果:\n\n#### 一、核心風險告知(請仔細閱讀)\n\n1. 💸 雙重/多重計費風險:多數 AI 上游廠商對於已開始處理但因網路原因中斷(504/524)的請求**仍然會扣費**。此時若觸發重試,將會向上游發起全新請求,導致您被**雙重甚至多重計費**。\n2. ⏳ 用戶端嚴重逾時:單次請求已觸發逾時,疊加重試機制會使總請求耗時成倍增加,導致最終用戶端(或呼叫方)出現嚴重甚至無法接受的逾時現象。\n3. 💥 請求積壓與系統崩潰風險:強制重試逾時請求會長時間占用系統執行緒與連線數。在高併發場景下,這將導致嚴重的**請求積壓**,進而耗盡系統資源,引發雪崩效應,造成整個代理服務崩潰。\n\n#### 二、風險確認聲明\n\n若您堅持開啟該功能,即代表您作出以下確認:",
"Higher priority channels are selected first": "優先級更高的渠道優先被選中",
+ "Higher values are selected first.": "數值越高越優先選擇。",
"Historical Usage": "歷史使用情況",
"History of MjProxy-style image tasks.": "MjProxy 風格圖像任務歷史。",
"Hit criteria: If cached tokens exist in usage, it counts as a hit.": "命中判定:usage 中存在 cached tokens 即視為命中。",
@@ -2245,6 +2350,7 @@
"How It Works": "工作流程",
"How model mapping works": "模型映射如何運作",
"How much to charge for each US dollar of balance (Epay)": "每美元餘額(Epay)的收費金額",
+ "How often contributed channels are checked.": "貢獻渠道的檢查頻率。",
"How this model name should match requests": "此模型名稱應如何匹配請求",
"How to deliver the resulting image": "圖像結果的返回方式",
"How to get an io.net API Key": "如何獲取 io.net API 金鑰",
@@ -2280,6 +2386,7 @@
"https://your-server.example.com": "https://your-server.example.com",
"Human-readable name shown to users during Passkey prompts.": "在 Passkey 提示期間向用戶顯示的人類可讀名稱。",
"I confirm enabling high-risk retry": "我確認開啟高危重試",
+ "I have read and agree to": "我已閱讀並同意",
"I have read and agree to the": "我已閱讀並同意",
"I have read and understood the above compliance reminder": "我已閱讀並理解上述合規提醒",
"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.": "我已閱讀並理解上述合規提醒,確認相關法律風險,並確認承擔因部署、運營和收費行為產生的法律責任。",
@@ -2348,6 +2455,7 @@
"Input tokens": "輸入 token",
"Input Tokens": "輸入 Token",
"Inset": "內嵌",
+ "Inspect drafts, approved channels, rejected revisions, and health removals.": "查看草稿、已通過渠道、已駁回修訂與健康刪除記錄。",
"Inspect requests, errors, and billing details": "查看請求、錯誤和收費詳情",
"Inspect user prompts": "檢查用戶提示",
"Instance": "實例",
@@ -2456,9 +2564,13 @@
"Last 30 days uptime": "近 30 天可用率",
"Last active {{time}} · Expires {{expires}}": "最後活動於 {{time}} · 到期時間 {{expires}}",
"Last check time": "上次檢測時間",
+ "Last checked": "上次檢查",
"Last detected addable models": "上次檢測到可加入模型",
+ "Last error": "最近錯誤",
+ "Last failure": "最近失敗",
"Last Login": "最後登入",
"Last Seen": "最後上報",
+ "Last success": "最近成功",
"Last Tested": "上次測試",
"Last updated:": "上次更新時間:",
"Last Used": "最後使用時間",
@@ -2475,6 +2587,7 @@
"Learn more": "了解更多",
"Learn more:": "了解更多:",
"Leave": "離開",
+ "Leave blank to keep the current key": "留空以保留目前金鑰",
"Leave blank to keep the existing credential": "留空以保留現有憑證",
"Leave blank to keep the existing key": "留空以保留現有金鑰",
"Leave blank unless rotating the secret": "除非正在輪換金鑰,否則留空",
@@ -2505,6 +2618,7 @@
"Less than or equal": "小於等於",
"Less Than or Equal": "小於等於",
"License": "許可證",
+ "Lifetime earned": "累計獲得",
"Light": "淺色",
"Lightning Fast": "極速",
"Limit period": "限制周期",
@@ -2593,6 +2707,7 @@
"Manual Disabled": "手動停用",
"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).": "將用戶資訊回應中的欄位映射到本地用戶屬性。支援嵌套路徑(例如 ocs.data.id)。",
"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.": "將模型標識符映射到 Gemini API 版本。當未找到特定匹配項時,將套用 `default` 條目。",
+ "Map public model IDs to the provider model IDs when needed.": "需要時可將公開模型 ID 對應到服務商模型 ID。",
"Map request model names to actual provider model names (JSON format)": "將請求模型名稱映射到實際供應商模型名稱 (JSON 格式)",
"Map response status codes (JSON format)": "映射回應狀態碼(JSON 格式)",
"Map upstream status codes to different codes": "將上游狀態碼映射到不同的代碼",
@@ -2672,6 +2787,7 @@
"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.": "在下方建立新的配對,或繼續向下選擇已有配對。準備好後點擊儲存。",
"Minute": "分鐘",
"minutes": "分鐘",
+ "Missing": "缺少",
"Missing code": "缺少代碼",
"Missing Models": "缺失的模型",
"Missing user data from Passkey login response": "Passkey 登入回應中缺少用戶數據",
@@ -2701,6 +2817,7 @@
"Model enabled successfully": "模型啟用成功",
"Model fixed pricing": "模型固定定價",
"Model Group": "模型分組",
+ "Model health": "模型健康狀態",
"Model Limits": "模型限制",
"Model Mapping": "模型映射",
"Model Mapping (JSON)": "模型映射 (JSON)",
@@ -2786,6 +2903,7 @@
"Move {{group}} up": "將 {{group}} 上移",
"Move a request header": "移動請求頭",
"Move affiliate rewards to your main balance": "將推廣獎勵轉移到您的主餘額",
+ "Move available contribution rewards into your wallet balance.": "將可用貢獻獎勵轉入錢包餘額。",
"Move fallback to end": "兜底移到最後",
"Move Field": "移動欄位",
"Move Header": "移動請求頭",
@@ -2818,6 +2936,7 @@
"Multipliers for recharge pricing based on user groups.": "基於用戶分組的儲值定價倍率。",
"Must be a valid URL": "必須是有效的 URL",
"Must be at least 8 characters": "必須至少 8 個字元",
+ "My contributions": "我的貢獻",
"My Subscriptions": "我的訂閱",
"my-status": "我的狀態",
"MySQL detected": "偵測到 MySQL",
@@ -2851,6 +2970,7 @@
"New API": "New API",
"New API <noreply@example.com>": "New API <noreply@example.com>",
"New API Project Repository:": "New API 項目倉庫:",
+ "New contribution": "新增貢獻",
"New Format Template": "新格式模板",
"New Group": "新建分組",
"New model": "新模型",
@@ -2885,6 +3005,7 @@
"No app usage data available for this model.": "該模型暫無套用使用數據。",
"No apps match the selected filters": "沒有匹配篩選條件的套用",
"No Auth": "無認證",
+ "No auto-disabled models with recovered channels found": "沒有發現可啟用的、由規則自動停用且渠道已恢復的模型",
"No available groups in the global Auto order.": "全域 Auto 順序中目前沒有可用分組。",
"No available models": "沒有可用模型",
"No available Web chat links": "沒有可用的 Web 聊天連結",
@@ -2896,6 +3017,7 @@
"No changes": "沒有變更",
"No changes made": "未進行任何更改",
"No changes to save": "沒有需要儲存的更改",
+ "No channel contributions yet": "暫無渠道貢獻",
"No channel selected": "未選擇渠道",
"No channel type found.": "未找到渠道類型。",
"No channels available. Create your first channel to get started.": "沒有可用的渠道。建立您的第一個渠道即可開始使用。",
@@ -2910,6 +3032,7 @@
"No console output": "無控制台輸出",
"No containers": "無容器",
"No content to copy": "沒有可複製的內容",
+ "No contribution rewards yet": "暫無貢獻獎勵",
"No custom groups. Saving will inherit the complete global Auto order.": "未自訂分組。儲存後將繼承完整的全域 Auto 順序。",
"No custom OAuth providers configured yet.": "尚未設定自訂 OAuth 供應商。",
"No data": "暫無數據",
@@ -2946,13 +3069,16 @@
"No Logs Found": "未找到日誌",
"No mappings configured. Click \"Add Row\" to get started.": "未設定映射。點擊「新增列」開始。",
"No matches found": "未找到匹配項",
+ "No matching contributions": "沒有符合的貢獻",
"No matching items": "沒有匹配項",
+ "No matching models": "沒有符合的模型",
"No matching results": "無匹配結果",
"No matching rules": "沒有匹配的規則",
"No matching token and channel usage was found.": "未找到匹配的令牌與渠道用量。",
"No messages yet": "暫無訊息",
"No missing models found.": "未找到缺失的模型。",
"No model found.": "未找到模型。",
+ "No model health observations": "暫無模型健康檢查記錄",
"No model mappings configured. Click \"Add Mapping\" to get started.": "未設定模型映射。點擊「新增映射」即可開始使用。",
"No model price changes to save": "沒有模型價格變更需要儲存",
"No models available": "沒有可用的模型",
@@ -2972,6 +3098,7 @@
"No models to add": "無待新增模型",
"No models to copy": "沒有模型可複製",
"No models to remove": "無待刪除模型",
+ "No models with unavailable channels found": "沒有需要停用的無可用渠道模型",
"No models with unset prices": "沒有未設定定價的模型",
"No new models to add": "沒有新模型可新增",
"No new models yet": "暫無新模型",
@@ -3021,6 +3148,7 @@
"No Sync": "不同步",
"No system announcements": "暫無系統公告",
"No system tasks yet.": "暫無系統任務。",
+ "No test results": "暫無測試結果",
"No token found.": "未找到令牌。",
"No tools configured": "未設定工具",
"No Upgrade": "不升級",
@@ -3054,6 +3182,7 @@
"Not Equals": "不等於",
"Not in pricing table": "不在定價分組表中",
"Not included": "未加入",
+ "Not required": "無需測試",
"Not set": "未設定",
"Not Set": "未設定",
"Not set yet": "尚未設定",
@@ -3077,6 +3206,7 @@
"Number of tokens per unit quota": "每單位配額的令牌數",
"Number of top log probabilities returned per token": "每個 token 返回的 top 概率數量",
"Number of users invited": "已邀請的用戶數量",
+ "OAuth": "OAuth",
"OAuth binding timed out. Please try again.": "OAuth 綁定逾時,請重試。",
"OAuth binding window is no longer available": "OAuth 綁定視窗已無法使用",
"OAuth callback URL": "OAuth 回呼 URL",
@@ -3139,7 +3269,9 @@
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "僅選定的欄位將會被覆蓋。如果出現新的衝突,您可以重新執行同步精靈。",
"Only successful requests": "僅成功的請求",
"Only successful requests count toward this limit.": "僅成功的請求計入此限制。",
+ "Only the connection details required for review are collected.": "僅收集審核所需的連線資訊。",
"Only the last {{value}} log files will be retained; the rest will be deleted.": "將只保留最近 {{value}} 個日誌檔案,其餘將被刪除。",
+ "Only these groups and provider types can be submitted.": "僅可提交這些分組與服務商類型。",
"Oops! Page Not Found!": "糟糕!頁面未找到!",
"Oops! Something went wrong": "糟糕!出錯了",
"Open": "打開",
@@ -3150,6 +3282,7 @@
"Open in New Tab": "在新標籤頁中打開",
"Open menu": "打開選單",
"Open release": "打開版本",
+ "Open review": "開啟審核",
"Open source": "開源",
"Open Source": "開源項目",
"Open the io.net console API Keys page": "打開 io.net 控制台 API 金鑰頁面",
@@ -3247,6 +3380,7 @@
"Overwritten": "已覆蓋",
"Page": "頁面",
"Page {{current}} of {{total}}": "第 {{current}} 頁,共 {{total}} 頁",
+ "Page {{page}} of {{pages}}": "第 {{page}} / {{pages}} 頁",
"PaLM": "PaLM",
"Pan": "平移",
"Pancake": "煎餅",
@@ -3278,6 +3412,7 @@
"Pass when key is missing": "欄位缺失時通過",
"Pass-Through": "透傳",
"Pass-through Headers (comma-separated or JSON array)": "透傳請求頭(逗號分隔或 JSON 陣列)",
+ "Passed": "通過",
"Passive recovery only": "僅被動恢復",
"Passkey": "Passkey",
"Passkey Authentication": "通行金鑰認證",
@@ -3348,6 +3483,7 @@
"Penalises repetition of frequent tokens": "懲罰高頻 token 的重複出現",
"pending": "等待中",
"Pending": "待確認",
+ "Pending review": "待審核",
"per": "每",
"Per 1K tokens": "每 1K tokens",
"Per 1M tokens": "每 1M tokens",
@@ -3679,6 +3815,7 @@
"Received": "獲得",
"Received amount": "已收額度",
"Recent maintenance tasks running across instances and their execution status.": "跨實例執行的近期維護任務及其執行狀態。",
+ "Recent transfers": "最近轉入",
"Recently completed or failed system task runs.": "最近已完成或失敗的系統任務執行記錄。",
"Recently launched models": "近期發佈的模型",
"Recently launched models gaining traction": "近期發佈並快速增長的模型",
@@ -3750,7 +3887,10 @@
"Registry (optional)": "註冊表 (可選)",
"Registry secret": "註冊表金鑰",
"Registry username": "註冊表用戶名",
+ "Reject": "駁回",
+ "Reject contribution": "駁回貢獻",
"Reject Reason": "拒絕原因",
+ "Rejection reason": "駁回原因",
"Release details": "版本詳情",
"Released": "發佈於",
"Relying Party Display Name": "依賴方顯示名稱",
@@ -3846,6 +3986,7 @@
"Required": "必需",
"Required events:": "必需事件:",
"Required provider, authentication, model, and group settings": "必填的供應商、鑒權、模型和分組設定",
+ "Required tests passed within the last 30 minutes": "必要測試已在最近 30 分鐘內通過",
"Required to expose MjProxy-style image generation to end users.": "需要向終端用戶開放 MjProxy 風格的圖像生成。",
"Rerank": "重新排序",
"Reroll": "重繪",
@@ -3889,6 +4030,7 @@
"Reset usage window": "重置用量窗口",
"Resets in:": "將於以下時間重置:",
"Resetting...": "重置中...",
+ "Resize column": "調整欄寬",
"Resolve Conflicts": "解決衝突",
"Resource Configuration": "資源設定",
"Resources": "資源",
@@ -3921,11 +4063,22 @@
"Revenue": "收入",
"Review & initialize": "審核並初始化",
"Review and sign out devices currently using your account.": "查看並登出目前正在使用您帳號的裝置。",
+ "Review contributed channels and configure contribution policy.": "審核貢獻渠道並設定貢獻政策。",
+ "Review contributions": "審核貢獻",
"Review model rates before scaling traffic": "擴展流量前查看模型費率",
+ "Review note": "審核備註",
+ "Review rejected": "審核未通過",
+ "Review status and per-model channel health history.": "查看審核狀態與各模型的渠道健康歷史。",
"Review your payment details": "查看您的付款詳情",
"Review your purchase details before proceeding.": "在繼續之前,請審閱您的購買詳情。",
+ "Revision": "修訂版本",
"Revoke": "撤銷",
"Revoke session?": "撤銷此工作階段?",
+ "Reward basis points": "獎勵基點",
+ "Reward ledger": "獎勵流水",
+ "Rewards": "獎勵",
+ "Rewards are credited after billable requests use an approved channel.": "計費請求使用已通過渠道後會計入獎勵。",
+ "Rewards transferred to your wallet": "獎勵已轉入錢包",
"Rewards will be added directly to your balance": "獎勵將直接新增到您的餘額",
"Rewrite callback URLs to the local server": "將Callback URL 重寫到本地伺服器",
"Right to Left": "從右到左",
@@ -3946,6 +4099,7 @@
"Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.": "同一入口路徑按客戶端 model 精確分流;未命中的請求走最後的兜底。",
"Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.": "同一入口路徑按客戶端請求中的精確模型名匹配。多個模型用英文逗號分隔,只有最後的兜底可留空。",
"Routing & Overrides": "路由與覆蓋",
+ "Routing and health": "路由與健康檢查",
"Routing Reliability": "路由可靠性",
"Routing Strategy": "路由策略",
"Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.": "行為用戶分組,列為收費分組。空白單元格回退到灰色顯示的基礎倍率。",
@@ -3970,8 +4124,11 @@
"Rules JSON": "規則 JSON",
"Rules JSON must be an array": "規則 JSON 必須是陣列",
"Rules match the original model value from the client request body.": "規則匹配客戶端請求體裡的原始 model 值。",
+ "Run admin test": "執行管理員測試",
+ "Run an independent administrator test before approving this revision.": "通過此修訂前,請執行獨立的管理員測試。",
"Run GC": "執行 GC",
"Run tests for the selected models": "執行所選模型的測試",
+ "Run the full model test before submitting.": "提交前請執行全模型測試。",
"running": "執行中",
"Running": "執行中",
"Runtime": "執行環境",
@@ -3990,6 +4147,7 @@
"Save chat settings": "儲存聊天設定",
"Save check-in settings": "儲存簽到設定",
"Save Creem settings": "儲存 Creem 設定",
+ "Save draft": "儲存草稿",
"Save drawing settings": "儲存繪圖設定",
"Save Epay settings": "儲存 Epay 設定",
"Save failed": "儲存失敗",
@@ -4008,11 +4166,13 @@
"Save preview": "儲存預覽",
"Save rate limits": "儲存速率限制",
"Save sensitive words": "儲存敏感詞",
+ "Save settings": "儲存設定",
"Save Settings": "儲存設定",
"Save sidebar modules": "儲存側邊欄模組",
"Save SMTP settings": "儲存 SMTP 設定",
"Save SSRF settings": "儲存 SSRF 設定",
"Save Stripe settings": "儲存 Stripe 設定",
+ "Save the draft, test every model, then submit it for review.": "儲存草稿並測試每個模型,然後提交審核。",
"Save these backup codes in a safe place. Each code can only be used once.": "將這些備份代碼儲存在安全的地方。每個代碼只能使用一次。",
"Save these codes in a safe place. Each code can only be used once.": "將這些代碼儲存在安全的地方。每個代碼只能使用一次。",
"Save this token now. You won't be able to view it again after closing this dialog.": "請立即儲存此令牌。關閉此對話框後,您將無法再次查看。",
@@ -4020,6 +4180,7 @@
"Save tool prices": "儲存工具價格",
"Save Waffo Pancake settings": "儲存 Waffo Pancake 設定",
"Save Worker settings": "儲存 Worker 設定",
+ "Saved drafts and submitted channels will appear here.": "已儲存的草稿與已提交的渠道會顯示在這裡。",
"Saved successfully": "儲存成功",
"Saving...": "正在儲存...",
"Scan QR Code": "掃描二維碼",
@@ -4089,15 +4250,20 @@
"Select all (filtered)": "全選(篩選結果)",
"Select all models": "選擇所有模型",
"Select All Visible": "全選目前",
+ "Select an allowed group": "選擇允許的分組",
"Select an operation mode and enter the amount": "選擇操作模式並輸入金額",
"Select announcement type": "選擇公告類型",
+ "Select at least one allowed channel type": "請至少選擇一種允許的渠道類型",
+ "Select at least one allowed group": "請至少選擇一個允許的分組",
"Select at least one Auto group or restore global Auto.": "請至少選擇一個 Auto 分組,或恢復全域 Auto。",
"Select at least one field to overwrite.": "請選擇至少一個要覆蓋的欄位。",
+ "Select at least one model": "請至少選擇一個模型",
"Select at least one target model": "請至少選擇一個目標模型",
"Select at most {{max}} Auto groups": "最多選擇 {{max}} 個 Auto 分組",
"Select body font": "選擇正文字體",
"Select border radius": "選擇圓角大小",
"Select channel type": "選擇渠道類型",
+ "Select channel types": "選擇渠道類型",
"Select color preset": "選擇顏色預設",
"Select content width": "選擇內容寬度",
"Select corner radius": "選擇圓角大小",
@@ -4363,6 +4529,7 @@
"Structured output": "結構化輸出",
"Submit": "提交",
"Submit directly": "直接提交",
+ "Submit for review": "提交審核",
"Submit Result": "提交結果",
"Submit Time": "提交時間",
"Submitted": "已提交",
@@ -4391,7 +4558,9 @@
"Successfully deleted {{count}} invalid redemption codes": "已成功刪除 {{count}} 個無效兌換碼",
"Successfully deleted {{count}} model(s)": "成功刪除 {{count}} 個模型",
"Successfully disabled {{count}} model(s)": "成功停用 {{count}} 個模型",
+ "Successfully disabled {{count}} model(s) with no available channels": "已停用 {{count}} 個無可用渠道的模型",
"Successfully enabled {{count}} model(s)": "成功啟用 {{count}} 個模型",
+ "Successfully enabled {{count}} model(s) with recovered channels": "已啟用 {{count}} 個渠道已恢復的模型",
"Suffix": "後綴",
"Suffix Match": "後綴匹配",
"Summarize text": "總結文字",
@@ -4403,7 +4572,6 @@
"Supported Applications": "常用套用支援",
"Supported Imagine Models": "支援的 Imagine 模型",
"Supported modalities": "支援的模態",
- "Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.": "支援的操作符:eq、ne、gt、gte、lt、lte、in、not_in、contains、not_contains、exists、not_exists。留空則允許所有用戶。",
"Supported parameters": "支援的參數",
"Supported variables": "支援變數",
"Supports `-thinking`, `-thinking-": "支援 `-thinking`、`-thinking-`",
@@ -4497,12 +4665,14 @@
"Test {{count}} matching models": "測試 {{count}} 個匹配模型",
"Test {{count}} selected": "測試 {{count}} 個已選擇項",
"Test a model with a starter prompt, or write your own request below.": "使用入門提示詞測試模型,或在下方編寫自己的請求。",
+ "Test all": "測試全部",
"Test all {{count}} models": "測試全部 {{count}} 個模型",
"Test All Channels": "測試所有渠道",
"Test Channel Connection": "測試渠道連接",
"Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.": "測試渠道、重新整理餘額,並啟用/停用單個、大量或帶標籤的渠道。",
"Test Connection": "測試連接",
"Test connectivity for:": "測試連接性:",
+ "Test expired": "測試已過期",
"Test failed": "測試失敗",
"Test interval (minutes)": "測試間隔 (分鐘)",
"Test Latency": "測試延遲",
@@ -4512,6 +4682,8 @@
"Test selected models": "測試所選模型",
"Testing all enabled channels started. Please refresh to see results.": "測試所有已啟用的渠道已開始。請重新整理以查看結果。",
"Testing...": "測試中...",
+ "Tests are starting...": "正在啟動測試...",
+ "Tests failed": "測試未通過",
"Text": "文字",
"Text description of the desired image": "想要生成圖像的文字描述",
"Text description of the desired video": "想要生成影片的文字描述",
@@ -4530,6 +4702,8 @@
"The binding will complete automatically after authorization": "授權後連結將自動完成",
"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.": "已連結產品用於錢包儲值:當用戶輸入任意金額時,new-api 會基於這個單一 Pancake 產品發起結帳,並按對話覆蓋價格,無需預先建立 $1 / $5 / $10 的 SKU。",
"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.": "已連結店鋪是 new-api 從此管理端建立的所有 Pancake 產品的父容器,包括錢包儲值產品和訂閱套餐產品。一個店鋪通常足夠;只有在確實運營多個 Pancake 目錄時才需要連結不同店鋪。",
+ "The channel will leave review or service and can be edited before resubmission.": "該渠道將退出審核或服務,並可在重新提交前編輯。",
+ "The contribution will be deleted and any linked channel will be removed from service.": "此貢獻將被刪除,任何關聯渠道也會從服務中移除。",
"The deployment node that handled the requests": "處理請求的部署節點",
"The effective domain for Passkey registration. Must match the current domain or be its parent domain.": "用於 Passkey 註冊的有效域。必須與目前域匹配或為其父域。",
"The entered text does not match the required text.": "輸入文字與要求文字不匹配。",
@@ -4537,12 +4711,14 @@
"The exact model identifier as used in API requests.": "API 請求中使用的確切模型標識符。",
"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.": "以下模型存在收費類型衝突(固定價格 vs 比例收費)。確認以繼續更改。",
"The following models in the model redirect have not been added to the \"Models\" list and may fail during invocation due to missing available models:": "模型重新導向裡的下列模型尚未新增到「模型」列表,呼叫時會因為缺少可用模型而失敗:",
+ "The linked contributed channel will be removed from service.": "關聯的貢獻渠道將從服務中移除。",
"The login session that started this Telegram binding is no longer valid.": "發起此 Telegram 綁定的登入工作階段已失效。",
"The mapped upstream model(s)": "映射的上游模型",
"The model that was requested": "被請求的模型",
"The model you're looking for doesn't exist.": "您查找的模型不存在。",
"The name displayed across the application": "在整個套用程式中顯示的名稱",
"The new token will only be shown once. Copy it and store it securely.": "新令牌僅顯示一次。請複製並妥善保存。",
+ "The provider returned no models": "服務商未回傳任何模型",
"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations": "伺服器的公開URL,用於OAuthCallback、Webhook和其他外部整合",
"The requested chat preset does not exist or has been removed.": "請求的聊天預設不存在或已被刪除。",
"The reset request stays disabled until a credit is available.": "沒有可用次數時,重置請求會保持停用。",
@@ -4564,6 +4740,7 @@
"Theme preset": "主題預設",
"Theme Settings": "主題設定",
"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?": "目前有新增和刪除兩類待處理模型,但您只勾選了其中一類。確認僅提交已勾選的部分嗎?",
+ "There are no contributions waiting for review.": "暫無待審核的貢獻。",
"There is a rule for vip billed as premium → use its ratio 0.3": "存在「vip 按 premium 收費」的規則 → 用規則裡的 0.3",
"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.": "這些模型仍然在您的勾選列表中,但上游已不再返回該名稱;僅作為 model_mapping 來源鍵而不會出現在 upstream 列表的別名已從本視圖排除,請在儲存前調整勾選。",
"These toggles affect whether certain request fields are passed through to the upstream provider.": "這些開關控制某些請求欄位是否透傳到上游服務。",
@@ -4610,6 +4787,7 @@
"This site currently has {{count}} models enabled": "本站目前已啟用模型,總計 {{count}} 個",
"This Telegram account is already bound.": "此 Telegram 帳號已綁定。",
"This Telegram binding request has expired or has already been used.": "此 Telegram 綁定要求已過期或已使用。",
+ "This test result is older than 30 minutes. Run all tests again before submitting.": "此測試結果已超過 30 分鐘。請在提交前重新執行所有測試。",
"This tier catches any request that did not match earlier tiers.": "此階梯會兜底處理未匹配前面階梯的請求。",
"this token group": "此令牌分組",
"This Uptime Kuma group will be removed from the list.": "此 Uptime Kuma 分組將從列表中移除。",
@@ -4623,6 +4801,8 @@
"This will delete all": "這將刪除所有",
"This will delete all channel affinity cache entries still in memory.": "這將刪除記憶體中所有的渠道親和性緩存條目。",
"This will delete temporary cache files that have not been used for more than 10 minutes": "這將刪除超過 10 分鐘未使用的臨時緩存檔案",
+ "This will disable all currently enabled models that have no available channels. Continue?": "將停用目前所有沒有可用渠道的已啟用模型。是否繼續?",
+ "This will enable models that were auto-disabled by channel availability and now have recovered channels. Manually disabled models are not changed. Continue?": "僅會啟用先前因渠道可用性被自動停用、且現已恢復可用渠道的模型;不會變更手動停用的模型。是否繼續?",
"This will extend the deployment by the specified hours.": "這將透過指定的小時數延長部署。",
"This will immediately invalidate your existing access token. Any applications or scripts using it will stop working.": "這會立即使現有存取令牌失效。任何正在使用它的應用程式或指令碼都將停止運作。",
"This will permanently delete all manually and automatically disabled channels. This action cannot be undone.": "這將永久刪除所有手動停用和自動停用的渠道。此操作無法撤銷。",
@@ -4773,16 +4953,21 @@
"Total:": "總計:",
"TPM": "TPM",
"Track per-request consumption to power usage analytics. Keeping this on increases database writes.": "追蹤每個請求的消耗,以支援使用情況分析。保持開啟會增加資料庫寫入。",
+ "Track review, availability, and deletion status for every channel.": "追蹤每個渠道的審核、可用性與刪除狀態。",
"Track usage, costs and performance with real-time analytics": "透過實時分析追蹤用量、成本和效能",
"Tracked apps": "已追蹤的套用",
"Tracks current account base limits and additional metered usage on Codex upstream.": "追蹤目前賬號在 Codex 上游的基礎限額與附加收費用量。",
"Trading insights, accounting, advisory": "交易洞察、記賬與財務建議",
"Transfer": "轉移",
+ "Transfer all": "全部轉入",
+ "Transfer amount": "轉入額度",
"Transfer Amount": "轉移金額",
"Transfer failed": "轉賬失敗",
+ "Transfer rewards": "轉入獎勵",
"Transfer Rewards": "轉移獎勵",
"Transfer successful": "轉賬成功",
"Transfer to Balance": "轉移到餘額",
+ "Transfer to wallet": "轉入錢包",
"Translation": "翻譯",
"Transparent Billing": "透明收費",
"Trend": "趨勢",
@@ -4834,6 +5019,9 @@
"Unable to read clipboard": "無法讀取剪貼簿",
"Unauthorized": "未經授權",
"Unauthorized Access": "未經授權的存取",
+ "Unavailable": "不可用",
+ "Unavailable deletion threshold (hours)": "不可用刪除門檻(小時)",
+ "Unavailable since": "不可用開始時間",
"Unbind": "解綁",
"Unbind failed": "解綁失敗",
"Unbound {{provider}}": "已解綁 {{provider}}",
@@ -4861,6 +5049,7 @@
"Untitled": "未命名",
"Untrusted upstream data:": "不受信任的上游數據:",
"Unused": "未使用",
+ "Up to 100 unique models can be tested in one contribution.": "一次貢獻最多可測試 100 個不重複模型。",
"Up to 4 strings that stop generation": "最多 4 個停止生成的字串",
"Update": "更新",
"Update All Balances": "更新所有餘額",
@@ -4895,6 +5084,7 @@
"Updated a vendor": "更新了一個供應商",
"Updated channel {{name}} (ID: {{id}})": "更新渠道 {{name}}(ID: {{id}})",
"Updated daily": "每日更新",
+ "Updated model statuses in batch": "批次更新了模型狀態",
"Updated successfully": "更新成功",
"Updated system setting {{key}}": "修改系統設定 {{key}}",
"Updated user {{username}} (ID: {{id}})": "更新用戶 {{username}}(ID: {{id}})",
@@ -4952,6 +5142,7 @@
"Usage logs": "使用日誌",
"Usage Logs": "使用日誌",
"Usage mode": "使用模式",
+ "Usage reward": "使用獎勵",
"Usage-based": "基於使用量",
"USD": "USD",
"USD Exchange Rate": "美元匯率",
@@ -4978,6 +5169,7 @@
"Use the full-width table to scan prices, then select a row to edit it here.": "先在表格中快速瀏覽價格,然後選擇一行在這裡編輯。",
"Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.": "使用令牌上設定的分組;令牌未設定分組時,使用用戶分組。auto 分組會按自動分組順序從上到下嘗試。",
"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.": "使用定價分組表管理倍率,以及該分組是否出現在建立令牌的下拉框中。",
+ "Use the provider base URL without a model-specific path.": "請使用不含模型專用路徑的服務商基礎 URL。",
"Use this callback URL pattern when registering a custom OAuth provider.": "註冊自訂 OAuth 提供商時使用此回呼 URL 格式。",
"Use this token for API authentication": "使用此令牌進行 API 身份驗證",
"Use your Passkey": "使用您的通行金鑰",
@@ -5001,6 +5193,7 @@
"User Analytics": "用戶統計",
"User Consumption Ranking": "用戶消耗排行",
"User Consumption Trend": "用戶消耗趨勢",
+ "User contribution view": "使用者貢獻檢視",
"User created successfully": "用戶建立成功",
"User dashboard and quota controls.": "用戶儀表板和配額控制。",
"User deleted successfully": "用戶刪除成功",
@@ -5038,8 +5231,10 @@
"Users must wait for a successful drawing before upscales or variations.": "用戶必須等待成功的繪圖完成,才能進行放大或變體。",
"Users of vip, when billed as premium, pay ratio": "vip 分組的用戶,按 premium 收費時,倍率用",
"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.": "用戶只能看到標記為用戶可選的分組。不可選分組仍可由管理員分配。",
+ "Users review this exact content before every first submission or resubmission.": "使用者在首次提交或每次重新提交前都會查看這份確切內容。",
"uses": "使用次數",
"Using the complete global Auto order ({{count}} groups)": "正在使用完整的全域 Auto 順序({{count}} 個分組)",
+ "Validation and submission": "驗證與提交",
"Validity": "有效期",
"Validity Period": "有效期",
"Value": "值",
@@ -5074,6 +5269,7 @@
"Verification scope is missing": "缺少驗證範圍",
"Verify": "驗證",
"Verify and Sign In": "驗證並登入",
+ "Verify every current revision independently before approval.": "審核通過前,請獨立驗證每個目前修訂。",
"Verify routing with Playground or your client": "使用 Playground 或你的用戶端驗證路由",
"Verify Setup": "驗證設定",
"Verify to view channel key": "驗證後查看渠道金鑰",
@@ -5094,6 +5290,7 @@
"View all currently available models": "查看目前可用的所有模型",
"View channel lists and details without secrets.": "查看不含金鑰的渠道列表和詳情。",
"View channel secrets": "查看渠道金鑰",
+ "View contribution details": "查看貢獻詳情",
"View detailed information about this user including balance, usage statistics, and invitation details.": "查看此用戶的詳細資訊,包括餘額、使用統計和邀請詳情。",
"View details": "查看詳情",
"View document": "查看文檔",
@@ -5150,6 +5347,7 @@
"Wallet Management": "錢包管理",
"Wallet management and personal preferences.": "錢包管理和個人偏好設定。",
"Wallet Only": "僅用錢包",
+ "Wallet transfer": "錢包轉入",
"Warning": "警告",
"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.": "警告:基礎 URL 不應以 /v1 結尾。New API 將自動處理它。這可能導致請求失敗。",
"Warning: Disabling 2FA will make your account less secure.": "警告:停用雙重身份驗證將使您的用戶安全性降低。",
@@ -5218,6 +5416,9 @@
"Wire encoding for the embedding vectors": "向量傳輸的編碼格式",
"with conflicts": "有衝突",
"with the API key from your token settings.": "替換為令牌設定中的 API Key。",
+ "Withdraw": "撤回",
+ "Withdraw channel contribution?": "撤回渠道貢獻?",
+ "Withdraw contribution": "撤回貢獻",
"Without additional conditions, only the type above is used for pruning.": "未新增附加條件時,僅使用上方 type 進行清理。",
"Worked example": "完整示例",
"Worker Access Key": "Worker 存取金鑰",
diff --git a/web/src/i18n/locales/zh.json b/web/src/i18n/locales/zh.json
index 848b5b9db446..ea2d9346ddc2 100644
--- a/web/src/i18n/locales/zh.json
+++ b/web/src/i18n/locales/zh.json
@@ -61,6 +61,7 @@
"{{field}} updated to {{value}}": "{{field}} 已更新为 {{value}}",
"{{field}} updated to {{value}} for tag: {{tag}}": "标签「{{tag}}」的 {{field}} 已更新为 {{value}}",
"{{method}} {{route}}": "{{method}} {{route}}",
+ "{{milliseconds}} ms": "{{milliseconds}} 毫秒",
"{{modality}} not supported": "不支持 {{modality}}",
"{{modality}} supported": "支持 {{modality}}",
"{{n}} model(s) selected": "已选 {{n}} 个模型",
@@ -98,6 +99,7 @@
"1. Create an application in your Gotify server": "1. 在您的 Gotify 服务器中创建一个应用程序",
"10 / page": "10 条/页",
"100 / page": "100 条/页",
+ "100 basis points equals 1% of billed quota.": "100 个基点等于计费额度的 1%。",
"14 Days": "14 天",
"192.168.1.1
10.0.0.0/8": "192.168.1.1
10.0.0.0/8",
"1M": "1 个月",
@@ -118,9 +120,11 @@
"7 days ago": "7 天前",
"80,443,8080": "80,443,8080",
"A billing multiplier. Lower ratios mean lower API call costs.": "计费乘数,倍率越低,API 调用费用越低。",
+ "A contribution can contain at most 100 models": "一次贡献最多可包含 100 个模型",
"A focused home for keys, balance, routing, and service health.": "集中展示密钥、余额、路由和服务健康状态。",
"About": "关于",
"About {{days}} days left": "约剩 {{days}} 天",
+ "Accept the channel contribution agreement": "同意渠道贡献协议",
"Accept Unpriced Models": "接受未定价模型",
"Accepts a JSON array of model identifiers that support the Imagine API.": "接受支持 Imagine API 的模型标识符的 JSON 数组。",
"Accepts comma-separated status codes and inclusive ranges.": "接受逗号分隔的状态码和包含性范围。",
@@ -167,6 +171,7 @@
"Add a new model to the system by providing the necessary information.": "通过提供必要信息向系统添加新模型。",
"Add a new user by providing necessary info.": "通过提供必要信息来添加新用户。",
"Add a new vendor to the system": "向系统添加新供应商",
+ "Add an allowed group": "添加允许的分组",
"Add an extra layer of security to your account": "为您的账户添加额外的安全层",
"Add and submit": "添加后提交",
"Add Announcement": "添加公告",
@@ -244,6 +249,8 @@
"Administer user accounts and roles.": "管理用户账户和角色。",
"Administrator account": "管理员账户",
"Administrator username": "管理员用户名",
+ "Administrator verification": "管理员验证",
+ "Administrator verification started": "管理员验证已开始",
"Advance next reset time": "推进下次重置时间",
"Advanced": "高级",
"Advanced Configuration": "高级配置",
@@ -272,6 +279,12 @@
"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.": "聚合 50+ AI 提供商于统一 API 之后。轻松管理访问、追踪成本、弹性扩展。",
"Aggregation bucket": "聚合时间桶",
"AGPL v3.0 License": "AGPL v3.0 协议",
+ "Agreement content is required": "协议内容为必填项",
+ "Agreement Markdown": "协议 Markdown",
+ "Agreement version": "协议版本",
+ "Agreement version is required": "协议版本为必填项",
+ "Agreement version must not exceed 64 characters": "协议版本不能超过 64 个字符",
+ "Agreement version: {{version}}": "协议版本:{{version}}",
"AI Application Infrastructure Foundation": "人工智能应用基座",
"AI model testing environment": "AI模型测试环境",
"AI models": "AI 模型",
@@ -287,6 +300,7 @@
"All API tokens": "全部 API 密钥",
"All categories": "全部分类",
"All conditions must match before this tier is used.": "所有条件都匹配后才会使用此阶梯。",
+ "All contributions": "全部贡献",
"All edits are overwrite operations. Leave fields empty to keep current values unchanged.": "所有编辑都是覆盖操作。留空字段将保持当前值不变。",
"All files exceed the maximum size.": "所有文件都超过最大尺寸。",
"All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.": "所有分组名称都在这里管理。倍率在调用按该分组计费时生效;充值倍率对所属该分组的用户生效。",
@@ -302,6 +316,7 @@
"All Sync Status": "所有同步状态",
"All systems operational": "所有系统正常运行",
"All Tags": "所有标签",
+ "All tests passed": "所有测试均已通过",
"All Types": "所有类型",
"All upstream data is trusted": "所有上游数据均受信任",
"All users": "全部用户",
@@ -341,6 +356,8 @@
"Allow using models without price configuration": "允许使用未配置价格的模型",
"Allow wallet balance after quota used up": "额度用尽后允许使用钱包余额",
"Allowed": "允许",
+ "Allowed channel types": "允许的渠道类型",
+ "Allowed groups": "允许的分组",
"Allowed Origins": "允许的 Origins",
"Allowed Ports": "允许的端口",
"Already have an account?": "已有账户?",
@@ -378,6 +395,8 @@
"API Addresses": "API 地址",
"API Base URL (Important: Not Chat API) *": "API 基础 URL (重要:非聊天 API) *",
"API Base URL *": "API 基础 URL *",
+ "API endpoint": "API 端点",
+ "API endpoint is too long": "API 端点过长",
"API Endpoints": "API 端点",
"API Info": "API 信息",
"API info added. Click \"Save Settings\" to apply.": "API 信息已添加。点击 \"保存设置\" 以应用。",
@@ -397,8 +416,10 @@
"API key from the provider": "来自提供商的 API 密钥",
"API key is loading, please try again in a moment": "API 密钥正在加载,请稍后再试",
"API key is required": "需要 API 密钥",
+ "API key is too long": "API 密钥过长",
"API Key mode (does not support batch creation)": "API Key 模式(不支持批量创建)",
"API Key mode: use APIKey|Region": "API Key 模式:使用 APIKey|Region",
+ "API key must be a single line": "API 密钥必须为单行内容",
"API Key updated successfully": "API 密钥更新成功",
"API Keys": "API 密钥",
"API Private Key": "API 私钥",
@@ -420,6 +441,7 @@
"appended": "已追加",
"Application": "应用",
"Applied {{name}} pricing to {{count}} models": "已将 {{name}} 的定价应用到 {{count}} 个模型",
+ "Applied automatically when a contribution is approved.": "贡献审核通过后自动应用。",
"Applied upstream model changes to {{count}} channels": "对 {{count}} 个渠道应用上游模型变更",
"Applied upstream model changes to channel (ID: {{id}})": "对渠道(ID: {{id}})应用上游模型变更",
"Applies to custom completion endpoints. JSON map of model → ratio.": "适用于自定义补全端点。模型 → 比例的 JSON 映射。",
@@ -430,6 +452,11 @@
"Apply reset": "执行重置",
"Apply Sync": "应用同步",
"Applying...": "正在应用...",
+ "Approval is bound to this administrator test run ID.": "审核通过操作将绑定此管理员测试运行 ID。",
+ "Approve": "通过",
+ "Approved": "已通过",
+ "Approved channel tag": "审核通过后的渠道标签",
+ "Approved channels are created with these routing and removal defaults.": "审核通过的渠道将使用这些路由和删除默认值创建。",
"Approx.": "约",
"apps": "个应用",
"Apps": "应用",
@@ -460,6 +487,7 @@
"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 is selected": "已选择至少一个模型",
"At least one model regex pattern is required": "至少需要一个模型正则匹配模式",
"At least one valid key source is required": "至少需要一个有效的密钥来源",
"Attach": "附加",
@@ -493,6 +521,7 @@
"auth.resetPasswordConfirm.description": "确认重置请求以生成新密码。",
"auth.resetPasswordConfirm.retry": "重试 ({{seconds}}s)",
"auth.resetPasswordConfirm.success": "您的密码已成功重置",
+ "Authenticated channel contribution and reward workspace.": "需要登录的渠道贡献与奖励工作区。",
"Authentication": "身份验证",
"Authentication Method": "认证方式",
"Authenticator code": "身份验证器代码",
@@ -513,12 +542,16 @@
"Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.": "自动在可用时协商 HTTP/2。HTTP/1.1 会在并发时使用多条保持连接的连接。",
"Auto refresh": "自动刷新",
"Auto Sync Upstream Models": "自动同步上游模型",
+ "Auto-disable models with no available channels": "无可用渠道时自动禁用模型",
"Auto-disable rules": "自动禁用规则",
"Auto-disable status codes": "自动禁用状态码",
"Auto-disable-enabled channels only": "仅测试已开启自动禁用的渠道",
"Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.": "此模式仅探测已开启自动禁用且未被手动禁用的渠道。",
+ "Auto-disabled": "自动禁用",
"Auto-discover": "自动发现",
"Auto-discovers endpoints from the provider": "自动从提供商发现端点",
+ "Auto-enable models disabled by this setting when a channel recovers": "可用渠道恢复时自动启用由此设置禁用的模型",
+ "Auto-enabled": "自动启用",
"Auto-fill when one field exists and another is missing": "在一个字段有值、另一个缺失时自动补齐",
"Auto-refreshing every {{seconds}}s": "每 {{seconds}} 秒自动刷新",
"Auto-retry status codes": "自动重试状态码",
@@ -535,8 +568,9 @@
"Available disk space": "可用磁盘空间",
"Available Models": "可用模型",
"Available reset credits": "可用重置次数",
+ "Available reward": "可用奖励",
"Available Rewards": "可用奖励",
- "Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.": "可用变量:{{provider}}、{{field}}、{{op}}、{{required}}、{{current}},以及 {{current.roles}} 等路径变量。",
+ "Available: {{amount}}": "可用:{{amount}}",
"Average latency": "平均延迟",
"Average latency, TTFT, and success rate by group": "各分组的平均延迟、首 Token 延迟和成功率",
"Average latency, TTFT, TPS, and success rate": "平均延迟、TTFT、TPS 和成功率",
@@ -599,10 +633,12 @@
"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed": "批量检测完成:渠道 {{channels}} 个,新增 {{add}} 个,删除 {{remove}} 个,失败 {{fails}} 个",
"Batch detection failed": "批量检测失败",
"Batch disable failed": "批量禁用失败",
+ "Batch Disable Models with No Channels": "一键禁用无可用渠道的模型",
"Batch Edit": "批量编辑",
"Batch edit all channels with this tag. Leave fields empty to keep current values.": "批量编辑带有此标签的所有渠道。留空字段以保留当前值。",
"Batch Edit by Tag": "按标签批量编辑",
"Batch enable failed": "批量启用失败",
+ "Batch Enable Models with Recovered Channels": "一键启用渠道已恢复的模型",
"Batch Operations": "批量操作",
"Batch processing failed": "批量处理失败",
"Batch set tag for {{count}} channels": "批量为 {{count}} 个渠道设置标签",
@@ -743,6 +779,7 @@
"Change To": "更改为",
"Changed Fields": "变更字段",
"Changes are written to the settings draft on save.": "保存后会写入设置草稿。",
+ "Changing the version requires acceptance on the next submission.": "更改版本后,用户下次提交时必须重新同意。",
"Changing...": "修改中...",
"Channel": "渠道",
"Channel {{name}}": "渠道 {{name}}",
@@ -751,6 +788,10 @@
"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.": "渠道亲和性会基于从请求上下文或 JSON Body 提取的 Key,优先复用上一次成功的渠道。",
"Channel Affinity: Upstream Cache Hit": "渠道亲和性:上游缓存命中",
"Channel consistency repaired: {{success}} succeeded, {{fails}} failed": "渠道一致性修复完成:{{success}} 个成功,{{fails}} 个失败",
+ "Channel Contribution Agreement": "渠道贡献协议",
+ "Channel Contribution Review": "渠道贡献审核",
+ "Channel contribution settings": "渠道贡献设置",
+ "Channel Contributions": "渠道贡献",
"Channel copied successfully": "渠道复制成功",
"Channel created successfully": "渠道创建成功",
"Channel deleted successfully": "渠道删除成功",
@@ -764,9 +805,14 @@
"Channel key unlocked": "渠道密钥已解锁",
"Channel Management": "渠道管理",
"Channel models": "渠道模型",
+ "Channel name": "渠道名称",
"Channel name is required": "渠道名称是必填的",
+ "Channel name must not exceed 128 characters": "渠道名称不能超过 128 个字符",
+ "Channel tag is required": "渠道标签为必填项",
+ "Channel tag must not exceed 64 characters": "渠道标签不能超过 64 个字符",
"Channel test completed": "渠道测试完成",
"Channel test mode": "渠道测试模式",
+ "Channel type": "渠道类型",
"Channel type is required": "渠道类型是必填的",
"Channel updated successfully": "渠道更新成功",
"Channel-specific settings (JSON format)": "渠道特定设置(JSON 格式)",
@@ -956,6 +1002,7 @@
"Conditions (AND)": "条件(AND)",
"Confidence": "置信度",
"Configuration": "配置",
+ "Configuration changes invalidate the previous test result.": "配置变更会使之前的测试结果失效。",
"Configuration File": "配置文件",
"Configuration for Creem payment integration": "Creem 支付集成的配置",
"Configuration for Epay payment integration": "Epay 支付集成的配置",
@@ -991,6 +1038,7 @@
"Configure Waffo payment aggregation platform integration": "配置 Waffo 支付聚合平台集成",
"Configure your account behavior preferences": "配置您的账户行为偏好",
"Configure your account preferences and integrations": "配置您的账户偏好和集成",
+ "Configured": "已配置",
"Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.": "保存为 PayMethods JSON。type 值决定点击后使用哪个支付流程:stripe 走 Stripe,waffo_pancake 走 Waffo Pancake,其他值作为 Epay 的 type 参数提交。",
"Configured routes and latency checks": "已配置路由和延迟检测",
"Confirm": "确认",
@@ -1029,6 +1077,7 @@
"Connect through OpenAI, Claude, Gemini, and other compatible API routes": "通过 OpenAI、Claude、Gemini 以及其他兼容 API 路由接入",
"Connected to io.net service normally.": "已正常连接 io.net 服务。",
"Connection closed": "连接已关闭",
+ "Connection details": "连接详情",
"Connection error": "连接错误",
"Connection failed": "连接失败",
"Connection info detected in clipboard": "检测到剪贴板中的连接信息",
@@ -1059,7 +1108,26 @@
"Continue with OIDC": "使用 OIDC 继续",
"Continue with Telegram": "使用 Telegram 继续",
"Continue with WeChat": "使用 微信 继续",
+ "Continuous failure time before automatic deletion.": "连续不可用达到此时长后自动删除。",
"Contract review, compliance, summarisation": "合同审阅、合规与摘要",
+ "Contribute": "贡献",
+ "Contribute a channel": "贡献渠道",
+ "Contribution approved": "贡献已通过",
+ "Contribution channel connection settings are read-only here. Submit sensitive changes through channel contribution review; only tag, priority, and weight can be edited.": "贡献渠道的连接配置在此处为只读。如需修改敏感配置,请通过渠道贡献复审提交;此处仅可编辑标签、优先级和权重。",
+ "Contribution deleted": "贡献已删除",
+ "Contribution details": "贡献详情",
+ "Contribution details are incomplete": "贡献详情不完整",
+ "Contribution draft saved": "贡献草稿已保存",
+ "Contribution eligibility": "贡献资格",
+ "Contribution rejected": "贡献已驳回",
+ "Contribution review": "贡献审核",
+ "Contribution settings saved": "贡献设置已保存",
+ "Contribution settings unavailable": "贡献设置不可用",
+ "Contribution submitted for review": "贡献已提交审核",
+ "Contribution withdrawn": "贡献已撤回",
+ "Contributions will appear here when users create drafts.": "用户创建草稿后,贡献会显示在这里。",
+ "Contributor": "贡献者",
+ "Control eligibility, routing defaults, health removal, rewards, and the agreement.": "管理贡献资格、路由默认值、健康删除、奖励和协议。",
"Control which models are exposed and which groups may use them.": "控制对外暴露的模型,以及哪些分组可以使用它们。",
"Controls how much the model thinks before answering": "控制模型回答前的推理深度",
"Controls randomness and creativity": "控制输出的随机性和创造性",
@@ -1198,6 +1266,7 @@
"Current Billing": "当前计费",
"Current Cache Size": "当前缓存大小",
"Current domain": "当前域名",
+ "Current draft is saved": "当前草稿已保存",
"Current email: {{email}}. Enter a new email to change.": "当前邮箱:{{email}}。输入新邮箱以更改。",
"Current key": "当前密钥",
"Current legacy JSON is invalid, cannot append": "当前旧格式 JSON 不合法,无法追加模板",
@@ -1206,6 +1275,7 @@
"Current Password": "当前密码",
"Current Price": "当前价格",
"Current quota": "当前额度",
+ "Current reward rate": "当前奖励比例",
"Current Value": "当前值",
"Current version": "当前版本",
"Current:": "当前:",
@@ -1270,6 +1340,7 @@
"Default Bearer": "默认 Bearer",
"Default Collapse Sidebar": "默认折叠侧边栏",
"Default consumption chart": "默认消耗分布图",
+ "Default is 0 until routing is intentionally enabled.": "默认为 0,直到明确启用路由。",
"Default Max Tokens": "默认最大 Token 数",
"Default model call chart": "默认模型调用图",
"Default range": "默认范围",
@@ -1295,6 +1366,7 @@
"Delete all stale": "删除所有失联",
"Delete Auto-Disabled": "删除自动禁用",
"Delete Channel": "删除渠道",
+ "Delete channel contribution?": "删除渠道贡献?",
"Delete Channels?": "删除渠道?",
"Delete condition": "删除条件",
"Delete Condition": "删除条件",
@@ -1359,6 +1431,7 @@
"Describe": "图生文",
"Describe this model...": "描述此模型...",
"Describe this vendor...": "描述此供应商...",
+ "Describe what must be corrected": "说明需要修正的内容",
"Description": "说明信息",
"Description is required": "描述为必填项",
"Designed and Developed by": "设计与开发",
@@ -1385,6 +1458,7 @@
"Disable": "禁用",
"Disable 2FA": "禁用 2FA",
"Disable All": "禁用全部",
+ "Disable Models with No Channels?": "禁用无可用渠道的模型?",
"Disable on failure": "失败时禁用",
"Disable selected channels": "禁用选定的渠道",
"Disable selected models": "禁用选定的模型",
@@ -1457,6 +1531,7 @@
"Downgrade to pre-purchase group": "降级到购买前分组",
"Downgrade to this group after the subscription expires": "订阅过期后降级到该分组",
"Download": "下载",
+ "Draft": "草稿",
"Drag {{group}} to reorder": "拖动 {{group}} 以重新排序",
"Draw": "绘图",
"Drawing": "绘图",
@@ -1488,7 +1563,6 @@
"e.g. my-gitlab": "例如:my-gitlab",
"e.g. New API Console": "例如,New API 控制台",
"e.g. openid profile email": "例如:openid profile email",
- "e.g. Requires level {{required}}; your current level is {{current}}": "例如:需要等级 {{required}};你当前的等级是 {{current}}",
"e.g. Suitable for light usage": "例如:适合轻度使用",
"e.g. This request does not meet access policy": "例如:该请求不满足准入策略",
"e.g., 0.95": "例如,0.95",
@@ -1532,10 +1606,12 @@
"Edit": "编辑",
"Edit {{title}}": "编辑{{title}}",
"Edit all channels with tag:": "编辑所有带有标签的渠道:",
+ "Edit and resubmit": "编辑并重新提交",
"Edit Announcement": "编辑公告",
"Edit API Shortcut": "编辑 API 快捷方式",
"Edit billing ratios and user-selectable groups in one table.": "在一个表格中编辑计费倍率和用户可选分组。",
"Edit Channel": "编辑渠道",
+ "Edit channel contribution": "编辑渠道贡献",
"Edit channel routing": "编辑渠道路由",
"Edit chat preset": "编辑聊天预设",
"Edit discount tier": "编辑折扣档位",
@@ -1596,6 +1672,7 @@
"Enable io.net model deployment service in console": "在控制台启用 io.net 模型部署服务",
"Enable LinuxDO OAuth": "启用 LinuxDO OAuth",
"Enable model performance metrics": "启用模型性能指标",
+ "Enable Models with Recovered Channels?": "启用渠道已恢复的模型?",
"Enable OIDC": "启用 OIDC",
"Enable or disable this channel": "启用或禁用此渠道",
"Enable or disable this model": "启用或禁用此模型",
@@ -1624,6 +1701,7 @@
"Enabled all channels with tag: {{tag}}": "已启用标签「{{tag}}」下的所有渠道",
"Enabled channels with tag {{tag}}": "启用标签为 {{tag}} 的渠道",
"Enabled Status": "启用状态",
+ "Enabling this setting immediately disables all currently enabled models with no available channels. Turning it off later will not automatically re-enable those models. Continue?": "启用此设置后,将立即禁用所有没有可用渠道的已启用模型。以后关闭此设置也不会自动重新启用这些模型。是否继续?",
"Enabling...": "正在启用...",
"Encourages introducing new topics": "鼓励引入新话题",
"Encourages new topics": "鼓励讨论新话题",
@@ -1635,6 +1713,7 @@
"Endpoint": "端点",
"Endpoint config": "端点配置",
"Endpoint Configuration": "端点配置",
+ "Endpoint type": "端点类型",
"Endpoint Type": "端点类型",
"Endpoint, provider-specific settings, and credentials.": "接口地址、供应商专属设置和凭据。",
"Endpoint:": "端点:",
@@ -1650,8 +1729,10 @@
"Enter a positive integer": "请输入正整数",
"Enter a positive or negative amount to adjust the quota": "输入正数或负数以调整配额",
"Enter a react-icons component name. Invalid names show no icon.": "输入 react-icons 组件名。无法解析的名称不会显示图标。",
+ "Enter a valid API endpoint": "请输入有效的 API 端点",
"Enter a valid email or leave blank": "请输入有效的邮箱地址或留空",
"Enter a value and press Enter": "输入值并按回车键",
+ "Enter a whole number within the allowed range": "请输入允许范围内的整数",
"Enter amount in {{currency}}": "输入金额({{currency}})",
"Enter amount in tokens": "输入额度(Token)",
"Enter announcement content (supports Markdown & HTML)": "输入公告内容(支持 Markdown 和 HTML)",
@@ -1689,6 +1770,7 @@
"Enter password (8-20 characters)": "输入密码(8-20 个字符)",
"Enter quota in {{currency}}": "输入 {{currency}} 额度",
"Enter quota in tokens": "输入令牌配额",
+ "Enter reward quota": "输入奖励额度",
"Enter secret key": "输入密钥",
"Enter system prompt (user prompt takes priority)": "输入系统提示词(用户提示词优先)",
"Enter tag name (optional)": "输入标签名称(可选)",
@@ -1699,6 +1781,7 @@
"Enter the full URL of your Gotify server": "输入您的 Gotify 服务器的完整 URL",
"Enter the knowledge base ID": "输入知识库 ID",
"Enter the path before /suno, usually just the domain": "输入 /suno 之前的路径,通常只是域名",
+ "Enter the provider API key": "输入服务商 API 密钥",
"Enter the quota amount in {{currency}}": "输入 {{currency}} 的配额数量",
"Enter the quota amount in tokens": "输入令牌配额数量",
"Enter the verification code": "输入验证码",
@@ -1738,8 +1821,8 @@
"Error Type (optional)": "错误类型(可选)",
"Estimated cost": "预计成本",
"Estimated quota cost": "估算配额费用",
- "Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.": "根据提供商返回的用户信息字段执行策略判断。条件和嵌套分组支持 and/or 逻辑。",
"Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.": "定价表中的每个分组名可用在两个地方:用户身上(用户分组,由管理员分配)和令牌身上(令牌分组,创建令牌时选择)。同一批名字,两种不同职责。",
+ "Every model has administrator pricing": "所有模型均已配置管理员价格",
"Every other device will lose access immediately. This device will remain signed in.": "其他所有设备将立即失去访问权限,当前设备将保持登录。",
"Everything configured for this group, in one place.": "该分组的全部配置,一处看全。",
"Exact": "精确",
@@ -1802,6 +1885,9 @@
"Failed to {{action}} user": "{{action}}用户失败",
"Failed to adjust quota": "调整额度失败",
"Failed to apply overwrite.": "应用覆盖失败。",
+ "Failed to approve contribution": "贡献审核通过失败",
+ "Failed to batch disable models": "批量禁用模型失败",
+ "Failed to batch enable models": "批量启用模型失败",
"Failed to bind email": "绑定邮箱失败",
"Failed to change password": "修改密码失败",
"Failed to check for updates": "检查更新失败",
@@ -1827,6 +1913,7 @@
"Failed to delete API key": "删除API密钥失败",
"Failed to delete API keys": "删除API密钥失败",
"Failed to delete channel": "删除渠道失败",
+ "Failed to delete contribution": "删除贡献失败",
"Failed to delete disabled channels": "删除已禁用渠道失败",
"Failed to delete failed models": "删除失败模型失败",
"Failed to delete group": "删除分组失败",
@@ -1864,6 +1951,10 @@
"Failed to load": "加载失败",
"Failed to load API keys": "加载 API 密钥失败",
"Failed to load billing history": "加载计费历史失败",
+ "Failed to load contribution": "加载贡献失败",
+ "Failed to load contribution rewards": "加载贡献奖励失败",
+ "Failed to load contribution settings": "加载贡献设置失败",
+ "Failed to load contributions": "加载贡献列表失败",
"Failed to load enabled models": "获取启用模型失败",
"Failed to load home page content": "加载首页内容失败",
"Failed to load image": "无法加载图像",
@@ -1886,6 +1977,7 @@
"Failed to refresh credential": "刷新凭证失败",
"Failed to regenerate backup codes": "重新生成备份代码失败",
"Failed to register Passkey": "注册 Passkey 失败",
+ "Failed to reject contribution": "驳回贡献失败",
"Failed to remove Passkey": "移除 Passkey 失败",
"Failed to repair channel consistency": "修复渠道一致性失败",
"Failed to reset 2FA": "重置 2FA 失败",
@@ -1895,6 +1987,8 @@
"Failed to save": "保存失败",
"Failed to save announcements": "保存公告失败",
"Failed to save API info": "保存 API 信息失败",
+ "Failed to save contribution draft": "保存贡献草稿失败",
+ "Failed to save contribution settings": "保存贡献设置失败",
"Failed to save FAQ": "保存 FAQ 失败",
"Failed to save Uptime Kuma groups": "保存 Uptime Kuma 组失败",
"Failed to search API keys": "搜索 API 密钥失败",
@@ -1911,16 +2005,19 @@
"Failed to start Discord login": "启动 Discord 登录失败",
"Failed to start GitHub login": "启动 GitHub 登录失败",
"Failed to start LinuxDO login": "启动 LinuxDO 登录失败",
+ "Failed to start model tests": "启动模型测试失败",
"Failed to start OIDC login": "启动 OIDC 登录失败",
"Failed to start Passkey login": "无法启动 Passkey 登录",
"Failed to start Passkey registration": "启动 Passkey 注册失败",
"Failed to start Telegram binding": "启动 Telegram 绑定失败",
"Failed to start testing all channels": "无法开始测试所有渠道",
"Failed to start verification": "启动验证失败",
+ "Failed to submit contribution": "提交贡献失败",
"Failed to sync prices": "同步价格失败",
"Failed to sync ratios": "同步比率失败",
"Failed to test all channels": "无法测试所有渠道",
"Failed to test channel": "测试渠道失败",
+ "Failed to transfer rewards": "转入奖励失败",
"Failed to update all balances": "无法更新所有余额",
"Failed to update API key": "更新 API 密钥失败",
"Failed to update API key status": "更新 API 密钥状态失败",
@@ -1935,7 +2032,9 @@
"Failed to update settings": "无法更新设置",
"Failed to update tag": "更新标签失败",
"Failed to update user": "更新用户失败",
+ "Failed to withdraw contribution": "撤回贡献失败",
"Failure keywords": "失败关键词",
+ "Failure since": "失败开始时间",
"Fair": "公平",
"Fallback": "兜底",
"Fallback base URL": "兜底 Base URL",
@@ -1955,9 +2054,12 @@
"Fetch available models for:": "获取可用模型:",
"Fetch available models from upstream": "从上游获取可用模型",
"Fetch from Upstream": "从上游获取",
+ "Fetch models": "获取模型",
"Fetch Models": "获取模型",
+ "Fetch models or enter model IDs": "获取模型或输入模型 ID",
"Fetched {{count}} model(s) from upstream": "从上游获取了 {{count}} 个模型",
"Fetched {{count}} models": "已获取 {{count}} 个模型",
+ "Fetched and saved {{count}} models": "已获取并保存 {{count}} 个模型",
"Fetching prefill groups...": "正在获取预填充分组...",
"Fetching upstream prices...": "正在获取上游价格...",
"Fetching upstream ratios...": "正在获取上游比例...",
@@ -1978,10 +2080,6 @@
"Fill in the following info to create a new subscription plan": "填写以下信息创建新的订阅套餐",
"Fill Related Models": "填入相关模型",
"Fill Template": "填入模板",
- "Fill template: level and active": "填充模板:等级和激活状态",
- "Fill template: level message": "填充模板:等级提示",
- "Fill template: organization message": "填充模板:组织提示",
- "Fill template: organization or role": "填充模板:组织或角色",
"Fill Templates": "填充模板",
"Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.": "填写客户端请求体里的完整 model 值,例如 gpt-4o 或 gemini-2.5-flash。多个模型用英文逗号分隔。",
"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format": "仅为使用 OpenAI 格式的 Gemini/Vertex 渠道填充 thoughtSignature",
@@ -2092,6 +2190,7 @@
"Full Code": "完整代码",
"Full input length": "完整输入长度",
"Full layout": "全屏布局",
+ "Full model test started": "全模型测试已开始",
"Full width": "全宽",
"Function calling": "函数调用",
"Functions": "函数",
@@ -2122,7 +2221,9 @@
"Get started": "开始使用",
"Get Started": "开始使用",
"GitHub": "GitHub",
+ "Give the contributor a clear reason they can address before resubmitting.": "请向贡献者说明可在重新提交前修正的明确原因。",
"Give the group a recognizable name and optional description.": "为该分组提供一个可识别的名称和可选的描述。",
+ "Give this contribution a recognizable name": "为此贡献填写易识别的名称",
"Give this group a recognizable name.": "为此分组提供一个可识别的名称。",
"Global configuration and administrative tools.": "全局配置和管理工具。",
"Global Coverage": "全球覆盖",
@@ -2166,6 +2267,7 @@
"Group details": "分组详情",
"Group identifier": "分组标识符",
"Group is required": "组是必需的",
+ "Group must not exceed 64 characters": "分组不能超过 64 个字符",
"Group name": "分组名称",
"Group Name": "分组名称",
"Group name cannot be changed when editing.": "编辑时无法更改组名称。",
@@ -2205,6 +2307,8 @@
"Header Value (supports string or JSON mapping)": "请求头值(支持字符串或 JSON 映射)",
"header. Anthropic-formatted endpoints accept the": " 请求头。Anthropic 格式的端点也接受",
"Health": "健康",
+ "Health check interval (minutes)": "健康检查间隔(分钟)",
+ "Health checks continue while the contributed channel is active.": "贡献渠道处于活动状态时会持续进行健康检查。",
"Healthy": "正常",
"Hidden": "屏蔽",
"Hidden — verify to reveal": "隐藏 — 验证以显示",
@@ -2224,6 +2328,7 @@
"High-risk status code retry risk check 4": "我自愿承担系统稳定性风险:本人知晓该操作可能导致客户端严重超时及服务崩溃。若因本人开启此功能导致请求积压或服务不可用,后果由本人自行承担。",
"High-risk status code retry risk disclaimer": "### ⚠️ 高危操作:504/524 状态码重试风险告知与免责声明\n\n本项目默认对 `400`(请求错误)、`504`(网关超时)和 `524`(CDN 超时)状态码不进行重试。504 和 524 错误通常意味着**请求已成功送达上游 AI 服务,且上游正在处理,但因上游处理时间过长导致连接断开**。这通常说明超时源于上游服务瓶颈。\n\n开启对此类超时状态码的重定向/重试属于**极高风险操作**。在开启该功能前,您必须仔细阅读并知悉以下严重后果:\n\n#### 一、核心风险告知(请仔细阅读)\n\n1. 💸 双重/多重计费风险:绝大多数 AI 上游厂商对于已经开始处理但因网络原因中断(504/524)的请求**依然会进行扣费**。此时若触发重试,将会向上游发起全新请求,导致您被**双重甚至多重计费**。\n2. ⏳ 客户端严重超时:单次请求已经触发超时,叠加重试机制将会使总请求耗时成倍增加,导致您的最终客户端(或调用方)出现严重甚至完全无法接受的超时现象。\n3. 💥 请求积压与系统崩溃风险:强制重试超时请求会长时间占用系统线程和连接数。在高并发场景下,这会导致严重的**请求积压**,进而耗尽系统资源,引发雪崩效应,导致您的整个代理服务崩溃。\n\n#### 二、风险确认声明\n\n如果您坚持开启该功能,即代表您作出以下确认:",
"Higher priority channels are selected first": "优先级更高的渠道优先被选中",
+ "Higher values are selected first.": "数值越高越优先选择。",
"Historical Usage": "历史使用情况",
"History of MjProxy-style image tasks.": "MjProxy 风格图像任务历史。",
"Hit criteria: If cached tokens exist in usage, it counts as a hit.": "命中判定:usage 中存在 cached tokens 即视为命中。",
@@ -2245,6 +2350,7 @@
"How It Works": "工作流程",
"How model mapping works": "模型映射如何工作",
"How much to charge for each US dollar of balance (Epay)": "每美元余额(Epay)的收费金额",
+ "How often contributed channels are checked.": "贡献渠道的检查频率。",
"How this model name should match requests": "此模型名称应如何匹配请求",
"How to deliver the resulting image": "图像结果的返回方式",
"How to get an io.net API Key": "如何获取 io.net API 密钥",
@@ -2280,6 +2386,7 @@
"https://your-server.example.com": "https://your-server.example.com",
"Human-readable name shown to users during Passkey prompts.": "在 Passkey 提示期间向用户显示的人类可读名称。",
"I confirm enabling high-risk retry": "我确认开启高危重试",
+ "I have read and agree to": "我已阅读并同意",
"I have read and agree to the": "我已阅读并同意",
"I have read and understood the above compliance reminder": "我已阅读并理解上述合规提醒",
"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.": "我已阅读并理解上述合规提醒,确认相关法律风险,并确认承担因部署、运营和收费行为产生的法律责任。",
@@ -2348,6 +2455,7 @@
"Input tokens": "输入 token",
"Input Tokens": "输入 Token",
"Inset": "内嵌",
+ "Inspect drafts, approved channels, rejected revisions, and health removals.": "查看草稿、已通过渠道、已驳回修订和健康删除记录。",
"Inspect requests, errors, and billing details": "查看请求、错误和计费详情",
"Inspect user prompts": "检查用户提示",
"Instance": "实例",
@@ -2456,9 +2564,13 @@
"Last 30 days uptime": "近 30 天可用率",
"Last active {{time}} · Expires {{expires}}": "最后活跃于 {{time}} · 到期时间 {{expires}}",
"Last check time": "上次检测时间",
+ "Last checked": "上次检查",
"Last detected addable models": "上次检测到可加入模型",
+ "Last error": "最近错误",
+ "Last failure": "最近失败",
"Last Login": "最后登录",
"Last Seen": "最后上报",
+ "Last success": "最近成功",
"Last Tested": "上次测试",
"Last updated:": "上次更新时间:",
"Last Used": "最后使用时间",
@@ -2475,6 +2587,7 @@
"Learn more": "了解更多",
"Learn more:": "了解更多:",
"Leave": "离开",
+ "Leave blank to keep the current key": "留空以保留当前密钥",
"Leave blank to keep the existing credential": "留空以保留现有凭证",
"Leave blank to keep the existing key": "留空以保留现有密钥",
"Leave blank unless rotating the secret": "除非正在轮换密钥,否则留空",
@@ -2505,6 +2618,7 @@
"Less than or equal": "小于等于",
"Less Than or Equal": "小于等于",
"License": "许可证",
+ "Lifetime earned": "累计获得",
"Light": "浅色",
"Lightning Fast": "极速",
"Limit period": "限制周期",
@@ -2593,6 +2707,7 @@
"Manual Disabled": "手动禁用",
"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).": "将用户信息响应中的字段映射到本地用户属性。支持嵌套路径(例如 ocs.data.id)。",
"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.": "将模型标识符映射到 Gemini API 版本。当未找到特定匹配项时,将应用 `default` 条目。",
+ "Map public model IDs to the provider model IDs when needed.": "需要时可将公开模型 ID 映射到服务商模型 ID。",
"Map request model names to actual provider model names (JSON format)": "将请求模型名称映射到实际提供商模型名称 (JSON 格式)",
"Map response status codes (JSON format)": "映射响应状态码(JSON 格式)",
"Map upstream status codes to different codes": "将上游状态码映射到不同的代码",
@@ -2672,6 +2787,7 @@
"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.": "在下方创建新的配对,或继续向下选择已有配对。准备好后点击保存。",
"Minute": "分钟",
"minutes": "分钟",
+ "Missing": "缺失",
"Missing code": "缺少代码",
"Missing Models": "缺失的模型",
"Missing user data from Passkey login response": "Passkey 登录响应中缺少用户数据",
@@ -2701,6 +2817,7 @@
"Model enabled successfully": "模型启用成功",
"Model fixed pricing": "模型固定定价",
"Model Group": "模型分组",
+ "Model health": "模型健康状态",
"Model Limits": "模型限制",
"Model Mapping": "模型映射",
"Model Mapping (JSON)": "模型映射 (JSON)",
@@ -2786,6 +2903,7 @@
"Move {{group}} up": "将 {{group}} 上移",
"Move a request header": "移动请求头",
"Move affiliate rewards to your main balance": "将推广奖励转移到您的主余额",
+ "Move available contribution rewards into your wallet balance.": "将可用贡献奖励转入钱包余额。",
"Move fallback to end": "兜底移到最后",
"Move Field": "移动字段",
"Move Header": "移动请求头",
@@ -2818,6 +2936,7 @@
"Multipliers for recharge pricing based on user groups.": "基于用户分组的充值定价倍率。",
"Must be a valid URL": "必须是有效的 URL",
"Must be at least 8 characters": "必须至少 8 个字符",
+ "My contributions": "我的贡献",
"My Subscriptions": "我的订阅",
"my-status": "我的状态",
"MySQL detected": "检测到 MySQL",
@@ -2851,6 +2970,7 @@
"New API": "New API",
"New API <noreply@example.com>": "New API <noreply@example.com>",
"New API Project Repository:": "New API 项目仓库:",
+ "New contribution": "新建贡献",
"New Format Template": "新格式模板",
"New Group": "新建分组",
"New model": "新模型",
@@ -2885,6 +3005,7 @@
"No app usage data available for this model.": "该模型暂无应用使用数据。",
"No apps match the selected filters": "没有匹配筛选条件的应用",
"No Auth": "无认证",
+ "No auto-disabled models with recovered channels found": "没有发现可启用的、由规则自动禁用且渠道已恢复的模型",
"No available groups in the global Auto order.": "全局 Auto 顺序中当前没有可用分组。",
"No available models": "没有可用模型",
"No available Web chat links": "没有可用的 Web 聊天链接",
@@ -2896,6 +3017,7 @@
"No changes": "没有变更",
"No changes made": "未进行任何更改",
"No changes to save": "没有需要保存的更改",
+ "No channel contributions yet": "暂无渠道贡献",
"No channel selected": "未选择渠道",
"No channel type found.": "未找到渠道类型。",
"No channels available. Create your first channel to get started.": "没有可用的渠道。创建您的第一个渠道即可开始使用。",
@@ -2910,6 +3032,7 @@
"No console output": "无控制台输出",
"No containers": "无容器",
"No content to copy": "没有可复制的内容",
+ "No contribution rewards yet": "暂无贡献奖励",
"No custom groups. Saving will inherit the complete global Auto order.": "未自定义分组。保存后将继承完整的全局 Auto 顺序。",
"No custom OAuth providers configured yet.": "尚未配置自定义 OAuth 提供商。",
"No data": "暂无数据",
@@ -2946,13 +3069,16 @@
"No Logs Found": "未找到日志",
"No mappings configured. Click \"Add Row\" to get started.": "未配置映射。点击 \"添加行\" 开始。",
"No matches found": "未找到匹配项",
+ "No matching contributions": "没有匹配的贡献",
"No matching items": "没有匹配项",
+ "No matching models": "没有匹配的模型",
"No matching results": "无匹配结果",
"No matching rules": "没有匹配的规则",
"No matching token and channel usage was found.": "未找到匹配的令牌与渠道用量。",
"No messages yet": "暂无消息",
"No missing models found.": "未找到缺失的模型。",
"No model found.": "未找到模型。",
+ "No model health observations": "暂无模型健康检查记录",
"No model mappings configured. Click \"Add Mapping\" to get started.": "未配置模型映射。点击“添加映射”即可开始使用。",
"No model price changes to save": "没有模型价格变更需要保存",
"No models available": "没有可用的模型",
@@ -2972,6 +3098,7 @@
"No models to add": "无待新增模型",
"No models to copy": "没有模型可复制",
"No models to remove": "无待删除模型",
+ "No models with unavailable channels found": "没有发现需要禁用的无可用渠道模型",
"No models with unset prices": "没有未设置定价的模型",
"No new models to add": "没有新模型可添加",
"No new models yet": "暂无新模型",
@@ -3021,6 +3148,7 @@
"No Sync": "不同步",
"No system announcements": "暂无系统公告",
"No system tasks yet.": "暂无系统任务。",
+ "No test results": "暂无测试结果",
"No token found.": "未找到令牌。",
"No tools configured": "未配置工具",
"No Upgrade": "不升级",
@@ -3054,6 +3182,7 @@
"Not Equals": "不等于",
"Not in pricing table": "不在定价分组表中",
"Not included": "未加入",
+ "Not required": "无需测试",
"Not set": "未设置",
"Not Set": "未设置",
"Not set yet": "尚未设置",
@@ -3077,6 +3206,7 @@
"Number of tokens per unit quota": "每单位配额的令牌数",
"Number of top log probabilities returned per token": "每个 token 返回的 top 概率数量",
"Number of users invited": "已邀请的用户数量",
+ "OAuth": "OAuth",
"OAuth binding timed out. Please try again.": "OAuth 绑定超时,请重试。",
"OAuth binding window is no longer available": "OAuth 绑定窗口已不可用",
"OAuth callback URL": "OAuth 回调 URL",
@@ -3139,7 +3269,9 @@
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "仅选定的字段将被覆盖。如果出现新的冲突,您可以重新运行同步向导。",
"Only successful requests": "仅成功的请求",
"Only successful requests count toward this limit.": "仅成功的请求计入此限制。",
+ "Only the connection details required for review are collected.": "仅收集审核所需的连接信息。",
"Only the last {{value}} log files will be retained; the rest will be deleted.": "将只保留最近 {{value}} 个日志文件,其余将被删除。",
+ "Only these groups and provider types can be submitted.": "仅可提交这些分组和服务商类型。",
"Oops! Page Not Found!": "糟糕!页面未找到!",
"Oops! Something went wrong": "糟糕!出错了",
"Open": "打开",
@@ -3150,6 +3282,7 @@
"Open in New Tab": "在新标签页中打开",
"Open menu": "打开菜单",
"Open release": "打开版本",
+ "Open review": "打开审核",
"Open source": "开源",
"Open Source": "开源项目",
"Open the io.net console API Keys page": "打开 io.net 控制台 API 密钥页面",
@@ -3247,6 +3380,7 @@
"Overwritten": "已覆盖",
"Page": "页面",
"Page {{current}} of {{total}}": "第 {{current}} 页,共 {{total}} 页",
+ "Page {{page}} of {{pages}}": "第 {{page}} / {{pages}} 页",
"PaLM": "PaLM",
"Pan": "平移",
"Pancake": "煎饼",
@@ -3278,6 +3412,7 @@
"Pass when key is missing": "字段缺失时通过",
"Pass-Through": "透传",
"Pass-through Headers (comma-separated or JSON array)": "透传请求头(逗号分隔或 JSON 数组)",
+ "Passed": "通过",
"Passive recovery only": "仅被动恢复",
"Passkey": "Passkey",
"Passkey Authentication": "通行密钥认证",
@@ -3348,6 +3483,7 @@
"Penalises repetition of frequent tokens": "惩罚高频 token 的重复出现",
"pending": "等待中",
"Pending": "待确认",
+ "Pending review": "待审核",
"per": "每",
"Per 1K tokens": "每 1K tokens",
"Per 1M tokens": "每 1M tokens",
@@ -3679,6 +3815,7 @@
"Received": "获得",
"Received amount": "已收额度",
"Recent maintenance tasks running across instances and their execution status.": "跨实例运行的近期维护任务及其执行状态。",
+ "Recent transfers": "最近转入",
"Recently completed or failed system task runs.": "最近已完成或失败的系统任务运行记录。",
"Recently launched models": "近期发布的模型",
"Recently launched models gaining traction": "近期发布并快速增长的模型",
@@ -3750,7 +3887,10 @@
"Registry (optional)": "注册表 (可选)",
"Registry secret": "注册表密钥",
"Registry username": "注册表用户名",
+ "Reject": "驳回",
+ "Reject contribution": "驳回贡献",
"Reject Reason": "拒绝原因",
+ "Rejection reason": "驳回原因",
"Release details": "版本详情",
"Released": "发布于",
"Relying Party Display Name": "依赖方显示名称",
@@ -3846,6 +3986,7 @@
"Required": "必需",
"Required events:": "必需事件:",
"Required provider, authentication, model, and group settings": "必填的供应商、鉴权、模型和分组设置",
+ "Required tests passed within the last 30 minutes": "必需测试已在最近 30 分钟内通过",
"Required to expose MjProxy-style image generation to end users.": "需要向终端用户开放 MjProxy 风格的图像生成。",
"Rerank": "重新排序",
"Reroll": "重绘",
@@ -3889,6 +4030,7 @@
"Reset usage window": "重置用量窗口",
"Resets in:": "将于以下时间重置:",
"Resetting...": "重置中...",
+ "Resize column": "调整列宽",
"Resolve Conflicts": "解决冲突",
"Resource Configuration": "资源配置",
"Resources": "资源",
@@ -3921,11 +4063,22 @@
"Revenue": "收入",
"Review & initialize": "审核并初始化",
"Review and sign out devices currently using your account.": "查看并退出当前正在使用您账号的设备。",
+ "Review contributed channels and configure contribution policy.": "审核贡献渠道并配置贡献策略。",
+ "Review contributions": "审核贡献",
"Review model rates before scaling traffic": "扩展流量前查看模型费率",
+ "Review note": "审核备注",
+ "Review rejected": "审核未通过",
+ "Review status and per-model channel health history.": "查看审核状态和各模型的渠道健康历史。",
"Review your payment details": "查看您的付款详情",
"Review your purchase details before proceeding.": "在继续之前,请审阅您的购买详情。",
+ "Revision": "修订版本",
"Revoke": "撤销",
"Revoke session?": "撤销此会话?",
+ "Reward basis points": "奖励基点",
+ "Reward ledger": "奖励流水",
+ "Rewards": "奖励",
+ "Rewards are credited after billable requests use an approved channel.": "计费请求使用已通过渠道后会计入奖励。",
+ "Rewards transferred to your wallet": "奖励已转入钱包",
"Rewards will be added directly to your balance": "奖励将直接添加到您的余额",
"Rewrite callback URLs to the local server": "将回调 URL 重写到本地服务器",
"Right to Left": "从右到左",
@@ -3946,6 +4099,7 @@
"Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.": "同一入口路径按客户端 model 精确分流;未命中的请求走最后的兜底。",
"Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.": "同一入口路径按客户端请求中的精确模型名匹配。多个模型用英文逗号分隔,只有最后的兜底可留空。",
"Routing & Overrides": "路由与覆盖",
+ "Routing and health": "路由与健康检查",
"Routing Reliability": "路由可靠性",
"Routing Strategy": "路由策略",
"Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.": "行为用户分组,列为计费分组。空白单元格回退到灰色显示的基础倍率。",
@@ -3970,8 +4124,11 @@
"Rules JSON": "规则 JSON",
"Rules JSON must be an array": "规则 JSON 必须是数组",
"Rules match the original model value from the client request body.": "规则匹配客户端请求体里的原始 model 值。",
+ "Run admin test": "运行管理员测试",
+ "Run an independent administrator test before approving this revision.": "通过此修订前,请运行独立的管理员测试。",
"Run GC": "执行 GC",
"Run tests for the selected models": "运行所选模型的测试",
+ "Run the full model test before submitting.": "提交前请运行全模型测试。",
"running": "运行中",
"Running": "运行中",
"Runtime": "运行环境",
@@ -3990,6 +4147,7 @@
"Save chat settings": "保存聊天设置",
"Save check-in settings": "保存签到设置",
"Save Creem settings": "保存 Creem 设置",
+ "Save draft": "保存草稿",
"Save drawing settings": "保存绘图设置",
"Save Epay settings": "保存 Epay 设置",
"Save failed": "保存失败",
@@ -4008,11 +4166,13 @@
"Save preview": "保存预览",
"Save rate limits": "保存速率限制",
"Save sensitive words": "保存敏感词",
+ "Save settings": "保存设置",
"Save Settings": "保存设置",
"Save sidebar modules": "保存侧边栏模块",
"Save SMTP settings": "保存 SMTP 设置",
"Save SSRF settings": "保存 SSRF 设置",
"Save Stripe settings": "保存 Stripe 设置",
+ "Save the draft, test every model, then submit it for review.": "保存草稿并测试每个模型,然后提交审核。",
"Save these backup codes in a safe place. Each code can only be used once.": "将这些备份代码保存在安全的地方。每个代码只能使用一次。",
"Save these codes in a safe place. Each code can only be used once.": "将这些代码保存在安全的地方。每个代码只能使用一次。",
"Save this token now. You won't be able to view it again after closing this dialog.": "请立即保存此令牌。关闭此对话框后,您将无法再次查看。",
@@ -4020,6 +4180,7 @@
"Save tool prices": "保存工具价格",
"Save Waffo Pancake settings": "保存 Waffo Pancake 设置",
"Save Worker settings": "保存 Worker 设置",
+ "Saved drafts and submitted channels will appear here.": "已保存的草稿和已提交的渠道会显示在这里。",
"Saved successfully": "保存成功",
"Saving...": "正在保存...",
"Scan QR Code": "扫描二维码",
@@ -4089,15 +4250,20 @@
"Select all (filtered)": "全选(筛选结果)",
"Select all models": "选择所有模型",
"Select All Visible": "全选当前",
+ "Select an allowed group": "选择允许的分组",
"Select an operation mode and enter the amount": "选择操作模式并输入金额",
"Select announcement type": "选择公告类型",
+ "Select at least one allowed channel type": "请至少选择一种允许的渠道类型",
+ "Select at least one allowed group": "请至少选择一个允许的分组",
"Select at least one Auto group or restore global Auto.": "请至少选择一个 Auto 分组,或恢复全局 Auto。",
"Select at least one field to overwrite.": "请选择至少一个要覆盖的字段。",
+ "Select at least one model": "请至少选择一个模型",
"Select at least one target model": "请至少选择一个目标模型",
"Select at most {{max}} Auto groups": "最多选择 {{max}} 个 Auto 分组",
"Select body font": "选择正文字体",
"Select border radius": "选择圆角大小",
"Select channel type": "选择渠道类型",
+ "Select channel types": "选择渠道类型",
"Select color preset": "选择颜色预设",
"Select content width": "选择内容宽度",
"Select corner radius": "选择圆角大小",
@@ -4363,6 +4529,7 @@
"Structured output": "结构化输出",
"Submit": "提交",
"Submit directly": "直接提交",
+ "Submit for review": "提交审核",
"Submit Result": "提交结果",
"Submit Time": "提交时间",
"Submitted": "已提交",
@@ -4391,7 +4558,9 @@
"Successfully deleted {{count}} invalid redemption codes": "已成功删除 {{count}} 个无效兑换码",
"Successfully deleted {{count}} model(s)": "成功删除 {{count}} 个模型",
"Successfully disabled {{count}} model(s)": "成功禁用 {{count}} 个模型",
+ "Successfully disabled {{count}} model(s) with no available channels": "已禁用 {{count}} 个无可用渠道的模型",
"Successfully enabled {{count}} model(s)": "成功启用 {{count}} 个模型",
+ "Successfully enabled {{count}} model(s) with recovered channels": "已启用 {{count}} 个渠道已恢复的模型",
"Suffix": "后缀",
"Suffix Match": "后缀匹配",
"Summarize text": "总结文本",
@@ -4403,7 +4572,6 @@
"Supported Applications": "常用应用支持",
"Supported Imagine Models": "支持的 Imagine 模型",
"Supported modalities": "支持的模态",
- "Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.": "支持的操作符:eq、ne、gt、gte、lt、lte、in、not_in、contains、not_contains、exists、not_exists。留空则允许所有用户。",
"Supported parameters": "支持的参数",
"Supported variables": "支持变量",
"Supports `-thinking`, `-thinking-": "支持 `-thinking`、`-thinking-`",
@@ -4497,12 +4665,14 @@
"Test {{count}} matching models": "测试 {{count}} 个匹配模型",
"Test {{count}} selected": "测试 {{count}} 个已选择项",
"Test a model with a starter prompt, or write your own request below.": "使用入门提示词测试模型,或在下方编写自己的请求。",
+ "Test all": "测试全部",
"Test all {{count}} models": "测试全部 {{count}} 个模型",
"Test All Channels": "测试所有渠道",
"Test Channel Connection": "测试渠道连接",
"Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.": "测试渠道、刷新余额,并启用/禁用单个、批量或带标签的渠道。",
"Test Connection": "测试连接",
"Test connectivity for:": "测试连接性:",
+ "Test expired": "测试已过期",
"Test failed": "测试失败",
"Test interval (minutes)": "测试间隔 (分钟)",
"Test Latency": "测试延迟",
@@ -4512,6 +4682,8 @@
"Test selected models": "测试所选模型",
"Testing all enabled channels started. Please refresh to see results.": "测试所有启用的渠道已开始。请刷新以查看结果。",
"Testing...": "测试中...",
+ "Tests are starting...": "正在启动测试...",
+ "Tests failed": "测试未通过",
"Text": "文本",
"Text description of the desired image": "想要生成图像的文字描述",
"Text description of the desired video": "想要生成视频的文字描述",
@@ -4530,6 +4702,8 @@
"The binding will complete automatically after authorization": "授权后绑定将自动完成",
"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.": "已绑定产品用于钱包充值:当用户输入任意金额时,new-api 会基于这个单一 Pancake 产品发起结账,并按会话覆盖价格,无需预先创建 $1 / $5 / $10 的 SKU。",
"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.": "已绑定店铺是 new-api 从此管理端创建的所有 Pancake 产品的父容器,包括钱包充值产品和订阅套餐产品。一个店铺通常足够;只有在确实运营多个 Pancake 目录时才需要绑定不同店铺。",
+ "The channel will leave review or service and can be edited before resubmission.": "该渠道将退出审核或服务,并可在重新提交前编辑。",
+ "The contribution will be deleted and any linked channel will be removed from service.": "该贡献将被删除,任何关联渠道也会从服务中移除。",
"The deployment node that handled the requests": "处理请求的部署节点",
"The effective domain for Passkey registration. Must match the current domain or be its parent domain.": "用于 Passkey 注册的有效域。必须与当前域匹配或为其父域。",
"The entered text does not match the required text.": "输入文本与要求文本不匹配。",
@@ -4537,12 +4711,14 @@
"The exact model identifier as used in API requests.": "API 请求中使用的确切模型标识符。",
"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.": "以下模型存在计费类型冲突(固定价格 vs 比例计费)。确认以继续更改。",
"The following models in the model redirect have not been added to the \"Models\" list and may fail during invocation due to missing available models:": "模型重定向里的下列模型尚未添加到\"模型\"列表,调用时会因为缺少可用模型而失败:",
+ "The linked contributed channel will be removed from service.": "关联的贡献渠道将从服务中移除。",
"The login session that started this Telegram binding is no longer valid.": "发起此 Telegram 绑定的登录会话已失效。",
"The mapped upstream model(s)": "映射的上游模型",
"The model that was requested": "被请求的模型",
"The model you're looking for doesn't exist.": "您查找的模型不存在。",
"The name displayed across the application": "在整个应用程序中显示的名称",
"The new token will only be shown once. Copy it and store it securely.": "新令牌仅显示一次。请复制并妥善保存。",
+ "The provider returned no models": "服务商未返回任何模型",
"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations": "服务器的公开URL,用于OAuth回调、Webhook和其他外部集成",
"The requested chat preset does not exist or has been removed.": "请求的聊天预设不存在或已被删除。",
"The reset request stays disabled until a credit is available.": "没有可用次数时,重置请求会保持禁用。",
@@ -4564,6 +4740,7 @@
"Theme preset": "主题预设",
"Theme Settings": "主题设置",
"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?": "当前有新增和删除两类待处理模型,但您只勾选了其中一类。确认仅提交已勾选的部分吗?",
+ "There are no contributions waiting for review.": "暂无待审核的贡献。",
"There is a rule for vip billed as premium → use its ratio 0.3": "存在「vip 按 premium 计费」的规则 → 用规则里的 0.3",
"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.": "这些模型仍然在您的勾选列表中,但上游已不再返回该名称;仅作为 model_mapping 来源键而不会出现在 upstream 列表的别名已从本视图排除,请在保存前调整勾选。",
"These toggles affect whether certain request fields are passed through to the upstream provider.": "这些开关控制某些请求字段是否透传到上游服务。",
@@ -4610,6 +4787,7 @@
"This site currently has {{count}} models enabled": "本站当前已启用模型,总计 {{count}} 个",
"This Telegram account is already bound.": "此 Telegram 账户已被绑定。",
"This Telegram binding request has expired or has already been used.": "此 Telegram 绑定请求已过期或已使用。",
+ "This test result is older than 30 minutes. Run all tests again before submitting.": "此测试结果已超过 30 分钟。请在提交前重新运行所有测试。",
"This tier catches any request that did not match earlier tiers.": "此阶梯会兜底处理未匹配前面阶梯的请求。",
"this token group": "此令牌分组",
"This Uptime Kuma group will be removed from the list.": "此 Uptime Kuma 分组将从列表中移除。",
@@ -4623,6 +4801,8 @@
"This will delete all": "这将删除所有",
"This will delete all channel affinity cache entries still in memory.": "这将删除内存中所有的渠道亲和性缓存条目。",
"This will delete temporary cache files that have not been used for more than 10 minutes": "这将删除超过 10 分钟未使用的临时缓存文件",
+ "This will disable all currently enabled models that have no available channels. Continue?": "将禁用当前所有没有可用渠道的已启用模型。是否继续?",
+ "This will enable models that were auto-disabled by channel availability and now have recovered channels. Manually disabled models are not changed. Continue?": "将仅启用此前因渠道可用性被自动禁用、且现已恢复可用渠道的模型;不会改动人工禁用的模型。是否继续?",
"This will extend the deployment by the specified hours.": "这将通过指定的小时数延长部署。",
"This will immediately invalidate your existing access token. Any applications or scripts using it will stop working.": "这会立即使现有访问令牌失效。任何正在使用它的应用程序或脚本都将停止工作。",
"This will permanently delete all manually and automatically disabled channels. This action cannot be undone.": "这将永久删除所有手动禁用和自动禁用的渠道。此操作无法撤销。",
@@ -4773,16 +4953,21 @@
"Total:": "总计:",
"TPM": "TPM",
"Track per-request consumption to power usage analytics. Keeping this on increases database writes.": "跟踪每个请求的消耗,以支持使用情况分析。保持开启会增加数据库写入。",
+ "Track review, availability, and deletion status for every channel.": "跟踪每个渠道的审核、可用性和删除状态。",
"Track usage, costs and performance with real-time analytics": "通过实时分析跟踪用量、成本和性能",
"Tracked apps": "已跟踪的应用",
"Tracks current account base limits and additional metered usage on Codex upstream.": "跟踪当前账号在 Codex 上游的基础限额与附加计费用量。",
"Trading insights, accounting, advisory": "交易洞察、记账与财务建议",
"Transfer": "转移",
+ "Transfer all": "全部转入",
+ "Transfer amount": "转入额度",
"Transfer Amount": "转移金额",
"Transfer failed": "转账失败",
+ "Transfer rewards": "转入奖励",
"Transfer Rewards": "转移奖励",
"Transfer successful": "转账成功",
"Transfer to Balance": "转移到余额",
+ "Transfer to wallet": "转入钱包",
"Translation": "翻译",
"Transparent Billing": "透明计费",
"Trend": "趋势",
@@ -4834,6 +5019,9 @@
"Unable to read clipboard": "无法读取剪贴板",
"Unauthorized": "未授权",
"Unauthorized Access": "未经授权的访问",
+ "Unavailable": "不可用",
+ "Unavailable deletion threshold (hours)": "不可用删除阈值(小时)",
+ "Unavailable since": "不可用开始时间",
"Unbind": "解绑",
"Unbind failed": "解绑失败",
"Unbound {{provider}}": "已解绑 {{provider}}",
@@ -4861,6 +5049,7 @@
"Untitled": "未命名",
"Untrusted upstream data:": "不受信任的上游数据:",
"Unused": "未使用",
+ "Up to 100 unique models can be tested in one contribution.": "一次贡献最多可测试 100 个唯一模型。",
"Up to 4 strings that stop generation": "最多 4 个停止生成的字符串",
"Update": "更新",
"Update All Balances": "更新所有余额",
@@ -4895,6 +5084,7 @@
"Updated a vendor": "更新了一个供应商",
"Updated channel {{name}} (ID: {{id}})": "更新渠道 {{name}}(ID: {{id}})",
"Updated daily": "每日更新",
+ "Updated model statuses in batch": "批量更新了模型状态",
"Updated successfully": "更新成功",
"Updated system setting {{key}}": "修改系统设置 {{key}}",
"Updated user {{username}} (ID: {{id}})": "更新用户 {{username}}(ID: {{id}})",
@@ -4952,6 +5142,7 @@
"Usage logs": "使用日志",
"Usage Logs": "使用日志",
"Usage mode": "使用模式",
+ "Usage reward": "使用奖励",
"Usage-based": "基于使用量",
"USD": "USD",
"USD Exchange Rate": "美元汇率",
@@ -4978,6 +5169,7 @@
"Use the full-width table to scan prices, then select a row to edit it here.": "先在表格中快速浏览价格,然后选择一行在这里编辑。",
"Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.": "使用令牌上设置的分组;令牌未设置分组时,使用用户分组。auto 分组会按自动分组顺序从上到下尝试。",
"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.": "使用定价分组表管理倍率,以及该分组是否出现在创建令牌的下拉框中。",
+ "Use the provider base URL without a model-specific path.": "请使用不含模型专用路径的服务商基础 URL。",
"Use this callback URL pattern when registering a custom OAuth provider.": "注册自定义 OAuth 提供商时使用此回调 URL 格式。",
"Use this token for API authentication": "使用此令牌进行 API 身份验证",
"Use your Passkey": "使用您的通行密钥",
@@ -5001,6 +5193,7 @@
"User Analytics": "用户统计",
"User Consumption Ranking": "用户消耗排行",
"User Consumption Trend": "用户消耗趋势",
+ "User contribution view": "用户贡献视图",
"User created successfully": "用户创建成功",
"User dashboard and quota controls.": "用户仪表板和配额控制。",
"User deleted successfully": "用户删除成功",
@@ -5038,8 +5231,10 @@
"Users must wait for a successful drawing before upscales or variations.": "用户必须等待成功的绘图完成,才能进行放大或变体。",
"Users of vip, when billed as premium, pay ratio": "vip 分组的用户,按 premium 计费时,倍率用",
"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.": "用户只能看到标记为用户可选的分组。不可选分组仍可由管理员分配。",
+ "Users review this exact content before every first submission or resubmission.": "用户在首次提交或每次重新提交前都会查看这份确切内容。",
"uses": "使用次数",
"Using the complete global Auto order ({{count}} groups)": "正在使用完整全局 Auto 顺序({{count}} 个分组)",
+ "Validation and submission": "验证与提交",
"Validity": "有效期",
"Validity Period": "有效期",
"Value": "值",
@@ -5074,6 +5269,7 @@
"Verification scope is missing": "缺少验证范围",
"Verify": "验证",
"Verify and Sign In": "验证并登录",
+ "Verify every current revision independently before approval.": "审核通过前,请独立验证每个当前修订。",
"Verify routing with Playground or your client": "使用 Playground 或你的客户端验证路由",
"Verify Setup": "验证设置",
"Verify to view channel key": "验证后查看渠道密钥",
@@ -5094,6 +5290,7 @@
"View all currently available models": "查看当前可用的所有模型",
"View channel lists and details without secrets.": "查看不含密钥的渠道列表和详情。",
"View channel secrets": "查看渠道密钥",
+ "View contribution details": "查看贡献详情",
"View detailed information about this user including balance, usage statistics, and invitation details.": "查看此用户的详细信息,包括余额、使用统计和邀请详情。",
"View details": "查看详情",
"View document": "查看文档",
@@ -5150,6 +5347,7 @@
"Wallet Management": "钱包管理",
"Wallet management and personal preferences.": "钱包管理和个人偏好设置。",
"Wallet Only": "仅用钱包",
+ "Wallet transfer": "钱包转入",
"Warning": "警告",
"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.": "警告:基础 URL 不应以 /v1 结尾。New API 将自动处理它。这可能会导致请求失败。",
"Warning: Disabling 2FA will make your account less secure.": "警告:禁用双重身份验证将使您的账户安全性降低。",
@@ -5218,6 +5416,9 @@
"Wire encoding for the embedding vectors": "向量传输的编码格式",
"with conflicts": "有冲突",
"with the API key from your token settings.": "替换为令牌设置中的 API Key。",
+ "Withdraw": "撤回",
+ "Withdraw channel contribution?": "撤回渠道贡献?",
+ "Withdraw contribution": "撤回贡献",
"Without additional conditions, only the type above is used for pruning.": "未添加附加条件时,仅使用上方 type 进行清理。",
"Worked example": "完整示例",
"Worker Access Key": "Worker 访问密钥",
diff --git a/web/src/lib/nav-modules.ts b/web/src/lib/nav-modules.ts
index 2e8611d2218c..b577a29f07b4 100644
--- a/web/src/lib/nav-modules.ts
+++ b/web/src/lib/nav-modules.ts
@@ -20,13 +20,14 @@ import { getStatus } from '@/lib/api'
export type ModuleAccess = { enabled: boolean; requireAuth: boolean }
-export type HeaderNavModule = 'rankings' | 'pricing'
+export type HeaderNavModule = 'rankings' | 'pricing' | 'contribution'
export type HeaderNavModules = {
home: boolean
console: boolean
pricing: ModuleAccess
rankings: ModuleAccess
+ contribution: ModuleAccess
docs: boolean
about: boolean
[key: string]: boolean | ModuleAccess
@@ -37,6 +38,7 @@ const DEFAULT_HEADER_NAV_MODULES: HeaderNavModules = {
console: true,
pricing: { enabled: true, requireAuth: false },
rankings: { enabled: true, requireAuth: false },
+ contribution: { enabled: true, requireAuth: true },
docs: true,
about: true,
}
@@ -44,6 +46,7 @@ const DEFAULT_HEADER_NAV_MODULES: HeaderNavModules = {
const DEFAULTS: Record = {
pricing: DEFAULT_HEADER_NAV_MODULES.pricing,
rankings: DEFAULT_HEADER_NAV_MODULES.rankings,
+ contribution: DEFAULT_HEADER_NAV_MODULES.contribution,
}
function cloneHeaderNavDefaults(): HeaderNavModules {
@@ -51,6 +54,7 @@ function cloneHeaderNavDefaults(): HeaderNavModules {
...DEFAULT_HEADER_NAV_MODULES,
pricing: { ...DEFAULT_HEADER_NAV_MODULES.pricing },
rankings: { ...DEFAULT_HEADER_NAV_MODULES.rankings },
+ contribution: { ...DEFAULT_HEADER_NAV_MODULES.contribution },
}
}
@@ -118,6 +122,11 @@ export function parseHeaderNavModules(raw: unknown): HeaderNavModules {
result.rankings = parseAccess(value, result.rankings)
return
}
+ if (key === 'contribution') {
+ result.contribution = parseAccess(value, result.contribution)
+ result.contribution.requireAuth = true
+ return
+ }
const fallback = result[key]
if (
diff --git a/web/src/routeTree.gen.ts b/web/src/routeTree.gen.ts
index a72e146cd06d..db4aa3ac16cd 100644
--- a/web/src/routeTree.gen.ts
+++ b/web/src/routeTree.gen.ts
@@ -34,6 +34,8 @@ import { Route as PricingIndexRouteImport } from './routes/pricing/index'
import { Route as RankingsIndexRouteImport } from './routes/rankings/index'
import { Route as SetupIndexRouteImport } from './routes/setup/index'
import { Route as authUserResetRouteImport } from './routes/(auth)/user/reset'
+import { Route as AuthenticatedChannelContributionsIndexRouteImport } from './routes/_authenticated/channel-contributions/index'
+import { Route as AuthenticatedChannelContributionsAdminRouteImport } from './routes/_authenticated/channel-contributions/admin'
import { Route as AuthenticatedChannelsIndexRouteImport } from './routes/_authenticated/channels/index'
import { Route as AuthenticatedChatChatIdRouteImport } from './routes/_authenticated/chat/$chatId'
import { Route as AuthenticatedDashboardIndexRouteImport } from './routes/_authenticated/dashboard/index'
@@ -192,6 +194,18 @@ const authUserResetRoute = authUserResetRouteImport.update({
path: '/user/reset',
getParentRoute: () => authRouteRoute,
} as any)
+const AuthenticatedChannelContributionsIndexRoute =
+ AuthenticatedChannelContributionsIndexRouteImport.update({
+ id: '/channel-contributions/',
+ path: '/channel-contributions/',
+ getParentRoute: () => AuthenticatedRouteRoute,
+ } as any)
+const AuthenticatedChannelContributionsAdminRoute =
+ AuthenticatedChannelContributionsAdminRouteImport.update({
+ id: '/channel-contributions/admin',
+ path: '/channel-contributions/admin',
+ getParentRoute: () => AuthenticatedRouteRoute,
+ } as any)
const AuthenticatedChannelsIndexRoute =
AuthenticatedChannelsIndexRouteImport.update({
id: '/channels/',
@@ -411,11 +425,13 @@ export interface FileRoutesByFullPath {
'/rankings/': typeof RankingsIndexRoute
'/setup/': typeof SetupIndexRoute
'/user/reset': typeof authUserResetRoute
+ '/channel-contributions/admin': typeof AuthenticatedChannelContributionsAdminRoute
'/chat/$chatId': typeof AuthenticatedChatChatIdRoute
'/dashboard/$section': typeof AuthenticatedDashboardSectionRoute
'/errors/$error': typeof AuthenticatedErrorsErrorRoute
'/models/$section': typeof AuthenticatedModelsSectionRoute
'/usage-logs/$section': typeof AuthenticatedUsageLogsSectionRoute
+ '/channel-contributions/': typeof AuthenticatedChannelContributionsIndexRoute
'/channels/': typeof AuthenticatedChannelsIndexRoute
'/dashboard/': typeof AuthenticatedDashboardIndexRoute
'/keys/': typeof AuthenticatedKeysIndexRoute
@@ -468,11 +484,13 @@ export interface FileRoutesByTo {
'/rankings': typeof RankingsIndexRoute
'/setup': typeof SetupIndexRoute
'/user/reset': typeof authUserResetRoute
+ '/channel-contributions/admin': typeof AuthenticatedChannelContributionsAdminRoute
'/chat/$chatId': typeof AuthenticatedChatChatIdRoute
'/dashboard/$section': typeof AuthenticatedDashboardSectionRoute
'/errors/$error': typeof AuthenticatedErrorsErrorRoute
'/models/$section': typeof AuthenticatedModelsSectionRoute
'/usage-logs/$section': typeof AuthenticatedUsageLogsSectionRoute
+ '/channel-contributions': typeof AuthenticatedChannelContributionsIndexRoute
'/channels': typeof AuthenticatedChannelsIndexRoute
'/dashboard': typeof AuthenticatedDashboardIndexRoute
'/keys': typeof AuthenticatedKeysIndexRoute
@@ -529,11 +547,13 @@ export interface FileRoutesById {
'/rankings/': typeof RankingsIndexRoute
'/setup/': typeof SetupIndexRoute
'/(auth)/user/reset': typeof authUserResetRoute
+ '/_authenticated/channel-contributions/admin': typeof AuthenticatedChannelContributionsAdminRoute
'/_authenticated/chat/$chatId': typeof AuthenticatedChatChatIdRoute
'/_authenticated/dashboard/$section': typeof AuthenticatedDashboardSectionRoute
'/_authenticated/errors/$error': typeof AuthenticatedErrorsErrorRoute
'/_authenticated/models/$section': typeof AuthenticatedModelsSectionRoute
'/_authenticated/usage-logs/$section': typeof AuthenticatedUsageLogsSectionRoute
+ '/_authenticated/channel-contributions/': typeof AuthenticatedChannelContributionsIndexRoute
'/_authenticated/channels/': typeof AuthenticatedChannelsIndexRoute
'/_authenticated/dashboard/': typeof AuthenticatedDashboardIndexRoute
'/_authenticated/keys/': typeof AuthenticatedKeysIndexRoute
@@ -589,11 +609,13 @@ export interface FileRouteTypes {
| '/rankings/'
| '/setup/'
| '/user/reset'
+ | '/channel-contributions/admin'
| '/chat/$chatId'
| '/dashboard/$section'
| '/errors/$error'
| '/models/$section'
| '/usage-logs/$section'
+ | '/channel-contributions/'
| '/channels/'
| '/dashboard/'
| '/keys/'
@@ -646,11 +668,13 @@ export interface FileRouteTypes {
| '/rankings'
| '/setup'
| '/user/reset'
+ | '/channel-contributions/admin'
| '/chat/$chatId'
| '/dashboard/$section'
| '/errors/$error'
| '/models/$section'
| '/usage-logs/$section'
+ | '/channel-contributions'
| '/channels'
| '/dashboard'
| '/keys'
@@ -706,11 +730,13 @@ export interface FileRouteTypes {
| '/rankings/'
| '/setup/'
| '/(auth)/user/reset'
+ | '/_authenticated/channel-contributions/admin'
| '/_authenticated/chat/$chatId'
| '/_authenticated/dashboard/$section'
| '/_authenticated/errors/$error'
| '/_authenticated/models/$section'
| '/_authenticated/usage-logs/$section'
+ | '/_authenticated/channel-contributions/'
| '/_authenticated/channels/'
| '/_authenticated/dashboard/'
| '/_authenticated/keys/'
@@ -937,6 +963,20 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof authUserResetRouteImport
parentRoute: typeof authRouteRoute
}
+ '/_authenticated/channel-contributions/': {
+ id: '/_authenticated/channel-contributions/'
+ path: '/channel-contributions'
+ fullPath: '/channel-contributions/'
+ preLoaderRoute: typeof AuthenticatedChannelContributionsIndexRouteImport
+ parentRoute: typeof AuthenticatedRouteRoute
+ }
+ '/_authenticated/channel-contributions/admin': {
+ id: '/_authenticated/channel-contributions/admin'
+ path: '/channel-contributions/admin'
+ fullPath: '/channel-contributions/admin'
+ preLoaderRoute: typeof AuthenticatedChannelContributionsAdminRouteImport
+ parentRoute: typeof AuthenticatedRouteRoute
+ }
'/_authenticated/channels/': {
id: '/_authenticated/channels/'
path: '/channels'
@@ -1257,11 +1297,13 @@ const AuthenticatedSystemSettingsRouteRouteWithChildren =
interface AuthenticatedRouteRouteChildren {
AuthenticatedSystemSettingsRouteRoute: typeof AuthenticatedSystemSettingsRouteRouteWithChildren
AuthenticatedChat2linkRoute: typeof AuthenticatedChat2linkRoute
+ AuthenticatedChannelContributionsAdminRoute: typeof AuthenticatedChannelContributionsAdminRoute
AuthenticatedChatChatIdRoute: typeof AuthenticatedChatChatIdRoute
AuthenticatedDashboardSectionRoute: typeof AuthenticatedDashboardSectionRoute
AuthenticatedErrorsErrorRoute: typeof AuthenticatedErrorsErrorRoute
AuthenticatedModelsSectionRoute: typeof AuthenticatedModelsSectionRoute
AuthenticatedUsageLogsSectionRoute: typeof AuthenticatedUsageLogsSectionRoute
+ AuthenticatedChannelContributionsIndexRoute: typeof AuthenticatedChannelContributionsIndexRoute
AuthenticatedChannelsIndexRoute: typeof AuthenticatedChannelsIndexRoute
AuthenticatedDashboardIndexRoute: typeof AuthenticatedDashboardIndexRoute
AuthenticatedKeysIndexRoute: typeof AuthenticatedKeysIndexRoute
@@ -1280,11 +1322,15 @@ const AuthenticatedRouteRouteChildren: AuthenticatedRouteRouteChildren = {
AuthenticatedSystemSettingsRouteRoute:
AuthenticatedSystemSettingsRouteRouteWithChildren,
AuthenticatedChat2linkRoute: AuthenticatedChat2linkRoute,
+ AuthenticatedChannelContributionsAdminRoute:
+ AuthenticatedChannelContributionsAdminRoute,
AuthenticatedChatChatIdRoute: AuthenticatedChatChatIdRoute,
AuthenticatedDashboardSectionRoute: AuthenticatedDashboardSectionRoute,
AuthenticatedErrorsErrorRoute: AuthenticatedErrorsErrorRoute,
AuthenticatedModelsSectionRoute: AuthenticatedModelsSectionRoute,
AuthenticatedUsageLogsSectionRoute: AuthenticatedUsageLogsSectionRoute,
+ AuthenticatedChannelContributionsIndexRoute:
+ AuthenticatedChannelContributionsIndexRoute,
AuthenticatedChannelsIndexRoute: AuthenticatedChannelsIndexRoute,
AuthenticatedDashboardIndexRoute: AuthenticatedDashboardIndexRoute,
AuthenticatedKeysIndexRoute: AuthenticatedKeysIndexRoute,
diff --git a/web/src/routes/_authenticated/channel-contributions/admin.tsx b/web/src/routes/_authenticated/channel-contributions/admin.tsx
new file mode 100644
index 000000000000..dc1d20c7d647
--- /dev/null
+++ b/web/src/routes/_authenticated/channel-contributions/admin.tsx
@@ -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 .
+
+For commercial licensing, please contact support@quantumnous.com
+*/
+import { createFileRoute, redirect } from '@tanstack/react-router'
+
+import { ChannelContributionAdmin } from '@/features/channel-contributions/admin'
+import { ROLE } from '@/lib/roles'
+import { useAuthStore } from '@/stores/auth-store'
+
+export const Route = createFileRoute(
+ '/_authenticated/channel-contributions/admin'
+)({
+ beforeLoad: () => {
+ const { auth } = useAuthStore.getState()
+ if (!auth.user || auth.user.role < ROLE.ADMIN) {
+ throw redirect({ to: '/403' })
+ }
+ },
+ component: ChannelContributionAdmin,
+})
diff --git a/web/src/routes/_authenticated/channel-contributions/index.tsx b/web/src/routes/_authenticated/channel-contributions/index.tsx
new file mode 100644
index 000000000000..c5fe071a5dc5
--- /dev/null
+++ b/web/src/routes/_authenticated/channel-contributions/index.tsx
@@ -0,0 +1,25 @@
+/*
+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 .
+
+For commercial licensing, please contact support@quantumnous.com
+*/
+import { createFileRoute } from '@tanstack/react-router'
+
+import { ChannelContributions } from '@/features/channel-contributions'
+
+export const Route = createFileRoute('/_authenticated/channel-contributions/')({
+ component: ChannelContributions,
+})