fix: update language settings and improve model pricing editor for better clarity and functionality

This commit is contained in:
CaIon
2026-03-06 21:36:51 +08:00
parent fb76abb329
commit c0a0285f74
23 changed files with 2217 additions and 4422 deletions
+2
View File
@@ -28,12 +28,14 @@ import zhTWTranslation from './locales/zh-TW.json';
import ruTranslation from './locales/ru.json';
import jaTranslation from './locales/ja.json';
import viTranslation from './locales/vi.json';
import { supportedLanguages } from './language';
i18n
.use(LanguageDetector)
.use(initReactI18next)
.init({
load: 'currentOnly',
supportedLngs: supportedLanguages,
resources: {
en: enTranslation,
'zh-CN': zhCNTranslation,
+61
View File
@@ -0,0 +1,61 @@
/*
Copyright (C) 2025 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
export const supportedLanguages = [
'zh-CN',
'zh-TW',
'en',
'fr',
'ru',
'ja',
'vi',
];
export const normalizeLanguage = (language) => {
if (!language) {
return language;
}
const normalized = language.trim().replace(/_/g, '-');
const lower = normalized.toLowerCase();
if (
lower === 'zh' ||
lower === 'zh-cn' ||
lower === 'zh-sg' ||
lower.startsWith('zh-hans')
) {
return 'zh-CN';
}
if (
lower === 'zh-tw' ||
lower === 'zh-hk' ||
lower === 'zh-mo' ||
lower.startsWith('zh-hant')
) {
return 'zh-TW';
}
const matchedLanguage = supportedLanguages.find(
(supportedLanguage) => supportedLanguage.toLowerCase() === lower,
);
return matchedLanguage || normalized;
};
+50 -3
View File
@@ -1718,6 +1718,7 @@
"未获取到授权码": "Authorization code not obtained",
"未设置": "Not set",
"未设置倍率模型": "Models without ratio settings",
"未设置价格模型": "Models without price settings",
"未设置路径": "",
"未配置模型": "No model configured",
"未配置的模型列表": "Models not configured",
@@ -2850,8 +2851,8 @@
"输入 OIDC 的 Userinfo Endpoint": "Enter OIDC Userinfo Endpoint",
"输入IP地址后回车,如:8.8.8.8": "Enter IP address and press Enter, e.g.: 8.8.8.8",
"输入JSON对象": "Enter JSON Object",
"输入价格": "Enter Price",
"输入价格:{{symbol}}{{price}} / 1M tokens{{audioPrice}}": "Enter price: {{symbol}}{{price}} / 1M tokens{{audioPrice}}",
"输入价格": "Input Price",
"输入价格:{{symbol}}{{price}} / 1M tokens{{audioPrice}}": "Input Price: {{symbol}}{{price}} / 1M tokens{{audioPrice}}",
"输入你注册的 LinuxDO OAuth APP 的 ID": "Enter the ID of your registered LinuxDO OAuth APP",
"输入你的账户名{{username}}以确认删除": "Enter your account name{{username}} to confirm deletion",
"输入域名后回车": "Enter domain and press Enter",
@@ -3183,6 +3184,52 @@
"默认折叠侧边栏": "Default collapse sidebar",
"默认测试模型": "Default Test Model",
"默认用户消息": "Default User Message",
"默认补全倍率": "Default completion ratio"
"默认补全倍率": "Default completion ratio",
"分组相关设置": "Group Related Settings",
"保存分组相关设置": "Save Group Related Settings",
"此页面仅显示未设置价格或基础倍率的模型,设置后会自动从列表中移出": "This page only shows models without base pricing. After saving, configured models will be removed from this list automatically.",
"没有未设置定价的模型": "No unpriced models",
"当前没有未设置定价的模型": "There are currently no models without pricing",
"模型计费编辑器": "Model Pricing Editor",
"价格摘要": "Price Summary",
"当前提示": "Current Notes",
"这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。": "This editor uses prices by default and converts them back into the ratio JSON required by the backend when saved.",
"当前未启用,需要时再打开即可。": "This field is currently disabled. Enable it when needed.",
"下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。": "The fields below show which backend values will be written after saving, so you can keep them aligned with the raw JSON editors.",
"补全价格已锁定": "Completion price is locked",
"后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。": "Backend fixed ratio: {{ratio}}. This field only displays the converted price.",
"这些价格都是可选项,不填也可以。": "All of these prices are optional and can be left empty.",
"请先开启并填写音频输入价格。": "Enable and fill in the audio input price first.",
"输入模型名称,例如 gpt-4.1": "Enter a model name, for example gpt-4.1",
"当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "This model currently has both per-request pricing and ratio-based pricing. Saving will overwrite them according to the current billing mode.",
"当前模型存在未显式设置输入倍率的扩展倍率;填写输入价格后会自动换算为价格字段。": "This model has derived ratios without an explicit input ratio. Once you fill in the input price, they will be converted into price fields automatically.",
"按量计费下需要先填写输入价格,才能保存其它价格项。": "For per-token billing, fill in the input price before saving other price fields.",
"填写音频补全价格前,需要先填写音频输入价格。": "Fill in the audio input price before setting the audio completion price.",
"模型 {{name}} 缺少输入价格,无法计算补全/缓存/图片/音频价格对应的倍率": "Model {{name}} is missing an input price, so the ratios for completion, cache, image, and audio pricing cannot be calculated.",
"模型 {{name}} 缺少音频输入价格,无法计算音频补全倍率": "Model {{name}} is missing an audio input price, so the audio completion ratio cannot be calculated.",
"批量应用当前模型价格": "Batch Apply Current Model Pricing",
"请先选择一个作为模板的模型": "Please select a model to use as the template first",
"请先勾选需要批量设置的模型": "Please select the models you want to update in batch first",
"已将模型 {{name}} 的价格配置批量应用到 {{count}} 个模型": "Applied the pricing configuration of model {{name}} to {{count}} models in batch",
"将把当前编辑中的模型 {{name}} 的价格配置,批量应用到已勾选的 {{count}} 个模型。": "The pricing configuration of the currently edited model {{name}} will be applied to the {{count}} selected models.",
"适合同系列模型一起定价,例如把 gpt-5.1 的价格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。": "Useful for pricing model variants together, for example syncing the pricing of gpt-5.1 to gpt-5.1-high, gpt-5.1-low, and similar models.",
"已勾选": "Selected",
"当前编辑": "Editing",
"已勾选 {{count}} 个模型": "{{count}} models selected",
"计费方式": "Billing Mode",
"未设置价格": "Price not set",
"保存预览": "Save Preview",
"基础价格": "Base Pricing",
"扩展价格": "Additional Pricing",
"额外价格项": "Additional price items",
"补全价格": "Completion Price",
"提示缓存价格": "Input Cache Read Price",
"缓存创建价格": "Input Cache Creation Price",
"图片输入价格": "Image Input Price",
"音频输入价格": "Audio Input Price",
"音频补全价格": "Audio Completion Price",
"适合 MJ / 任务类等按次收费模型。": "Suitable for MJ and other task-based models billed per request.",
"该模型补全倍率由后端固定为 {{ratio}}。补全价格不能在这里修改。": "This model's completion ratio is fixed to {{ratio}} by the backend. The completion price cannot be changed here.",
"空": "Empty"
}
}
+50 -3
View File
@@ -1709,6 +1709,7 @@
"未获取到授权码": "Code d'autorisation non obtenu",
"未设置": "Non défini",
"未设置倍率模型": "Modèles sans ratio",
"未设置价格模型": "Modèles sans prix",
"未设置路径": "",
"未配置模型": "Aucun modèle configuré",
"未配置的模型列表": "Modèles non configurés",
@@ -2832,8 +2833,8 @@
"输入 OIDC 的 Userinfo Endpoint": "Saisir le point de terminaison des informations utilisateur OIDC",
"输入IP地址后回车,如:8.8.8.8": "Saisissez l'adresse IP et appuyez sur Entrée, par exemple : 8.8.8.8",
"输入JSON对象": "Saisir l'objet JSON",
"输入价格": "Saisir le prix",
"输入价格:{{symbol}}{{price}} / 1M tokens{{audioPrice}}": "Saisir le prix : {{symbol}}{{price}} / 1M tokens{{audioPrice}}",
"输入价格": "Prix d'entrée",
"输入价格:{{symbol}}{{price}} / 1M tokens{{audioPrice}}": "Prix d'entrée : {{symbol}}{{price}} / 1M tokens{{audioPrice}}",
"输入你注册的 LinuxDO OAuth APP 的 ID": "Saisir l'ID de votre application OAuth LinuxDO enregistrée",
"输入你的账户名{{username}}以确认删除": "Saisissez votre nom de compte{{username}}pour confirmer la suppression",
"输入域名后回车": "Saisissez le domaine et appuyez sur Entrée",
@@ -3152,6 +3153,52 @@
"默认折叠侧边栏": "Réduire la barre latérale par défaut",
"默认测试模型": "Modèle de test par défaut",
"默认用户消息": "Bonjour",
"默认补全倍率": "Taux de complétion par défaut"
"默认补全倍率": "Taux de complétion par défaut",
"分组相关设置": "Paramètres liés aux groupes",
"保存分组相关设置": "Enregistrer les paramètres liés aux groupes",
"此页面仅显示未设置价格或基础倍率的模型,设置后会自动从列表中移出": "Cette page n'affiche que les modèles sans prix ou ratio de base. Après enregistrement, ils seront retirés automatiquement de cette liste.",
"没有未设置定价的模型": "Aucun modèle sans prix",
"当前没有未设置定价的模型": "Il n'y a actuellement aucun modèle sans prix",
"模型计费编辑器": "Éditeur de tarification des modèles",
"价格摘要": "Résumé des prix",
"当前提示": "Informations actuelles",
"这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。": "Cette interface utilise les prix par défaut et les reconvertit automatiquement en JSON de ratios requis par le backend lors de l'enregistrement.",
"当前未启用,需要时再打开即可。": "Ce champ est actuellement désactivé. Activez-le si nécessaire.",
"下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。": "Les champs backend écrits après l'enregistrement sont affichés ci-dessous afin de rester cohérents avec les éditeurs JSON bruts.",
"补全价格已锁定": "Le prix de complétion est verrouillé",
"后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。": "Ratio fixé par le backend : {{ratio}}. Ce champ affiche uniquement le prix converti.",
"这些价格都是可选项,不填也可以。": "Tous ces prix sont optionnels et peuvent être laissés vides.",
"请先开启并填写音频输入价格。": "Activez et renseignez d'abord le prix d'entrée audio.",
"输入模型名称,例如 gpt-4.1": "Saisissez un nom de modèle, par exemple gpt-4.1",
"当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "Ce modèle possède actuellement à la fois une tarification par requête et une configuration par ratio. L'enregistrement écrasera selon le mode de facturation actuel.",
"当前模型存在未显式设置输入倍率的扩展倍率;填写输入价格后会自动换算为价格字段。": "Ce modèle contient des ratios étendus sans ratio d'entrée explicite. Après saisie du prix d'entrée, ils seront convertis automatiquement en champs de prix.",
"按量计费下需要先填写输入价格,才能保存其它价格项。": "En facturation au volume, il faut d'abord renseigner le prix d'entrée avant d'enregistrer les autres prix.",
"填写音频补全价格前,需要先填写音频输入价格。": "Renseignez d'abord le prix d'entrée audio avant de définir le prix de complétion audio.",
"模型 {{name}} 缺少输入价格,无法计算补全/缓存/图片/音频价格对应的倍率": "Le modèle {{name}} n'a pas de prix d'entrée, impossible de calculer les ratios correspondants pour la complétion, le cache, les images et l'audio.",
"模型 {{name}} 缺少音频输入价格,无法计算音频补全倍率": "Le modèle {{name}} n'a pas de prix d'entrée audio, impossible de calculer le ratio de complétion audio.",
"批量应用当前模型价格": "Appliquer en lot le prix du modèle actuel",
"请先选择一个作为模板的模型": "Veuillez d'abord choisir un modèle comme modèle de référence",
"请先勾选需要批量设置的模型": "Veuillez d'abord sélectionner les modèles à configurer en lot",
"已将模型 {{name}} 的价格配置批量应用到 {{count}} 个模型": "La configuration tarifaire du modèle {{name}} a été appliquée à {{count}} modèles en lot",
"将把当前编辑中的模型 {{name}} 的价格配置,批量应用到已勾选的 {{count}} 个模型。": "La configuration tarifaire du modèle actuellement édité {{name}} sera appliquée aux {{count}} modèles sélectionnés.",
"适合同系列模型一起定价,例如把 gpt-5.1 的价格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。": "Pratique pour tarifer ensemble des variantes d'un même modèle, par exemple synchroniser le prix de gpt-5.1 vers gpt-5.1-high, gpt-5.1-low et autres variantes similaires.",
"已勾选": "Sélectionné",
"当前编辑": "En cours d'édition",
"已勾选 {{count}} 个模型": "{{count}} modèles sélectionnés",
"计费方式": "Mode de facturation",
"未设置价格": "Prix non défini",
"保存预览": "Aperçu avant enregistrement",
"基础价格": "Prix de base",
"扩展价格": "Prix supplémentaires",
"额外价格项": "Éléments de prix supplémentaires",
"补全价格": "Prix de complétion",
"提示缓存价格": "Prix de lecture du cache d'entrée",
"缓存创建价格": "Prix de création du cache d'entrée",
"图片输入价格": "Prix d'entrée image",
"音频输入价格": "Prix d'entrée audio",
"音频补全价格": "Prix de complétion audio",
"适合 MJ / 任务类等按次收费模型。": "Convient aux modèles MJ et autres modèles facturés à la requête.",
"该模型补全倍率由后端固定为 {{ratio}}。补全价格不能在这里修改。": "Le ratio de complétion de ce modèle est fixé à {{ratio}} par le backend. Le prix de complétion ne peut pas être modifié ici.",
"空": "Vide"
}
}
+49 -2
View File
@@ -1692,6 +1692,7 @@
"未获取到授权码": "認可コードの取得に失敗しました",
"未设置": "未設定",
"未设置倍率模型": "倍率が未設定のモデル",
"未设置价格模型": "価格が未設定のモデル",
"未设置路径": "",
"未配置模型": "未設定モデル",
"未配置的模型列表": "未設定のモデルリスト",
@@ -2813,7 +2814,7 @@
"输入 OIDC 的 Userinfo Endpoint": "OIDCのUserinfo Endpointを入力してください",
"输入IP地址后回车,如:8.8.8.8": "IPアドレスを入力してEnter(例:8.8.8.8",
"输入JSON对象": "JSONオブジェクトを入力してください",
"输入价格": "料金を入力してください",
"输入价格": "入力価格",
"输入价格:{{symbol}}{{price}} / 1M tokens{{audioPrice}}": "入力料金:{{symbol}}{{price}} / 1M tokens{{audioPrice}}",
"输入你注册的 LinuxDO OAuth APP 的 ID": "登録したLinuxDO OAuth APPのIDを入力してください",
"输入你的账户名{{username}}以确认删除": "削除確認: アカウント名{{username}}を入力してください",
@@ -3133,6 +3134,52 @@
"默认折叠侧边栏": "サイドバーをデフォルトで折りたたむ",
"默认测试模型": "デフォルトテストモデル",
"默认用户消息": "こんにちは",
"默认补全倍率": "デフォルト補完倍率"
"默认补全倍率": "デフォルト補完倍率",
"分组相关设置": "グループ関連設定",
"保存分组相关设置": "グループ関連設定を保存",
"此页面仅显示未设置价格或基础倍率的模型,设置后会自动从列表中移出": "このページには価格または基本倍率が未設定のモデルのみ表示され、設定後は一覧から自動的に消えます。",
"没有未设置定价的模型": "価格未設定のモデルはありません",
"当前没有未设置定价的模型": "現在、価格未設定のモデルはありません",
"模型计费编辑器": "モデル料金エディタ",
"价格摘要": "価格概要",
"当前提示": "現在のヒント",
"这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。": "この画面では価格を基準に入力し、保存時にバックエンドが必要とする倍率 JSON に自動変換されます。",
"当前未启用,需要时再打开即可。": "この項目は現在無効です。必要なときに有効にしてください。",
"下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。": "保存後にこのモデルでどのバックエンド項目に書き込まれるかを以下に表示します。元の JSON エディタとの整合確認に便利です。",
"补全价格已锁定": "補完価格はロックされています",
"后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。": "バックエンド固定倍率: {{ratio}}。この項目は変換後の価格表示のみです。",
"这些价格都是可选项,不填也可以。": "これらの価格はすべて任意項目で、未入力でも構いません。",
"请先开启并填写音频输入价格。": "先に音声入力価格を有効にして入力してください。",
"输入模型名称,例如 gpt-4.1": "モデル名を入力してください。例: gpt-4.1",
"当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "このモデルには従量価格と倍率設定が同時に存在しています。保存すると現在の課金方式に従って上書きされます。",
"当前模型存在未显式设置输入倍率的扩展倍率;填写输入价格后会自动换算为价格字段。": "このモデルには入力倍率が明示されていない拡張倍率があります。入力価格を設定すると価格項目へ自動換算されます。",
"按量计费下需要先填写输入价格,才能保存其它价格项。": "従量課金では、他の価格項目を保存する前に入力価格を設定する必要があります。",
"填写音频补全价格前,需要先填写音频输入价格。": "音声補完価格を入力する前に、先に音声入力価格を入力してください。",
"模型 {{name}} 缺少输入价格,无法计算补全/缓存/图片/音频价格对应的倍率": "モデル {{name}} に入力価格がないため、補完・キャッシュ・画像・音声価格に対応する倍率を計算できません。",
"模型 {{name}} 缺少音频输入价格,无法计算音频补全倍率": "モデル {{name}} に音声入力価格がないため、音声補完倍率を計算できません。",
"批量应用当前模型价格": "現在のモデル価格を一括適用",
"请先选择一个作为模板的模型": "まずテンプレートとして使うモデルを選択してください",
"请先勾选需要批量设置的模型": "一括設定したいモデルを先に選択してください",
"已将模型 {{name}} 的价格配置批量应用到 {{count}} 个模型": "モデル {{name}} の価格設定を {{count}} 個のモデルに一括適用しました",
"将把当前编辑中的模型 {{name}} 的价格配置,批量应用到已勾选的 {{count}} 个模型。": "現在編集中のモデル {{name}} の価格設定を、選択済みの {{count}} 個のモデルに一括適用します。",
"适合同系列模型一起定价,例如把 gpt-5.1 的价格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。": "同系列モデルをまとめて価格設定するのに適しています。例えば gpt-5.1 の価格を gpt-5.1-high、gpt-5.1-low などへ一括同期できます。",
"已勾选": "選択済み",
"当前编辑": "編集中",
"已勾选 {{count}} 个模型": "{{count}} 個のモデルを選択済み",
"计费方式": "課金方式",
"未设置价格": "価格未設定",
"保存预览": "保存プレビュー",
"基础价格": "基本価格",
"扩展价格": "追加価格",
"额外价格项": "追加価格項目",
"补全价格": "補完価格",
"提示缓存价格": "入力キャッシュ読み取り価格",
"缓存创建价格": "入力キャッシュ作成価格",
"图片输入价格": "画像入力価格",
"音频输入价格": "音声入力価格",
"音频补全价格": "音声補完価格",
"适合 MJ / 任务类等按次收费模型。": "MJ やその他のリクエスト単位課金モデルに適しています。",
"该模型补全倍率由后端固定为 {{ratio}}。补全价格不能在这里修改。": "このモデルの補完倍率はバックエンドで {{ratio}} に固定されています。ここでは補完価格を変更できません。",
"空": "空"
}
}
+49 -2
View File
@@ -1721,6 +1721,7 @@
"未获取到授权码": "Код авторизации не получен",
"未设置": "Не настроено",
"未设置倍率模型": "Модели с неустановленным множителем",
"未设置价格模型": "Модели с неустановленной ценой",
"未设置路径": "",
"未配置模型": "Ненастроенные модели",
"未配置的模型列表": "Список ненастроенных моделей",
@@ -2846,7 +2847,7 @@
"输入 OIDC 的 Userinfo Endpoint": "Введите Userinfo Endpoint OIDC",
"输入IP地址后回车,如:8.8.8.8": "Введите IP-адрес и нажмите Enter, например: 8.8.8.8",
"输入JSON对象": "Введите JSON-объект",
"输入价格": "Введите цену",
"输入价格": "Цена ввода",
"输入价格:{{symbol}}{{price}} / 1M tokens{{audioPrice}}": "Цена ввода: {{symbol}}{{price}} / 1M tokens{{audioPrice}}",
"输入你注册的 LinuxDO OAuth APP 的 ID": "Введите ID вашего зарегистрированного LinuxDO OAuth APP",
"输入你的账户名{{username}}以确认删除": "Введите имя вашей учётной записи {{username}} для подтверждения удаления",
@@ -3166,6 +3167,52 @@
"默认折叠侧边栏": "Сворачивать боковую панель по умолчанию",
"默认测试模型": "Модель для тестирования по умолчанию",
"默认用户消息": "Здравствуйте",
"默认补全倍率": "Default completion ratio"
"默认补全倍率": "Default completion ratio",
"分组相关设置": "Настройки, связанные с группами",
"保存分组相关设置": "Сохранить настройки, связанные с группами",
"此页面仅显示未设置价格或基础倍率的模型,设置后会自动从列表中移出": "На этой странице показаны только модели без цены или базового коэффициента. После сохранения они будут автоматически удалены из списка.",
"没有未设置定价的模型": "Нет моделей без цены",
"当前没有未设置定价的模型": "Сейчас нет моделей без цены",
"模型计费编辑器": "Редактор тарификации моделей",
"价格摘要": "Сводка цен",
"当前提示": "Текущие подсказки",
"这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。": "В этом интерфейсе значения по умолчанию задаются через цены, а при сохранении они автоматически преобразуются в JSON коэффициентов, требуемый backend.",
"当前未启用,需要时再打开即可。": "Это поле сейчас отключено. Включите его при необходимости.",
"下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。": "Ниже показано, какие backend-поля будут записаны после сохранения, чтобы их было удобно сверять с редакторами исходного JSON.",
"补全价格已锁定": "Цена завершения заблокирована",
"后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。": "Фиксированный backend-коэффициент: {{ratio}}. Это поле только показывает вычисленную цену.",
"这些价格都是可选项,不填也可以。": "Все эти цены необязательны и могут быть оставлены пустыми.",
"请先开启并填写音频输入价格。": "Сначала включите и заполните цену аудио-ввода.",
"输入模型名称,例如 gpt-4.1": "Введите имя модели, например gpt-4.1",
"当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "У этой модели одновременно задана цена за запрос и конфигурация коэффициентов. При сохранении данные будут перезаписаны согласно текущему режиму тарификации.",
"当前模型存在未显式设置输入倍率的扩展倍率;填写输入价格后会自动换算为价格字段。": "У этой модели есть дополнительные коэффициенты без явно заданного входного коэффициента; после ввода входной цены они будут автоматически преобразованы в ценовые поля.",
"按量计费下需要先填写输入价格,才能保存其它价格项。": "При тарификации по объему сначала нужно указать входную цену, чтобы сохранить остальные ценовые поля.",
"填写音频补全价格前,需要先填写音频输入价格。": "Перед указанием цены аудио-завершения сначала задайте цену аудио-ввода.",
"模型 {{name}} 缺少输入价格,无法计算补全/缓存/图片/音频价格对应的倍率": "У модели {{name}} отсутствует входная цена, поэтому невозможно вычислить коэффициенты для завершения, кэша, изображений и аудио.",
"模型 {{name}} 缺少音频输入价格,无法计算音频补全倍率": "У модели {{name}} отсутствует цена аудио-ввода, поэтому невозможно вычислить коэффициент аудио-завершения.",
"批量应用当前模型价格": "Массово применить цену текущей модели",
"请先选择一个作为模板的模型": "Сначала выберите модель-шаблон",
"请先勾选需要批量设置的模型": "Сначала отметьте модели для массовой настройки",
"已将模型 {{name}} 的价格配置批量应用到 {{count}} 个模型": "Ценовая конфигурация модели {{name}} массово применена к {{count}} моделям",
"将把当前编辑中的模型 {{name}} 的价格配置,批量应用到已勾选的 {{count}} 个模型。": "Ценовая конфигурация редактируемой модели {{name}} будет применена к {{count}} выбранным моделям.",
"适合同系列模型一起定价,例如把 gpt-5.1 的价格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。": "Подходит для совместной настройки цен вариантов одной модели, например синхронизации цены gpt-5.1 с gpt-5.1-high, gpt-5.1-low и похожими моделями.",
"已勾选": "Выбрано",
"当前编辑": "Текущее редактирование",
"已勾选 {{count}} 个模型": "Выбрано моделей: {{count}}",
"计费方式": "Режим тарификации",
"未设置价格": "Цена не задана",
"保存预览": "Предпросмотр сохранения",
"基础价格": "Базовые цены",
"扩展价格": "Дополнительные цены",
"额外价格项": "Дополнительные ценовые позиции",
"补全价格": "Цена завершения",
"提示缓存价格": "Цена чтения входного кеша",
"缓存创建价格": "Цена создания входного кеша",
"图片输入价格": "Цена входного изображения",
"音频输入价格": "Цена входного аудио",
"音频补全价格": "Цена завершения аудио",
"适合 MJ / 任务类等按次收费模型。": "Подходит для MJ и других моделей с тарификацией за запрос.",
"该模型补全倍率由后端固定为 {{ratio}}。补全价格不能在这里修改。": "Коэффициент завершения для этой модели зафиксирован на уровне {{ratio}} на бэкенде. Цену завершения нельзя изменить здесь.",
"空": "Пусто"
}
}
+50 -3
View File
@@ -1693,6 +1693,7 @@
"未获取到授权码": "Không lấy được mã ủy quyền",
"未设置": "Chưa thiết lập",
"未设置倍率模型": "Mô hình không có cài đặt tỷ lệ",
"未设置价格模型": "Mô hình chưa thiết lập giá",
"未设置路径": "",
"未配置模型": "Không có mô hình được cấu hình",
"未配置的模型列表": "Mô hình chưa được cấu hình",
@@ -3291,9 +3292,9 @@
"输入 OIDC 的 Userinfo Endpoint": "Nhập Userinfo Endpoint của OIDC",
"输入IP地址后回车,如:8.8.8.8": "Nhập địa chỉ IP và nhấn Enter, ví dụ: 8.8.8.8",
"输入JSON对象": "Nhập đối tượng JSON",
"输入价格": "Nhập giá",
"输入价格": "Giá đầu vào",
"输入价格:{{symbol}}{{price}} / 1M tokens": "Giá đầu vào: {{symbol}}{{price}} / 1M tokens",
"输入价格:{{symbol}}{{price}} / 1M tokens{{audioPrice}}": "Nhập giá: {{symbol}}{{price}} / 1M tokens{{audioPrice}}",
"输入价格:{{symbol}}{{price}} / 1M tokens{{audioPrice}}": "Giá đầu vào: {{symbol}}{{price}} / 1M tokens{{audioPrice}}",
"输入你注册的 LinuxDO OAuth APP 的 ID": "Nhập ID của LinuxDO OAuth APP bạn đã đăng ký",
"输入你的账户名{{username}}以确认删除": "Nhập tên tài khoản của bạn {{username}} để xác nhận xóa",
"输入倍率": "Tỷ lệ đầu vào",
@@ -3705,6 +3706,52 @@
"默认折叠侧边栏": "Mặc định thu gọn thanh bên",
"默认测试模型": "Mô hình kiểm tra mặc định",
"默认用户消息": "Xin chào",
"默认补全倍率": "Tỷ lệ hoàn thành mặc định"
"默认补全倍率": "Tỷ lệ hoàn thành mặc định",
"分组相关设置": "Cài đặt liên quan đến nhóm",
"保存分组相关设置": "Lưu cài đặt liên quan đến nhóm",
"此页面仅显示未设置价格或基础倍率的模型,设置后会自动从列表中移出": "Trang này chỉ hiển thị các mô hình chưa thiết lập giá hoặc tỷ lệ cơ bản. Sau khi lưu, chúng sẽ tự động biến mất khỏi danh sách.",
"没有未设置定价的模型": "Không có mô hình chưa thiết lập giá",
"当前没有未设置定价的模型": "Hiện không có mô hình nào chưa thiết lập giá",
"模型计费编辑器": "Trình chỉnh sửa giá mô hình",
"价格摘要": "Tóm tắt giá",
"当前提示": "Gợi ý hiện tại",
"这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。": "Giao diện này mặc định nhập theo giá, khi lưu sẽ tự động quy đổi lại thành JSON tỷ lệ mà backend yêu cầu.",
"当前未启用,需要时再打开即可。": "Trường này hiện đang tắt. Hãy bật khi cần.",
"下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。": "Bên dưới hiển thị các trường backend sẽ được ghi sau khi lưu, giúp bạn dễ đối chiếu với ô chỉnh sửa JSON gốc.",
"补全价格已锁定": "Giá hoàn thành đã bị khóa",
"后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。": "Tỷ lệ cố định từ backend: {{ratio}}. Trường này chỉ hiển thị giá sau khi quy đổi.",
"这些价格都是可选项,不填也可以。": "Tất cả các mức giá này đều là tùy chọn và có thể để trống.",
"请先开启并填写音频输入价格。": "Hãy bật và điền giá đầu vào âm thanh trước.",
"输入模型名称,例如 gpt-4.1": "Nhập tên mô hình, ví dụ gpt-4.1",
"当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "Mô hình này hiện đồng thời có giá theo lượt gọi và cấu hình tỷ lệ. Khi lưu, dữ liệu sẽ bị ghi đè theo chế độ tính phí hiện tại.",
"当前模型存在未显式设置输入倍率的扩展倍率;填写输入价格后会自动换算为价格字段。": "Mô hình này có các tỷ lệ mở rộng mà chưa đặt rõ tỷ lệ đầu vào; sau khi điền giá đầu vào, chúng sẽ tự động được quy đổi thành trường giá.",
"按量计费下需要先填写输入价格,才能保存其它价格项。": "Ở chế độ tính phí theo lượng, cần điền giá đầu vào trước thì mới lưu được các mục giá khác.",
"填写音频补全价格前,需要先填写音频输入价格。": "Trước khi nhập giá hoàn thành âm thanh, hãy nhập giá đầu vào âm thanh trước.",
"模型 {{name}} 缺少输入价格,无法计算补全/缓存/图片/音频价格对应的倍率": "Mô hình {{name}} thiếu giá đầu vào, nên không thể tính tỷ lệ tương ứng cho giá hoàn thành, bộ nhớ đệm, hình ảnh và âm thanh.",
"模型 {{name}} 缺少音频输入价格,无法计算音频补全倍率": "Mô hình {{name}} thiếu giá đầu vào âm thanh, nên không thể tính tỷ lệ hoàn thành âm thanh.",
"批量应用当前模型价格": "Áp dụng hàng loạt giá của mô hình hiện tại",
"请先选择一个作为模板的模型": "Vui lòng chọn trước một mô hình làm mẫu",
"请先勾选需要批量设置的模型": "Vui lòng chọn các mô hình cần thiết lập hàng loạt trước",
"已将模型 {{name}} 的价格配置批量应用到 {{count}} 个模型": "Đã áp dụng hàng loạt cấu hình giá của mô hình {{name}} cho {{count}} mô hình",
"将把当前编辑中的模型 {{name}} 的价格配置,批量应用到已勾选的 {{count}} 个模型。": "Cấu hình giá của mô hình đang chỉnh sửa {{name}} sẽ được áp dụng hàng loạt cho {{count}} mô hình đã chọn.",
"适合同系列模型一起定价,例如把 gpt-5.1 的价格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。": "Phù hợp để định giá cùng lúc các biến thể cùng dòng, ví dụ đồng bộ giá của gpt-5.1 sang gpt-5.1-high, gpt-5.1-low và các mô hình tương tự.",
"已勾选": "Đã chọn",
"当前编辑": "Đang chỉnh sửa",
"已勾选 {{count}} 个模型": "Đã chọn {{count}} mô hình",
"计费方式": "Chế độ tính phí",
"未设置价格": "Chưa thiết lập giá",
"保存预览": "Xem trước khi lưu",
"基础价格": "Giá cơ bản",
"扩展价格": "Giá mở rộng",
"额外价格项": "Mục giá bổ sung",
"补全价格": "Giá hoàn thành",
"提示缓存价格": "Giá đọc bộ nhớ đệm đầu vào",
"缓存创建价格": "Giá tạo bộ nhớ đệm đầu vào",
"图片输入价格": "Giá đầu vào hình ảnh",
"音频输入价格": "Giá đầu vào âm thanh",
"音频补全价格": "Giá hoàn thành âm thanh",
"适合 MJ / 任务类等按次收费模型。": "Phù hợp cho MJ và các mô hình tính phí theo lượt gọi tương tự.",
"该模型补全倍率由后端固定为 {{ratio}}。补全价格不能在这里修改。": "Tỷ lệ hoàn thành của mô hình này được backend cố định ở {{ratio}}. Không thể chỉnh giá hoàn thành tại đây.",
"空": "Trống"
}
}
+45 -1
View File
@@ -1368,6 +1368,7 @@
"未获取到授权码": "未获取到授权码",
"未设置": "未设置",
"未设置倍率模型": "未设置倍率模型",
"未设置价格模型": "未设置价格模型",
"未配置模型": "未配置模型",
"未配置的模型列表": "未配置的模型列表",
"本地": "本地",
@@ -2813,6 +2814,49 @@
"缓存写": "缓存写",
"写": "写",
"根据 Anthropic 协定,/v1/messages 的输入 tokens 仅统计非缓存输入,不包含缓存读取与缓存写入 tokens。": "根据 Anthropic 协定,/v1/messages 的输入 tokens 仅统计非缓存输入,不包含缓存读取与缓存写入 tokens。",
"未匹配到模型,按回车键可将「{{name}}」作为自定义模型名添加": "未匹配到模型,按回车键可将「{{name}}」作为自定义模型名添加"
"未匹配到模型,按回车键可将「{{name}}」作为自定义模型名添加": "未匹配到模型,按回车键可将「{{name}}」作为自定义模型名添加",
"分组相关设置": "分组相关设置",
"保存分组相关设置": "保存分组相关设置",
"此页面仅显示未设置价格或基础倍率的模型,设置后会自动从列表中移出": "此页面仅显示未设置价格或基础倍率的模型,设置后会自动从列表中移出",
"没有未设置定价的模型": "没有未设置定价的模型",
"当前没有未设置定价的模型": "当前没有未设置定价的模型",
"模型计费编辑器": "模型计费编辑器",
"价格摘要": "价格摘要",
"当前提示": "当前提示",
"这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。": "这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。",
"当前未启用,需要时再打开即可。": "当前未启用,需要时再打开即可。",
"下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。": "下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。",
"补全价格已锁定": "补全价格已锁定",
"后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。": "后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。",
"这些价格都是可选项,不填也可以。": "这些价格都是可选项,不填也可以。",
"请先开启并填写音频输入价格。": "请先开启并填写音频输入价格。",
"输入模型名称,例如 gpt-4.1": "输入模型名称,例如 gpt-4.1",
"当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。",
"当前模型存在未显式设置输入倍率的扩展倍率;填写输入价格后会自动换算为价格字段。": "当前模型存在未显式设置输入倍率的扩展倍率;填写输入价格后会自动换算为价格字段。",
"按量计费下需要先填写输入价格,才能保存其它价格项。": "按量计费下需要先填写输入价格,才能保存其它价格项。",
"填写音频补全价格前,需要先填写音频输入价格。": "填写音频补全价格前,需要先填写音频输入价格。",
"模型 {{name}} 缺少输入价格,无法计算补全/缓存/图片/音频价格对应的倍率": "模型 {{name}} 缺少输入价格,无法计算补全/缓存/图片/音频价格对应的倍率",
"模型 {{name}} 缺少音频输入价格,无法计算音频补全倍率": "模型 {{name}} 缺少音频输入价格,无法计算音频补全倍率",
"批量应用当前模型价格": "批量应用当前模型价格",
"请先选择一个作为模板的模型": "请先选择一个作为模板的模型",
"请先勾选需要批量设置的模型": "请先勾选需要批量设置的模型",
"已将模型 {{name}} 的价格配置批量应用到 {{count}} 个模型": "已将模型 {{name}} 的价格配置批量应用到 {{count}} 个模型",
"将把当前编辑中的模型 {{name}} 的价格配置,批量应用到已勾选的 {{count}} 个模型。": "将把当前编辑中的模型 {{name}} 的价格配置,批量应用到已勾选的 {{count}} 个模型。",
"适合同系列模型一起定价,例如把 gpt-5.1 的价格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。": "适合同系列模型一起定价,例如把 gpt-5.1 的价格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。",
"已勾选": "已勾选",
"当前编辑": "当前编辑",
"已勾选 {{count}} 个模型": "已勾选 {{count}} 个模型",
"基础价格": "基础价格",
"扩展价格": "扩展价格",
"额外价格项": "额外价格项",
"补全价格": "补全价格",
"提示缓存价格": "提示缓存价格",
"缓存创建价格": "缓存创建价格",
"图片输入价格": "图片输入价格",
"音频输入价格": "音频输入价格",
"音频补全价格": "音频补全价格",
"适合 MJ / 任务类等按次收费模型。": "适合 MJ / 任务类等按次收费模型。",
"该模型补全倍率由后端固定为 {{ratio}}。补全价格不能在这里修改。": "该模型补全倍率由后端固定为 {{ratio}}。补全价格不能在这里修改。",
"空": "空"
}
}
+45 -1
View File
@@ -1372,6 +1372,7 @@
"未获取到授权码": "未獲取到授權碼",
"未设置": "未設定",
"未设置倍率模型": "未設定倍率模型",
"未设置价格模型": "未設定價格模型",
"未配置模型": "未設定模型",
"未配置的模型列表": "未設定的模型列表",
"本地": "本地",
@@ -2806,6 +2807,49 @@
"自动生成:": "自動生成:",
"请先填写服务器地址,以自动生成完整的端点 URL": "請先填寫伺服器位址,以自動生成完整的端點 URL",
"端点 URL 必须是完整地址(以 http:// 或 https:// 开头)": "端點 URL 必須是完整位址(以 http:// 或 https:// 開頭)",
"未匹配到模型,按回车键可将「{{name}}」作为自定义模型名添加": "未匹配到模型,按下 Enter 鍵可將「{{name}}」作為自訂模型名稱新增"
"未匹配到模型,按回车键可将「{{name}}」作为自定义模型名添加": "未匹配到模型,按下 Enter 鍵可將「{{name}}」作為自訂模型名稱新增",
"分组相关设置": "分組相關設定",
"保存分组相关设置": "保存分組相關設定",
"此页面仅显示未设置价格或基础倍率的模型,设置后会自动从列表中移出": "此頁面僅顯示未設定價格或基礎倍率的模型,設定後會自動從列表中移出",
"没有未设置定价的模型": "沒有未設定定價的模型",
"当前没有未设置定价的模型": "目前沒有未設定定價的模型",
"模型计费编辑器": "模型計費編輯器",
"价格摘要": "價格摘要",
"当前提示": "目前提示",
"这个界面默认按价格填写,保存时会自动换算回后端需要的倍率 JSON。": "這個介面預設按價格填寫,儲存時會自動換算回後端需要的倍率 JSON。",
"当前未启用,需要时再打开即可。": "目前未啟用,需要時再開啟即可。",
"下面展示这个模型保存后会写入哪些后端字段,便于和原始 JSON 编辑框保持一致。": "下方會顯示此模型儲存後將寫入哪些後端欄位,方便與原始 JSON 編輯框保持一致。",
"补全价格已锁定": "補全價格已鎖定",
"后端固定倍率:{{ratio}}。该字段仅展示换算后的价格。": "後端固定倍率:{{ratio}}。此欄位僅展示換算後的價格。",
"这些价格都是可选项,不填也可以。": "這些價格都是可選項,不填也可以。",
"请先开启并填写音频输入价格。": "請先開啟並填寫音訊輸入價格。",
"输入模型名称,例如 gpt-4.1": "輸入模型名稱,例如 gpt-4.1",
"当前模型同时存在按次价格和倍率配置,保存时会按当前计费方式覆盖。": "目前模型同時存在按次價格與倍率配置,儲存時會依目前計費方式覆蓋。",
"当前模型存在未显式设置输入倍率的扩展倍率;填写输入价格后会自动换算为价格字段。": "目前模型存在未明確設定輸入倍率的擴展倍率;填寫輸入價格後會自動換算為價格欄位。",
"按量计费下需要先填写输入价格,才能保存其它价格项。": "按量計費下需要先填寫輸入價格,才能儲存其它價格項。",
"填写音频补全价格前,需要先填写音频输入价格。": "填寫音訊補全價格前,需要先填寫音訊輸入價格。",
"模型 {{name}} 缺少输入价格,无法计算补全/缓存/图片/音频价格对应的倍率": "模型 {{name}} 缺少輸入價格,無法計算補全、快取、圖片與音訊價格對應的倍率",
"模型 {{name}} 缺少音频输入价格,无法计算音频补全倍率": "模型 {{name}} 缺少音訊輸入價格,無法計算音訊補全倍率",
"批量应用当前模型价格": "批量套用目前模型價格",
"请先选择一个作为模板的模型": "請先選擇一個作為範本的模型",
"请先勾选需要批量设置的模型": "請先勾選需要批量設定的模型",
"已将模型 {{name}} 的价格配置批量应用到 {{count}} 个模型": "已將模型 {{name}} 的價格配置批量套用到 {{count}} 個模型",
"将把当前编辑中的模型 {{name}} 的价格配置,批量应用到已勾选的 {{count}} 个模型。": "會把目前編輯中的模型 {{name}} 的價格配置,批量套用到已勾選的 {{count}} 個模型。",
"适合同系列模型一起定价,例如把 gpt-5.1 的价格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。": "適合同系列模型一起定價,例如把 gpt-5.1 的價格批量同步到 gpt-5.1-high、gpt-5.1-low 等模型。",
"已勾选": "已勾選",
"当前编辑": "目前編輯",
"已勾选 {{count}} 个模型": "已勾選 {{count}} 個模型",
"基础价格": "基礎價格",
"扩展价格": "擴展價格",
"额外价格项": "額外價格項",
"补全价格": "補全價格",
"提示缓存价格": "提示快取價格",
"缓存创建价格": "快取建立價格",
"图片输入价格": "圖片輸入價格",
"音频输入价格": "音訊輸入價格",
"音频补全价格": "音訊補全價格",
"适合 MJ / 任务类等按次收费模型。": "適合 MJ / 任務類等按次收費模型。",
"该模型补全倍率由后端固定为 {{ratio}}。补全价格不能在这里修改。": "該模型補全倍率由後端固定為 {{ratio}}。補全價格不能在這裡修改。",
"空": "空"
}
}
-3083
View File
File diff suppressed because it is too large Load Diff