feat: improve model price error UX with role-aware messages and cleaner UI
- Backend: differentiate error messages for admin vs regular users in price.go - Backend: include error_code in channel test response for structured error handling - Frontend: render model_price_error as a styled card in Playground with admin nav button - Frontend: show inline error details and settings link in channel test modal - Frontend: parse error codes from both SSE and non-streaming API responses - i18n: remove redundant "Settings" suffix from setting tab translations (en/fr/ru/ja/vi) - i18n: update "Group & Model Pricing" translations across all locales
This commit is contained in:
@@ -150,6 +150,7 @@ func testChannel(channel *model.Channel, testModel string, endpointType string,
|
||||
}
|
||||
}
|
||||
cache.WriteContext(c)
|
||||
c.Set("id", 1)
|
||||
|
||||
//c.Request.Header.Set("Authorization", "Bearer "+channel.Key)
|
||||
c.Request.Header.Set("Content-Type", "application/json")
|
||||
@@ -274,7 +275,7 @@ func testChannel(channel *model.Channel, testModel string, endpointType string,
|
||||
return testResult{
|
||||
context: c,
|
||||
localErr: err,
|
||||
newAPIError: types.NewError(err, types.ErrorCodeModelPriceError),
|
||||
newAPIError: types.NewError(err, types.ErrorCodeModelPriceError, types.ErrOptionWithStatusCode(http.StatusBadRequest)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -756,11 +757,15 @@ func TestChannel(c *gin.Context) {
|
||||
tik := time.Now()
|
||||
result := testChannel(channel, testModel, endpointType, isStream)
|
||||
if result.localErr != nil {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
resp := gin.H{
|
||||
"success": false,
|
||||
"message": result.localErr.Error(),
|
||||
"time": 0.0,
|
||||
})
|
||||
}
|
||||
if result.newAPIError != nil {
|
||||
resp["error_code"] = result.newAPIError.GetErrorCode()
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
}
|
||||
tok := time.Now()
|
||||
@@ -772,6 +777,7 @@ func TestChannel(c *gin.Context) {
|
||||
"success": false,
|
||||
"message": result.newAPIError.Error(),
|
||||
"time": consumedTime,
|
||||
"error_code": result.newAPIError.GetErrorCode(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
+1
-1
@@ -151,7 +151,7 @@ func Relay(c *gin.Context, relayFormat types.RelayFormat) {
|
||||
|
||||
priceData, err := helper.ModelPriceHelper(c, relayInfo, tokens, meta)
|
||||
if err != nil {
|
||||
newAPIError = types.NewError(err, types.ErrorCodeModelPriceError)
|
||||
newAPIError = types.NewError(err, types.ErrorCodeModelPriceError, types.ErrOptionWithStatusCode(http.StatusBadRequest))
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
+18
-2
@@ -5,6 +5,7 @@ import (
|
||||
|
||||
"github.com/QuantumNous/new-api/common"
|
||||
"github.com/QuantumNous/new-api/logger"
|
||||
"github.com/QuantumNous/new-api/model"
|
||||
relaycommon "github.com/QuantumNous/new-api/relay/common"
|
||||
"github.com/QuantumNous/new-api/setting/operation_setting"
|
||||
"github.com/QuantumNous/new-api/setting/ratio_setting"
|
||||
@@ -13,6 +14,21 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func modelPriceNotConfiguredError(modelName string, userId int) error {
|
||||
if model.IsAdmin(userId) {
|
||||
return fmt.Errorf(
|
||||
"模型 %s 的价格未配置。请前往「系统设置 → 运营设置」开启自用模式,或在「系统设置 → 分组与模型定价设置」中为该模型配置价格;"+
|
||||
"Model %s price not configured. Go to System Settings → Operation Settings to enable self-use mode, or configure the model price in System Settings → Group & Model Pricing.",
|
||||
modelName, modelName,
|
||||
)
|
||||
}
|
||||
return fmt.Errorf(
|
||||
"模型 %s 的价格尚未由管理员配置,暂时无法使用,请联系站点管理员开启该模型;"+
|
||||
"Model %s has not been priced by the administrator yet. Please contact the site administrator to enable this model.",
|
||||
modelName, modelName,
|
||||
)
|
||||
}
|
||||
|
||||
// https://docs.claude.com/en/docs/build-with-claude/prompt-caching#1-hour-cache-duration
|
||||
const claudeCacheCreation1hMultiplier = 6 / 3.75
|
||||
|
||||
@@ -75,7 +91,7 @@ func ModelPriceHelper(c *gin.Context, info *relaycommon.RelayInfo, promptTokens
|
||||
acceptUnsetRatio = true
|
||||
}
|
||||
if !acceptUnsetRatio {
|
||||
return types.PriceData{}, fmt.Errorf("模型 %s 倍率或价格未配置,请联系管理员设置或开始自用模式;Model %s ratio or price not set, please set or start self-use mode", matchName, matchName)
|
||||
return types.PriceData{}, modelPriceNotConfiguredError(matchName, info.UserId)
|
||||
}
|
||||
}
|
||||
completionRatio = ratio_setting.GetCompletionRatio(info.OriginModelName)
|
||||
@@ -161,7 +177,7 @@ func ModelPriceHelperPerCall(c *gin.Context, info *relaycommon.RelayInfo) (types
|
||||
acceptUnsetRatio = true
|
||||
}
|
||||
if !ratioSuccess && !acceptUnsetRatio {
|
||||
return types.PriceData{}, fmt.Errorf("模型 %s 倍率或价格未配置,请联系管理员设置或开始自用模式;Model %s ratio or price not set, please set or start self-use mode", matchName, matchName)
|
||||
return types.PriceData{}, modelPriceNotConfiguredError(matchName, info.UserId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ func ResponsesHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *
|
||||
if err != nil {
|
||||
info.OriginModelName = originModelName
|
||||
info.PriceData = originPriceData
|
||||
return types.NewError(err, types.ErrorCodeModelPriceError, types.ErrOptionWithSkipRetry())
|
||||
return types.NewError(err, types.ErrorCodeModelPriceError, types.ErrOptionWithSkipRetry(), types.ErrOptionWithStatusCode(http.StatusBadRequest))
|
||||
}
|
||||
service.PostTextConsumeQuota(c, info, usageDto, nil)
|
||||
|
||||
|
||||
@@ -390,6 +390,12 @@ func ErrOptionWithNoRecordErrorLog() NewAPIErrorOptions {
|
||||
}
|
||||
}
|
||||
|
||||
func ErrOptionWithStatusCode(statusCode int) NewAPIErrorOptions {
|
||||
return func(e *NewAPIError) {
|
||||
e.StatusCode = statusCode
|
||||
}
|
||||
}
|
||||
|
||||
func ErrOptionWithHideErrMsg(replaceStr string) NewAPIErrorOptions {
|
||||
return func(e *NewAPIError) {
|
||||
if common.DebugEnabled {
|
||||
|
||||
@@ -21,8 +21,9 @@ import React, { useRef, useEffect } from 'react';
|
||||
import { Typography, TextArea, Button } from '@douyinfe/semi-ui';
|
||||
import MarkdownRenderer from '../common/markdown/MarkdownRenderer';
|
||||
import ThinkingContent from './ThinkingContent';
|
||||
import { Loader2, Check, X } from 'lucide-react';
|
||||
import { Loader2, Check, X, Settings, AlertTriangle } from 'lucide-react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { isAdmin } from '../../helpers/utils';
|
||||
|
||||
const MessageContent = ({
|
||||
message,
|
||||
@@ -64,6 +65,44 @@ const MessageContent = ({
|
||||
errorText = t('请求发生错误');
|
||||
}
|
||||
|
||||
if (message.errorCode === 'model_price_error') {
|
||||
return (
|
||||
<div className={`${className}`}>
|
||||
<div
|
||||
className='rounded-lg p-3 space-y-2'
|
||||
style={{
|
||||
background: 'var(--semi-color-bg-0)',
|
||||
border: '1px solid var(--semi-color-border)',
|
||||
}}
|
||||
>
|
||||
<div className='flex items-center gap-2'>
|
||||
<AlertTriangle size={16} className='text-orange-500 shrink-0' />
|
||||
<Typography.Text strong className='!text-[var(--semi-color-text-0)]'>
|
||||
{t('模型价格未配置')}
|
||||
</Typography.Text>
|
||||
</div>
|
||||
<Typography.Paragraph
|
||||
className='!text-[var(--semi-color-text-1)] !text-sm !mb-0'
|
||||
style={{ wordBreak: 'break-word' }}
|
||||
>
|
||||
{errorText}
|
||||
</Typography.Paragraph>
|
||||
{isAdmin() && (
|
||||
<Button
|
||||
size='small'
|
||||
theme='light'
|
||||
type='warning'
|
||||
icon={<Settings size={14} />}
|
||||
onClick={() => window.open('/console/setting?tab=ratio', '_blank')}
|
||||
>
|
||||
{t('前往设置')}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={`${className}`}>
|
||||
<Typography.Text className='text-white'>{errorText}</Typography.Text>
|
||||
|
||||
@@ -30,6 +30,7 @@ import {
|
||||
Banner,
|
||||
} from '@douyinfe/semi-ui';
|
||||
import { IconSearch, IconInfoCircle } from '@douyinfe/semi-icons';
|
||||
import { Settings } from 'lucide-react';
|
||||
import { copy, showError, showInfo, showSuccess } from '../../../../helpers';
|
||||
import { MODEL_TABLE_PAGE_SIZE } from '../../../../constants';
|
||||
|
||||
@@ -168,6 +169,7 @@ const ModelTestModal = ({
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='flex flex-col gap-1'>
|
||||
<div className='flex items-center gap-2'>
|
||||
<Tag color={testResult.success ? 'green' : 'red'} shape='circle'>
|
||||
{testResult.success ? t('成功') : t('失败')}
|
||||
@@ -181,6 +183,31 @@ const ModelTestModal = ({
|
||||
</Typography.Text>
|
||||
)}
|
||||
</div>
|
||||
{!testResult.success && testResult.message && (
|
||||
<div className='flex flex-col gap-1'>
|
||||
<Typography.Text
|
||||
type='danger'
|
||||
size='small'
|
||||
className='break-all'
|
||||
style={{ maxWidth: '400px', fontSize: '12px' }}
|
||||
>
|
||||
{testResult.message}
|
||||
</Typography.Text>
|
||||
{testResult.errorCode === 'model_price_error' && (
|
||||
<Button
|
||||
size='small'
|
||||
theme='light'
|
||||
type='warning'
|
||||
icon={<Settings size={12} />}
|
||||
onClick={() => window.open('/console/setting?tab=ratio', '_blank')}
|
||||
style={{ width: 'fit-content' }}
|
||||
>
|
||||
{t('前往设置')}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
|
||||
+5
-3
@@ -890,7 +890,7 @@ export const useChannelsData = () => {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
const { success, message, time } = res.data;
|
||||
const { success, message, time, error_code } = res.data;
|
||||
|
||||
// 更新测试结果
|
||||
setModelTestResults((prev) => ({
|
||||
@@ -900,6 +900,7 @@ export const useChannelsData = () => {
|
||||
message,
|
||||
time: time || 0,
|
||||
timestamp: Date.now(),
|
||||
errorCode: error_code || null,
|
||||
},
|
||||
}));
|
||||
|
||||
@@ -927,7 +928,7 @@ export const useChannelsData = () => {
|
||||
);
|
||||
}
|
||||
} else {
|
||||
showError(`${t('模型')} ${model}: ${message}`);
|
||||
showError(message);
|
||||
}
|
||||
} catch (error) {
|
||||
// 处理网络错误
|
||||
@@ -939,9 +940,10 @@ export const useChannelsData = () => {
|
||||
message: error.message || t('网络错误'),
|
||||
time: 0,
|
||||
timestamp: Date.now(),
|
||||
errorCode: null,
|
||||
},
|
||||
}));
|
||||
showError(`${t('模型')} ${model}: ${error.message || t('测试失败')}`);
|
||||
showError(error.message || t('测试失败'));
|
||||
} finally {
|
||||
// 从正在测试的模型集合中移除
|
||||
setTestingModels((prev) => {
|
||||
|
||||
+41
-4
@@ -196,11 +196,18 @@ export const useApiRequest = (
|
||||
|
||||
if (!response.ok) {
|
||||
let errorBody = '';
|
||||
let parsedError = null;
|
||||
try {
|
||||
errorBody = await response.text();
|
||||
const errorJson = JSON.parse(errorBody);
|
||||
if (errorJson?.error) {
|
||||
parsedError = errorJson.error;
|
||||
}
|
||||
} catch (e) {
|
||||
if (!errorBody) {
|
||||
errorBody = '无法读取错误响应体';
|
||||
}
|
||||
}
|
||||
|
||||
const errorInfo = handleApiError(
|
||||
new Error(
|
||||
@@ -215,9 +222,13 @@ export const useApiRequest = (
|
||||
}));
|
||||
setActiveDebugTab(DEBUG_TABS.RESPONSE);
|
||||
|
||||
throw new Error(
|
||||
const err = new Error(
|
||||
parsedError?.message ||
|
||||
`HTTP error! status: ${response.status}, body: ${errorBody}`,
|
||||
);
|
||||
err.errorCode = parsedError?.code || null;
|
||||
err.errorType = parsedError?.type || null;
|
||||
throw err;
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
@@ -277,6 +288,7 @@ export const useApiRequest = (
|
||||
newMessages[newMessages.length - 1] = {
|
||||
...lastMessage,
|
||||
content: t('请求发生错误: ') + error.message,
|
||||
errorCode: error.errorCode || null,
|
||||
status: MESSAGE_STATUS.ERROR,
|
||||
...autoCollapseState,
|
||||
};
|
||||
@@ -379,7 +391,20 @@ export const useApiRequest = (
|
||||
// 只有在流没有正常完成且连接状态异常时才处理错误
|
||||
if (!isStreamComplete && source.readyState !== 2) {
|
||||
console.error('SSE Error:', e);
|
||||
const errorMessage = e.data || t('请求发生错误');
|
||||
let errorMessage = e.data || t('请求发生错误');
|
||||
let errorCode = null;
|
||||
|
||||
if (e.data) {
|
||||
try {
|
||||
const errorJson = JSON.parse(e.data);
|
||||
if (errorJson?.error) {
|
||||
errorMessage = errorJson.error.message || errorMessage;
|
||||
errorCode = errorJson.error.code || null;
|
||||
}
|
||||
} catch (_) {
|
||||
// not JSON, use raw data as error message
|
||||
}
|
||||
}
|
||||
|
||||
const errorInfo = handleApiError(new Error(errorMessage));
|
||||
errorInfo.readyState = source.readyState;
|
||||
@@ -393,8 +418,19 @@ export const useApiRequest = (
|
||||
}));
|
||||
setActiveDebugTab(DEBUG_TABS.RESPONSE);
|
||||
|
||||
streamMessageUpdate(errorMessage, 'content');
|
||||
completeMessage(MESSAGE_STATUS.ERROR);
|
||||
setMessage((prevMessage) => {
|
||||
const newMessages = [...prevMessage];
|
||||
const lastMessage = newMessages[newMessages.length - 1];
|
||||
if (lastMessage && lastMessage.status !== MESSAGE_STATUS.COMPLETE && lastMessage.status !== MESSAGE_STATUS.ERROR) {
|
||||
newMessages[newMessages.length - 1] = {
|
||||
...lastMessage,
|
||||
content: (lastMessage.content || '') + errorMessage,
|
||||
errorCode: errorCode,
|
||||
status: MESSAGE_STATUS.ERROR,
|
||||
};
|
||||
}
|
||||
return newMessages;
|
||||
});
|
||||
sseSourceRef.current = null;
|
||||
source.close();
|
||||
}
|
||||
@@ -446,6 +482,7 @@ export const useApiRequest = (
|
||||
[
|
||||
setDebugData,
|
||||
setActiveDebugTab,
|
||||
setMessage,
|
||||
streamMessageUpdate,
|
||||
completeMessage,
|
||||
t,
|
||||
|
||||
Vendored
+13
-12
@@ -410,7 +410,7 @@
|
||||
"以下上游数据可能不可信:": "The following upstream data may not be reliable: ",
|
||||
"以下文件解析失败,已忽略:{{list}}": "The following files failed to parse and have been ignored: {{list}}",
|
||||
"以及": "and",
|
||||
"仪表盘设置": "Dashboard Settings",
|
||||
"仪表盘设置": "Dashboard",
|
||||
"价格": "Pricing",
|
||||
"价格摘要": "Price Summary",
|
||||
"价格暂时不可用,请稍后重试": "Price temporarily unavailable, please try again later",
|
||||
@@ -678,7 +678,7 @@
|
||||
"其他": "Other",
|
||||
"其他注册选项": "Other registration options",
|
||||
"其他登录选项": "Other login options",
|
||||
"其他设置": "Other Settings",
|
||||
"其他设置": "Other",
|
||||
"其他详情": "Other details",
|
||||
"内存 阈值 (%)": "Memory Threshold (%)",
|
||||
"内存使用率超过此值时拒绝请求": "Reject requests when memory usage exceeds this value",
|
||||
@@ -699,7 +699,7 @@
|
||||
"分类名称": "Category Name",
|
||||
"分组": "Group",
|
||||
"分组JSON设置": "Group JSON Settings",
|
||||
"分组与模型定价设置": "Group and Model Pricing Settings",
|
||||
"分组与模型定价设置": "Group & Model Pricing",
|
||||
"分组价格": "Group price",
|
||||
"分组倍率": "Group ratio",
|
||||
"分组倍率设置": "Group ratio settings",
|
||||
@@ -1442,7 +1442,7 @@
|
||||
"思考预算占比": "Thinking budget ratio",
|
||||
"性能指标": "Performance Indicators",
|
||||
"性能监控": "Performance Monitor",
|
||||
"性能设置": "Performance Settings",
|
||||
"性能设置": "Performance",
|
||||
"总 GPU 小时": "Total GPU Hours",
|
||||
"总价:文字价格 {{textPrice}} + 音频价格 {{audioPrice}} = {{symbol}}{{total}}": "Total price: text price {{textPrice}} + audio price {{audioPrice}} = {{symbol}}{{total}}",
|
||||
"总分配内存": "Total Allocated Memory",
|
||||
@@ -1596,7 +1596,7 @@
|
||||
"支付方式名称": "Pay Method Name",
|
||||
"支付方式类型": "Pay Method Type",
|
||||
"支付渠道": "Payment Channels",
|
||||
"支付设置": "Payment Settings",
|
||||
"支付设置": "Payment",
|
||||
"支付请求失败": "Payment request failed",
|
||||
"支付金额": "Payment Amount",
|
||||
"支持 Ctrl+V 粘贴图片": "Supports Ctrl+V to paste images",
|
||||
@@ -2005,7 +2005,7 @@
|
||||
"模型消耗趋势": "Model consumption trend",
|
||||
"模型版本": "Model version",
|
||||
"模型的详细描述和基本特性": "Detailed description and basic characteristics of the model",
|
||||
"模型相关设置": "Model related settings",
|
||||
"模型相关设置": "Model Related",
|
||||
"模型社区需要大家的共同维护,如发现数据有误或想贡献新的模型数据,请访问:": "The model community needs everyone's contribution. If you find incorrect data or want to contribute new models, please visit:",
|
||||
"模型管理": "Model Management",
|
||||
"模型组": "Model group",
|
||||
@@ -2018,7 +2018,7 @@
|
||||
"模型部署": "Model Deployment",
|
||||
"模型部署服务未启用": "Model deployment service is not enabled",
|
||||
"模型部署管理": "Model Deployment Management",
|
||||
"模型部署设置": "Model Deployment Settings",
|
||||
"模型部署设置": "Model Deployment",
|
||||
"模型配置": "Model Configuration",
|
||||
"模型重定向": "Model mapping",
|
||||
"模型重定向里的下列模型尚未添加到“模型”列表,调用时会因为缺少可用模型而失败:": "The following models from the redirect have not been added to the “Models” list and requests will fail due to no available model:",
|
||||
@@ -2541,7 +2541,7 @@
|
||||
"系统文档和帮助信息": "System documentation and help information",
|
||||
"系统消息": "System message",
|
||||
"系统管理功能": "System management functions",
|
||||
"系统设置": "System Settings",
|
||||
"系统设置": "System",
|
||||
"系统访问令牌": "System Access Token",
|
||||
"索引": "Index",
|
||||
"紧凑列表": "Compact list",
|
||||
@@ -2570,7 +2570,7 @@
|
||||
"绘图": "Drawing",
|
||||
"绘图任务记录": "Drawing task records",
|
||||
"绘图日志": "Drawing Logs",
|
||||
"绘图设置": "Drawing settings",
|
||||
"绘图设置": "Drawing",
|
||||
"统一的": "The Unified",
|
||||
"统计Tokens": "Statistical Tokens",
|
||||
"统计已重置": "Statistics reset",
|
||||
@@ -2648,7 +2648,7 @@
|
||||
"聊天区域": "Chat Area",
|
||||
"聊天应用名称": "Chat Application Name",
|
||||
"聊天应用名称已存在,请使用其他名称": "Chat application name already exists, please use another name",
|
||||
"聊天设置": "Chat settings",
|
||||
"聊天设置": "Chat",
|
||||
"聊天配置": "Chat configuration",
|
||||
"聊天链接配置错误,请联系管理员": "Chat link configuration error, please contact administrator",
|
||||
"联系我们": "Contact Us",
|
||||
@@ -2898,6 +2898,7 @@
|
||||
"请求参数无效": "Invalid request parameters",
|
||||
"请求发生错误": "An error occurred with the request",
|
||||
"请求发生错误: ": "An error occurred with the request: ",
|
||||
"模型价格未配置": "Model Price Not Configured",
|
||||
"请求后端接口失败:": "Failed to request the backend interface: ",
|
||||
"请求失败": "Request failed",
|
||||
"请求头覆盖": "Request header override",
|
||||
@@ -3180,7 +3181,7 @@
|
||||
"过期时间不能早于当前时间!": "Expiration time cannot be earlier than the current time!",
|
||||
"过期时间快捷设置": "Expiration time quick settings",
|
||||
"过期时间格式错误!": "Expiration time format error!",
|
||||
"运营设置": "Operation Settings",
|
||||
"运营设置": "Operation",
|
||||
"运行中": "Running",
|
||||
"运行命令 (Command)": "Command",
|
||||
"运行时长": "Runtime Duration",
|
||||
@@ -3268,7 +3269,7 @@
|
||||
"通道 ${name} 余额更新成功!": "Channel ${name} quota updated successfully!",
|
||||
"通道 ${name} 测试成功,模型 ${model} 耗时 ${time.toFixed(2)} 秒。": "Channel ${name} test successful, model ${model} took ${time.toFixed(2)} seconds.",
|
||||
"通道 ${name} 测试成功,耗时 ${time.toFixed(2)} 秒。": "Channel ${name} test successful, took ${time.toFixed(2)} seconds.",
|
||||
"速率限制设置": "Rate limit settings",
|
||||
"速率限制设置": "Rate Limit",
|
||||
"逻辑": "Logic",
|
||||
"邀请": "Invitations",
|
||||
"邀请人": "Inviter",
|
||||
|
||||
Vendored
+5
-4
@@ -695,7 +695,7 @@
|
||||
"分类名称": "Nom de la catégorie",
|
||||
"分组": "Groupe",
|
||||
"分组JSON设置": "Group JSON Settings",
|
||||
"分组与模型定价设置": "Groupe et tarification",
|
||||
"分组与模型定价设置": "Groupes & tarification des modèles",
|
||||
"分组价格": "Prix de groupe",
|
||||
"分组倍率": "Ratio",
|
||||
"分组倍率设置": "Ratio de groupe",
|
||||
@@ -1439,7 +1439,7 @@
|
||||
"思考预算占比": "Ratio du budget de la pensée",
|
||||
"性能指标": "Indicateurs de performance",
|
||||
"性能监控": "Surveillance des performances",
|
||||
"性能设置": "Paramètres de performance",
|
||||
"性能设置": "Performance",
|
||||
"总 GPU 小时": "Total GPU Hours",
|
||||
"总价:文字价格 {{textPrice}} + 音频价格 {{audioPrice}} = {{symbol}}{{total}}": "Prix total : prix du texte {{textPrice}} + prix de l'audio {{audioPrice}} = {{symbol}}{{total}}",
|
||||
"总分配内存": "Mémoire totale allouée",
|
||||
@@ -1987,7 +1987,7 @@
|
||||
"模型消耗趋势": "Tendance de la consommation des modèles",
|
||||
"模型版本": "Version du modèle",
|
||||
"模型的详细描述和基本特性": "Description détaillée et caractéristiques de base du modèle",
|
||||
"模型相关设置": "Paramètres liés au modèle",
|
||||
"模型相关设置": "Modèle associé",
|
||||
"模型社区需要大家的共同维护,如发现数据有误或想贡献新的模型数据,请访问:": "La communauté des modèles a besoin de la contribution de tous. Si vous trouvez des données incorrectes ou si vous souhaitez contribuer à de nouvelles données de modèle, veuillez visiter :",
|
||||
"模型管理": "Modèles",
|
||||
"模型组": "Groupe de modèles",
|
||||
@@ -2000,7 +2000,7 @@
|
||||
"模型部署": "Model Deployment",
|
||||
"模型部署服务未启用": "Model deployment service is not enabled",
|
||||
"模型部署管理": "Model Deployment Management",
|
||||
"模型部署设置": "Model Deployment Settings",
|
||||
"模型部署设置": "Déploiement de modèles",
|
||||
"模型配置": "Configuration du modèle",
|
||||
"模型重定向": "Redirection de modèle",
|
||||
"模型重定向里的下列模型尚未添加到“模型”列表,调用时会因为缺少可用模型而失败:": "Les modèles suivants provenant de la redirection n'ont pas été ajoutés à la liste « Modèles », l'appel échouera faute de modèle disponible :",
|
||||
@@ -2871,6 +2871,7 @@
|
||||
"请求参数无效": "Invalid request parameters",
|
||||
"请求发生错误": "Une erreur s'est produite lors de la demande",
|
||||
"请求发生错误: ": "Une erreur s'est produite lors de la demande : ",
|
||||
"模型价格未配置": "Prix du modèle non configuré",
|
||||
"请求后端接口失败:": "Échec de la requête de l'interface backend : ",
|
||||
"请求失败": "Échec de la demande",
|
||||
"请求头覆盖": "Remplacement des en-têtes de demande",
|
||||
|
||||
Vendored
+13
-12
@@ -401,7 +401,7 @@
|
||||
"以下上游数据可能不可信:": "以下のアップストリームデータは信頼できない可能性があります:",
|
||||
"以下文件解析失败,已忽略:{{list}}": "以下のファイルは解析に失敗したため無視されました:{{list}}",
|
||||
"以及": "および",
|
||||
"仪表盘设置": "ダッシュボード設定",
|
||||
"仪表盘设置": "ダッシュボード",
|
||||
"价格": "料金",
|
||||
"价格摘要": "価格概要",
|
||||
"价格暂时不可用,请稍后重试": "Price temporarily unavailable, please try again later",
|
||||
@@ -665,7 +665,7 @@
|
||||
"其他": "その他",
|
||||
"其他注册选项": "その他のサインアップオプション",
|
||||
"其他登录选项": "その他のログインオプション",
|
||||
"其他设置": "その他の設定",
|
||||
"其他设置": "その他",
|
||||
"其他详情": "Other details",
|
||||
"内存 阈值 (%)": "メモリしきい値 (%)",
|
||||
"内存使用率超过此值时拒绝请求": "メモリ使用率がこの値を超えた場合にリクエストを拒否",
|
||||
@@ -686,7 +686,7 @@
|
||||
"分类名称": "分類名称",
|
||||
"分组": "グループ",
|
||||
"分组JSON设置": "グループJSON設定",
|
||||
"分组与模型定价设置": "グループとモデルの料金設定",
|
||||
"分组与模型定价设置": "グループ&モデル料金設定",
|
||||
"分组价格": "グループ料金",
|
||||
"分组倍率": "グループレート",
|
||||
"分组倍率设置": "グループ倍率設定",
|
||||
@@ -1422,7 +1422,7 @@
|
||||
"思考预算占比": "思考予算の割合",
|
||||
"性能指标": "性能指標",
|
||||
"性能监控": "パフォーマンス監視",
|
||||
"性能设置": "パフォーマンス設定",
|
||||
"性能设置": "パフォーマンス",
|
||||
"总 GPU 小时": "Total GPU Hours",
|
||||
"总价:文字价格 {{textPrice}} + 音频价格 {{audioPrice}} = {{symbol}}{{total}}": "合計料金:テキスト料金 {{textPrice}} + オーディオ料金 {{audioPrice}} = {{symbol}}{{total}}",
|
||||
"总分配内存": "総割り当てメモリ",
|
||||
@@ -1571,7 +1571,7 @@
|
||||
"支付方式名称": "決済方法名",
|
||||
"支付方式类型": "決済方法タイプ",
|
||||
"支付渠道": "決済チャネル",
|
||||
"支付设置": "決済設定",
|
||||
"支付设置": "決済",
|
||||
"支付请求失败": "決済リクエストに失敗しました",
|
||||
"支付金额": "決済金額",
|
||||
"支持 Ctrl+V 粘贴图片": "Ctrl+V で画像を貼り付け可能",
|
||||
@@ -1970,7 +1970,7 @@
|
||||
"模型消耗趋势": "モデル消費推移",
|
||||
"模型版本": "モデルバージョン",
|
||||
"模型的详细描述和基本特性": "モデルの詳細な説明と基本的な特徴",
|
||||
"模型相关设置": "モデル関連設定",
|
||||
"模型相关设置": "モデル関連",
|
||||
"模型社区需要大家的共同维护,如发现数据有误或想贡献新的模型数据,请访问:": "モデルコミュニティは皆様の協力によって維持されています。データに誤りがある場合や、新規モデルデータをコントリビュートしたい場合は、以下にアクセスしてください:",
|
||||
"模型管理": "モデル管理",
|
||||
"模型组": "モデルグループ",
|
||||
@@ -1983,7 +1983,7 @@
|
||||
"模型部署": "Model Deployment",
|
||||
"模型部署服务未启用": "Model deployment service is not enabled",
|
||||
"模型部署管理": "Model Deployment Management",
|
||||
"模型部署设置": "Model Deployment Settings",
|
||||
"模型部署设置": "モデルデプロイ",
|
||||
"模型配置": "モデル設定",
|
||||
"模型重定向": "モデルマッピング",
|
||||
"模型重定向里的下列模型尚未添加到“模型”列表,调用时会因为缺少可用模型而失败:": "The following models from the redirect have not been added to the “Models” list and requests will fail due to no available model:",
|
||||
@@ -2497,7 +2497,7 @@
|
||||
"系统文档和帮助信息": "システムのドキュメントとヘルプ",
|
||||
"系统消息": "システムメッセージ",
|
||||
"系统管理功能": "システム管理機能",
|
||||
"系统设置": "システム設定",
|
||||
"系统设置": "システム",
|
||||
"系统访问令牌": "システムアクセストークン",
|
||||
"索引": "インデックス",
|
||||
"紧凑列表": "コンパクトリスト",
|
||||
@@ -2526,7 +2526,7 @@
|
||||
"绘图": "画像生成",
|
||||
"绘图任务记录": "画像生成タスク履歴",
|
||||
"绘图日志": "画像生成履歴",
|
||||
"绘图设置": "画像生成設定",
|
||||
"绘图设置": "画像生成",
|
||||
"统一的": "統合型",
|
||||
"统计Tokens": "トークン統計",
|
||||
"统计已重置": "統計がリセットされました",
|
||||
@@ -2603,7 +2603,7 @@
|
||||
"聊天区域": "チャットエリア",
|
||||
"聊天应用名称": "チャットアプリ名",
|
||||
"聊天应用名称已存在,请使用其他名称": "このチャットアプリ名はすでに存在します。別の名称を入力してください",
|
||||
"聊天设置": "チャット設定",
|
||||
"聊天设置": "チャット",
|
||||
"聊天配置": "チャット設定",
|
||||
"聊天链接配置错误,请联系管理员": "チャットURLの設定でエラーが発生しました。管理者にお問い合わせください",
|
||||
"联系我们": "お問い合わせ",
|
||||
@@ -2852,6 +2852,7 @@
|
||||
"请求参数无效": "Invalid request parameters",
|
||||
"请求发生错误": "リクエストでエラーが発生しました",
|
||||
"请求发生错误: ": "リクエストでエラーが発生しました:",
|
||||
"模型价格未配置": "モデル価格が未設定",
|
||||
"请求后端接口失败:": "バックエンドAPIリクエストに失敗しました:",
|
||||
"请求失败": "リクエストに失敗しました",
|
||||
"请求头覆盖": "リクエストヘッダーの上書き",
|
||||
@@ -3129,7 +3130,7 @@
|
||||
"过期时间不能早于当前时间!": "有効期限は現在時刻より前に設定できません",
|
||||
"过期时间快捷设置": "有効期限クイック設定",
|
||||
"过期时间格式错误!": "有効期限のフォーマットが正しくありません",
|
||||
"运营设置": "運用設定",
|
||||
"运营设置": "運用",
|
||||
"运行中": "Running",
|
||||
"运行命令 (Command)": "Command",
|
||||
"运行时长": "Runtime Duration",
|
||||
@@ -3215,7 +3216,7 @@
|
||||
"通道 ${name} 余额更新成功!": "チャネル「${name}」のクォータを更新しました。",
|
||||
"通道 ${name} 测试成功,模型 ${model} 耗时 ${time.toFixed(2)} 秒。": "チャネル「${name}」のテストに成功しました。モデル「${model}」の所要時間 ${time.toFixed(2)} 秒。",
|
||||
"通道 ${name} 测试成功,耗时 ${time.toFixed(2)} 秒。": "チャネル「${name}」のテストに成功しました。所要時間 ${time.toFixed(2)} 秒。",
|
||||
"速率限制设置": "レート制限設定",
|
||||
"速率限制设置": "レート制限",
|
||||
"逻辑": "ロジック",
|
||||
"邀请": "招待",
|
||||
"邀请人": "招待元",
|
||||
|
||||
Vendored
+13
-12
@@ -408,7 +408,7 @@
|
||||
"以下上游数据可能不可信:": "Следующие upstream данные могут быть недостоверными:",
|
||||
"以下文件解析失败,已忽略:{{list}}": "Не удалось проанализировать следующие файлы, они проигнорированы: {{list}}",
|
||||
"以及": "а также",
|
||||
"仪表盘设置": "Настройки панели управления",
|
||||
"仪表盘设置": "Панель управления",
|
||||
"价格": "Цена",
|
||||
"价格摘要": "Сводка цен",
|
||||
"价格暂时不可用,请稍后重试": "Price temporarily unavailable, please try again later",
|
||||
@@ -680,7 +680,7 @@
|
||||
"其他": "Другое",
|
||||
"其他注册选项": "Другие варианты регистрации",
|
||||
"其他登录选项": "Другие варианты входа",
|
||||
"其他设置": "Другие настройки",
|
||||
"其他设置": "Прочее",
|
||||
"其他详情": "Другие детали",
|
||||
"内存 阈值 (%)": "Порог памяти (%)",
|
||||
"内存使用率超过此值时拒绝请求": "Отклонять запросы, когда использование памяти превышает это значение",
|
||||
@@ -701,7 +701,7 @@
|
||||
"分类名称": "Название категории",
|
||||
"分组": "Группа",
|
||||
"分组JSON设置": "Group JSON Settings",
|
||||
"分组与模型定价设置": "Настройки групп и ценообразования моделей",
|
||||
"分组与模型定价设置": "Группы и цены моделей",
|
||||
"分组价格": "Цена группы",
|
||||
"分组倍率": "Коэффициент группы",
|
||||
"分组倍率设置": "Настройки коэффициента группы",
|
||||
@@ -1451,7 +1451,7 @@
|
||||
"思考预算占比": "Доля бюджета на размышления",
|
||||
"性能指标": "Показатели производительности",
|
||||
"性能监控": "Мониторинг производительности",
|
||||
"性能设置": "Настройки производительности",
|
||||
"性能设置": "Производительность",
|
||||
"总 GPU 小时": "Total GPU Hours",
|
||||
"总价:文字价格 {{textPrice}} + 音频价格 {{audioPrice}} = {{symbol}}{{total}}": "Общая цена: цена текста {{textPrice}} + цена аудио {{audioPrice}} = {{symbol}}{{total}}",
|
||||
"总分配内存": "Общая выделенная память",
|
||||
@@ -1600,7 +1600,7 @@
|
||||
"支付方式名称": "Название метода оплаты",
|
||||
"支付方式类型": "Тип метода оплаты",
|
||||
"支付渠道": "Платежные каналы",
|
||||
"支付设置": "Настройки оплаты",
|
||||
"支付设置": "Оплата",
|
||||
"支付请求失败": "Запрос на оплату не удался",
|
||||
"支付金额": "Сумма оплаты",
|
||||
"支持 Ctrl+V 粘贴图片": "Поддержка Ctrl+V для вставки изображения",
|
||||
@@ -1999,7 +1999,7 @@
|
||||
"模型消耗趋势": "Тенденции потребления моделей",
|
||||
"模型版本": "Версия модели",
|
||||
"模型的详细描述和基本特性": "Подробное описание и основные характеристики модели",
|
||||
"模型相关设置": "Настройки, связанные с моделью",
|
||||
"模型相关设置": "Модели",
|
||||
"模型社区需要大家的共同维护,如发现数据有误或想贡献新的模型数据,请访问:": "Сообщество моделей требует совместного поддержания всеми. Если вы обнаружили ошибки в данных или хотите внести новые данные о моделях, посетите:",
|
||||
"模型管理": "Управление моделями",
|
||||
"模型组": "Группа моделей",
|
||||
@@ -2012,7 +2012,7 @@
|
||||
"模型部署": "Model Deployment",
|
||||
"模型部署服务未启用": "Model deployment service is not enabled",
|
||||
"模型部署管理": "Model Deployment Management",
|
||||
"模型部署设置": "Model Deployment Settings",
|
||||
"模型部署设置": "Развёртывание моделей",
|
||||
"模型配置": "Конфигурация модели",
|
||||
"模型重定向": "Перенаправление модели",
|
||||
"模型重定向里的下列模型尚未添加到“模型”列表,调用时会因为缺少可用模型而失败:": "Следующие модели из перенаправления ещё не добавлены в список «Модели», из-за отсутствия доступных моделей вызовы завершатся ошибкой:",
|
||||
@@ -2530,7 +2530,7 @@
|
||||
"系统文档和帮助信息": "Системная документация и справочная информация",
|
||||
"系统消息": "Системные сообщения",
|
||||
"系统管理功能": "Функции системного управления",
|
||||
"系统设置": "Системные настройки",
|
||||
"系统设置": "Система",
|
||||
"系统访问令牌": "Токен доступа к системе",
|
||||
"索引": "Индекс",
|
||||
"紧凑列表": "Компактный список",
|
||||
@@ -2559,7 +2559,7 @@
|
||||
"绘图": "Рисование",
|
||||
"绘图任务记录": "Записи задач рисования",
|
||||
"绘图日志": "Журнал рисования",
|
||||
"绘图设置": "Настройки рисования",
|
||||
"绘图设置": "Рисование",
|
||||
"统一的": "Единый",
|
||||
"统计Tokens": "Статистика токенов",
|
||||
"统计已重置": "Статистика сброшена",
|
||||
@@ -2636,7 +2636,7 @@
|
||||
"聊天区域": "Область чата",
|
||||
"聊天应用名称": "Название чат-приложения",
|
||||
"聊天应用名称已存在,请使用其他名称": "Название чат-приложения уже существует, используйте другое название",
|
||||
"聊天设置": "Настройки чата",
|
||||
"聊天设置": "Чат",
|
||||
"聊天配置": "Конфигурация чата",
|
||||
"聊天链接配置错误,请联系管理员": "Ошибка конфигурации ссылки чата, свяжитесь с администратором",
|
||||
"联系我们": "Свяжитесь с нами",
|
||||
@@ -2885,6 +2885,7 @@
|
||||
"请求参数无效": "Invalid request parameters",
|
||||
"请求发生错误": "Произошла ошибка запроса",
|
||||
"请求发生错误: ": "Произошла ошибка запроса: ",
|
||||
"模型价格未配置": "Цена модели не настроена",
|
||||
"请求后端接口失败:": "Не удалось запросить внутренний интерфейс:",
|
||||
"请求失败": "Запрос не удался",
|
||||
"请求头覆盖": "Переопределение заголовков запроса",
|
||||
@@ -3162,7 +3163,7 @@
|
||||
"过期时间不能早于当前时间!": "Время истечения не может быть раньше текущего времени!",
|
||||
"过期时间快捷设置": "Быстрая настройка времени истечения",
|
||||
"过期时间格式错误!": "Ошибка формата времени истечения!",
|
||||
"运营设置": "Операционные настройки",
|
||||
"运营设置": "Операции",
|
||||
"运行中": "Running",
|
||||
"运行命令 (Command)": "Command",
|
||||
"运行时长": "Runtime Duration",
|
||||
@@ -3248,7 +3249,7 @@
|
||||
"通道 ${name} 余额更新成功!": "Баланс канала ${name} успешно обновлен!",
|
||||
"通道 ${name} 测试成功,模型 ${model} 耗时 ${time.toFixed(2)} 秒。": "Канал ${name} успешно протестирован, модель ${model} заняла ${time.toFixed(2)} секунд.",
|
||||
"通道 ${name} 测试成功,耗时 ${time.toFixed(2)} 秒。": "Канал ${name} успешно протестирован, заняло ${time.toFixed(2)} секунд.",
|
||||
"速率限制设置": "Настройки ограничения скорости",
|
||||
"速率限制设置": "Ограничение скорости",
|
||||
"逻辑": "Логика",
|
||||
"邀请": "Приглашение",
|
||||
"邀请人": "Пригласивший",
|
||||
|
||||
Vendored
+13
-12
@@ -402,7 +402,7 @@
|
||||
"以下上游数据可能不可信:": "Dữ liệu thượng nguồn sau đây có thể không đáng tin cậy: ",
|
||||
"以下文件解析失败,已忽略:{{list}}": "Các tệp sau không phân tích được và đã bị bỏ qua: {{list}}",
|
||||
"以及": "và",
|
||||
"仪表盘设置": "Cài đặt bảng điều khiển",
|
||||
"仪表盘设置": "Bảng điều khiển",
|
||||
"价格": "Giá cả",
|
||||
"价格摘要": "Tóm tắt giá",
|
||||
"价格暂时不可用,请稍后重试": "Price temporarily unavailable, please try again later",
|
||||
@@ -666,7 +666,7 @@
|
||||
"其他": "Khác",
|
||||
"其他注册选项": "Tùy chọn đăng ký khác",
|
||||
"其他登录选项": "Tùy chọn đăng nhập khác",
|
||||
"其他设置": "Cài đặt khác",
|
||||
"其他设置": "Khác",
|
||||
"其他详情": "Other details",
|
||||
"内存 阈值 (%)": "Ngưỡng bộ nhớ (%)",
|
||||
"内存使用率超过此值时拒绝请求": "Từ chối yêu cầu khi sử dụng bộ nhớ vượt quá giá trị này",
|
||||
@@ -687,7 +687,7 @@
|
||||
"分类名称": "Tên danh mục",
|
||||
"分组": "Nhóm",
|
||||
"分组JSON设置": "Group JSON Settings",
|
||||
"分组与模型定价设置": "Cài đặt giá nhóm và mô hình",
|
||||
"分组与模型定价设置": "Nhóm & định giá mô hình",
|
||||
"分组价格": "Giá nhóm",
|
||||
"分组倍率": "Tỷ lệ nhóm",
|
||||
"分组倍率设置": "Cài đặt tỷ lệ nhóm",
|
||||
@@ -1423,7 +1423,7 @@
|
||||
"思考预算占比": "Tỷ lệ ngân sách tư duy",
|
||||
"性能指标": "Chỉ số hiệu suất",
|
||||
"性能监控": "Giám sát hiệu suất",
|
||||
"性能设置": "Cài đặt hiệu suất",
|
||||
"性能设置": "Hiệu suất",
|
||||
"总 GPU 小时": "Total GPU Hours",
|
||||
"总价:文字价格 {{textPrice}} + 音频价格 {{audioPrice}} = {{symbol}}{{total}}": "Tổng giá: giá văn bản {{textPrice}} + giá âm thanh {{audioPrice}} = {{symbol}}{{total}}",
|
||||
"总分配内存": "Tổng bộ nhớ đã phân bổ",
|
||||
@@ -1572,7 +1572,7 @@
|
||||
"支付方式名称": "Tên phương thức thanh toán",
|
||||
"支付方式类型": "Loại phương thức thanh toán",
|
||||
"支付渠道": "Kênh thanh toán",
|
||||
"支付设置": "Cài đặt thanh toán",
|
||||
"支付设置": "Thanh toán",
|
||||
"支付请求失败": "Yêu cầu thanh toán thất bại",
|
||||
"支付金额": "Số tiền thanh toán",
|
||||
"支持 Ctrl+V 粘贴图片": "Hỗ trợ Ctrl+V để dán hình ảnh",
|
||||
@@ -1984,7 +1984,7 @@
|
||||
"模型版本": "Phiên bản mô hình",
|
||||
"模型状态": "Trạng thái mô hình",
|
||||
"模型的详细描述和基本特性": "Mô tả chi tiết và các đặc điểm cơ bản của mô hình",
|
||||
"模型相关设置": "Cài đặt liên quan đến mô hình",
|
||||
"模型相关设置": "Mô hình liên quan",
|
||||
"模型社区需要大家的共同维护,如发现数据有误或想贡献新的模型数据,请访问:": "Cộng đồng mô hình cần sự đóng góp của mọi người. Nếu bạn phát hiện dữ liệu sai hoặc muốn đóng góp dữ liệu mô hình mới, vui lòng truy cập:",
|
||||
"模型管理": "Quản lý mô hình",
|
||||
"模型类型": "Loại mô hình",
|
||||
@@ -2001,7 +2001,7 @@
|
||||
"模型部署": "Model Deployment",
|
||||
"模型部署服务未启用": "Model deployment service is not enabled",
|
||||
"模型部署管理": "Model Deployment Management",
|
||||
"模型部署设置": "Model Deployment Settings",
|
||||
"模型部署设置": "Triển khai mô hình",
|
||||
"模型配置": "Cấu hình mô hình",
|
||||
"模型重定向": "Chuyển hướng mô hình",
|
||||
"模型重定向里的下列模型尚未添加到“模型”列表,调用时会因为缺少可用模型而失败:": "The following models from the redirect have not been added to the “Models” list and requests will fail due to no available model:",
|
||||
@@ -2774,7 +2774,7 @@
|
||||
"系统监控": "Giám sát hệ thống",
|
||||
"系统管理": "Quản lý hệ thống",
|
||||
"系统管理功能": "Chức năng quản lý hệ thống",
|
||||
"系统设置": "Cài đặt hệ thống",
|
||||
"系统设置": "Hệ thống",
|
||||
"系统访问令牌": "Mã thông báo truy cập hệ thống",
|
||||
"系统负载": "Tải hệ thống",
|
||||
"系统通知": "Thông báo hệ thống",
|
||||
@@ -2827,7 +2827,7 @@
|
||||
"绘图任务记录": "Hồ sơ tác vụ vẽ",
|
||||
"绘图日志": "Nhật ký vẽ",
|
||||
"绘图模型": "Mô hình vẽ",
|
||||
"绘图设置": "Cài đặt vẽ",
|
||||
"绘图设置": "Vẽ",
|
||||
"统一的": "Cổng thống nhất",
|
||||
"统计": "Thống kê",
|
||||
"统计Tokens": "Thống kê Tokens",
|
||||
@@ -2918,7 +2918,7 @@
|
||||
"聊天区域": "Khu vực trò chuyện",
|
||||
"聊天应用名称": "Tên ứng dụng trò chuyện",
|
||||
"聊天应用名称已存在,请使用其他名称": "Tên ứng dụng trò chuyện đã tồn tại, vui lòng sử dụng tên khác",
|
||||
"聊天设置": "Cài đặt trò chuyện",
|
||||
"聊天设置": "Trò chuyện",
|
||||
"聊天配置": "Cấu hình trò chuyện",
|
||||
"聊天链接配置错误,请联系管理员": "Lỗi cấu hình liên kết trò chuyện, vui lòng liên hệ quản trị viên",
|
||||
"联系": "Liên hệ",
|
||||
@@ -3243,6 +3243,7 @@
|
||||
"请求参数无效": "Invalid request parameters",
|
||||
"请求发生错误": "Đã xảy ra lỗi yêu cầu",
|
||||
"请求发生错误: ": "Đã xảy ra lỗi yêu cầu: ",
|
||||
"模型价格未配置": "Giá mô hình chưa được cấu hình",
|
||||
"请求后端接口失败:": "Yêu cầu giao diện phụ trợ thất bại: ",
|
||||
"请求失败": "Yêu cầu thất bại",
|
||||
"请求失败,请重试": "Yêu cầu thất bại, vui lòng thử lại",
|
||||
@@ -3607,7 +3608,7 @@
|
||||
"过期时间不能早于当前时间!": "Thời gian hết hạn không thể sớm hơn thời gian hiện tại!",
|
||||
"过期时间快捷设置": "Cài đặt nhanh thời gian hết hạn",
|
||||
"过期时间格式错误!": "Lỗi định dạng thời gian hết hạn!",
|
||||
"运营设置": "Cài đặt vận hành",
|
||||
"运营设置": "Vận hành",
|
||||
"运行中": "Đang chạy",
|
||||
"运行命令 (Command)": "Command",
|
||||
"运行时长": "Runtime Duration",
|
||||
@@ -3731,7 +3732,7 @@
|
||||
"通道管理": "Quản lý kênh",
|
||||
"通道类型": "Loại kênh",
|
||||
"通道设置": "Cài đặt kênh",
|
||||
"速率限制设置": "Cài đặt giới hạn tốc độ",
|
||||
"速率限制设置": "Giới hạn tốc độ",
|
||||
"逻辑": "Logic",
|
||||
"邀请": "Mời",
|
||||
"邀请人": "Người mời",
|
||||
|
||||
Vendored
+2
-1
@@ -286,7 +286,7 @@
|
||||
"以下上游数据可能不可信:": "以下上游数据可能不可信:",
|
||||
"以下文件解析失败,已忽略:{{list}}": "以下文件解析失败,已忽略:{{list}}",
|
||||
"以及": "以及",
|
||||
"仪表盘设置": "仪表盘设置",
|
||||
"仪表盘设置": "仪表盘",
|
||||
"价格": "价格",
|
||||
"价格:{{symbol}}{{price}} * {{ratioType}}:{{ratio}}": "价格:{{symbol}}{{price}} * {{ratioType}}:{{ratio}}",
|
||||
"价格:${{price}} * {{ratioType}}:{{ratio}}": "价格:${{price}} * {{ratioType}}:{{ratio}}",
|
||||
@@ -2153,6 +2153,7 @@
|
||||
"请求参数无效": "请求参数无效",
|
||||
"请求发生错误": "请求发生错误",
|
||||
"请求发生错误: ": "请求发生错误: ",
|
||||
"模型价格未配置": "模型价格未配置",
|
||||
"请求后端接口失败:": "请求后端接口失败:",
|
||||
"请求失败": "请求失败",
|
||||
"请求头覆盖": "请求头覆盖",
|
||||
|
||||
Vendored
+2
-1
@@ -602,7 +602,7 @@
|
||||
"分类名称": "分類名稱",
|
||||
"分组": "分組",
|
||||
"分组JSON设置": "分組 JSON 設定",
|
||||
"分组与模型定价设置": "分組與模型定價設定",
|
||||
"分组与模型定价设置": "分組與模型定價",
|
||||
"分组价格": "分組價格",
|
||||
"分组倍率": "分組倍率",
|
||||
"分组倍率设置": "分組倍率設定",
|
||||
@@ -2563,6 +2563,7 @@
|
||||
"请求参数无效": "請求參數無效",
|
||||
"请求发生错误": "請求發生錯誤",
|
||||
"请求发生错误: ": "請求發生錯誤: ",
|
||||
"模型价格未配置": "模型價格未配置",
|
||||
"请求后端接口失败:": "請求後端接口失敗:",
|
||||
"请求失败": "請求失敗",
|
||||
"请求头覆盖": "請求頭覆蓋",
|
||||
|
||||
Reference in New Issue
Block a user