mirror of
https://github.com/langgenius/dify.git
synced 2026-01-20 14:04:17 +00:00
Compare commits
7 Commits
main
...
copilot/su
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
266e887fb1 | ||
|
|
337701badb | ||
|
|
0d11745909 | ||
|
|
6a6997094d | ||
|
|
3f0719e50f | ||
|
|
67bab85fa6 | ||
|
|
84a1d6a948 |
@@ -1,3 +1,4 @@
|
||||
import consistentPlaceholders from './rules/consistent-placeholders.js'
|
||||
import noAsAnyInT from './rules/no-as-any-in-t.js'
|
||||
import noExtraKeys from './rules/no-extra-keys.js'
|
||||
import noLegacyNamespacePrefix from './rules/no-legacy-namespace-prefix.js'
|
||||
@@ -11,6 +12,7 @@ const plugin = {
|
||||
version: '1.0.0',
|
||||
},
|
||||
rules: {
|
||||
'consistent-placeholders': consistentPlaceholders,
|
||||
'no-as-any-in-t': noAsAnyInT,
|
||||
'no-extra-keys': noExtraKeys,
|
||||
'no-legacy-namespace-prefix': noLegacyNamespacePrefix,
|
||||
|
||||
109
web/eslint-rules/rules/consistent-placeholders.js
Normal file
109
web/eslint-rules/rules/consistent-placeholders.js
Normal file
@@ -0,0 +1,109 @@
|
||||
import fs from 'node:fs'
|
||||
import path, { normalize, sep } from 'node:path'
|
||||
import { cleanJsonText } from '../utils.js'
|
||||
|
||||
/**
|
||||
* Extract placeholders from a string
|
||||
* Matches patterns like {{name}}, {{count}}, etc.
|
||||
* @param {string} str
|
||||
* @returns {string[]} Sorted array of placeholder names
|
||||
*/
|
||||
function extractPlaceholders(str) {
|
||||
const matches = str.match(/\{\{\w+\}\}/g) || []
|
||||
return matches.map(m => m.slice(2, -2)).sort()
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two arrays and return if they're equal
|
||||
* @param {string[]} arr1
|
||||
* @param {string[]} arr2
|
||||
* @returns {boolean} True if arrays contain the same elements in the same order
|
||||
*/
|
||||
function arraysEqual(arr1, arr2) {
|
||||
if (arr1.length !== arr2.length)
|
||||
return false
|
||||
return arr1.every((val, i) => val === arr2[i])
|
||||
}
|
||||
|
||||
/** @type {import('eslint').Rule.RuleModule} */
|
||||
export default {
|
||||
meta: {
|
||||
type: 'problem',
|
||||
docs: {
|
||||
description: 'Ensure placeholders in translations match the en-US source',
|
||||
},
|
||||
},
|
||||
create(context) {
|
||||
return {
|
||||
Program(node) {
|
||||
const { filename, sourceCode } = context
|
||||
|
||||
if (!filename.endsWith('.json'))
|
||||
return
|
||||
|
||||
const parts = normalize(filename).split(sep)
|
||||
const jsonFile = parts.at(-1)
|
||||
const lang = parts.at(-2)
|
||||
|
||||
// Skip English files - they are the source of truth
|
||||
if (lang === 'en-US')
|
||||
return
|
||||
|
||||
let currentJson = {}
|
||||
let englishJson = {}
|
||||
|
||||
try {
|
||||
currentJson = JSON.parse(cleanJsonText(sourceCode.text))
|
||||
const englishFilePath = path.join(path.dirname(filename), '..', 'en-US', jsonFile ?? '')
|
||||
englishJson = JSON.parse(fs.readFileSync(englishFilePath, 'utf8'))
|
||||
}
|
||||
catch (error) {
|
||||
context.report({
|
||||
node,
|
||||
message: `Error parsing JSON: ${error instanceof Error ? error.message : String(error)}`,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// Check each key in the current translation
|
||||
for (const key of Object.keys(currentJson)) {
|
||||
// Skip if the key doesn't exist in English (handled by no-extra-keys rule)
|
||||
if (!Object.prototype.hasOwnProperty.call(englishJson, key))
|
||||
continue
|
||||
|
||||
const currentValue = currentJson[key]
|
||||
const englishValue = englishJson[key]
|
||||
|
||||
// Skip non-string values
|
||||
if (typeof currentValue !== 'string' || typeof englishValue !== 'string')
|
||||
continue
|
||||
|
||||
const currentPlaceholders = extractPlaceholders(currentValue)
|
||||
const englishPlaceholders = extractPlaceholders(englishValue)
|
||||
|
||||
if (!arraysEqual(currentPlaceholders, englishPlaceholders)) {
|
||||
const missing = englishPlaceholders.filter(p => !currentPlaceholders.includes(p))
|
||||
const extra = currentPlaceholders.filter(p => !englishPlaceholders.includes(p))
|
||||
|
||||
let message = `Placeholder mismatch in "${key}": `
|
||||
const details = []
|
||||
|
||||
if (missing.length > 0)
|
||||
details.push(`missing {{${missing.join('}}, {{')}}}`)
|
||||
|
||||
if (extra.length > 0)
|
||||
details.push(`extra {{${extra.join('}}, {{')}}}`)
|
||||
|
||||
message += details.join('; ')
|
||||
message += `. Expected: {{${englishPlaceholders.join('}}, {{') || 'none'}}}`
|
||||
|
||||
context.report({
|
||||
node,
|
||||
message,
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
@@ -131,6 +131,7 @@ export default antfu(
|
||||
|
||||
'dify-i18n/valid-i18n-keys': 'error',
|
||||
'dify-i18n/no-extra-keys': 'error',
|
||||
'dify-i18n/consistent-placeholders': 'error',
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
"task.installSuccess": "تم تثبيت {{successLength}} من الإضافات بنجاح",
|
||||
"task.installed": "مثبت",
|
||||
"task.installedError": "{{errorLength}} إضافات فشل تثبيتها",
|
||||
"task.installing": "تثبيت {{installingLength}} إضافات، 0 تم.",
|
||||
"task.installing": "تثبيت إضافات، 0 تم.",
|
||||
"task.installingWithError": "تثبيت {{installingLength}} إضافات، {{successLength}} نجاح، {{errorLength}} فشل",
|
||||
"task.installingWithSuccess": "تثبيت {{installingLength}} إضافات، {{successLength}} نجاح.",
|
||||
"task.runningPlugins": "تثبيت الإضافات",
|
||||
|
||||
@@ -251,10 +251,10 @@
|
||||
"openingStatement.notIncludeKey": "Das Anfangsprompt enthält nicht die Variable: {{key}}. Bitte fügen Sie sie dem Anfangsprompt hinzu.",
|
||||
"openingStatement.openingQuestion": "Eröffnungsfragen",
|
||||
"openingStatement.openingQuestionPlaceholder": "Sie können Variablen verwenden, versuchen Sie {{variable}} einzugeben.",
|
||||
"openingStatement.placeholder": "Schreiben Sie hier Ihre Eröffnungsnachricht, Sie können Variablen verwenden, versuchen Sie {{Variable}} zu tippen.",
|
||||
"openingStatement.placeholder": "Schreiben Sie hier Ihre Eröffnungsnachricht, Sie können Variablen verwenden, versuchen Sie {{variable}} zu tippen.",
|
||||
"openingStatement.title": "Gesprächseröffner",
|
||||
"openingStatement.tooShort": "Für die Erzeugung von Eröffnungsbemerkungen für das Gespräch werden mindestens 20 Wörter des Anfangsprompts benötigt.",
|
||||
"openingStatement.varTip": "Sie können Variablen verwenden, versuchen Sie {{Variable}} zu tippen",
|
||||
"openingStatement.varTip": "Sie können Variablen verwenden, versuchen Sie {{variable}} zu tippen",
|
||||
"openingStatement.writeOpener": "Eröffnung schreiben",
|
||||
"operation.addFeature": "Funktion hinzufügen",
|
||||
"operation.agree": "gefällt mir",
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Keine Wissensdatenbanken gefunden",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Keine Plugins gefunden",
|
||||
"gotoAnything.emptyState.noWorkflowNodesFound": "Keine Workflow-Knoten gefunden",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "Versuchen Sie einen anderen Suchbegriff oder entfernen Sie den {{mode}}-Filter",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "Versuchen Sie einen anderen Suchbegriff oder entfernen Sie den Filter",
|
||||
"gotoAnything.emptyState.trySpecificSearch": "Versuchen Sie {{shortcuts}} für spezifische Suchen",
|
||||
"gotoAnything.groups.apps": "Apps",
|
||||
"gotoAnything.groups.commands": "Befehle",
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
"stepTwo.preview": "Bestätigen & Vorschau",
|
||||
"stepTwo.previewButton": "Umschalten zum Frage-und-Antwort-Format",
|
||||
"stepTwo.previewChunk": "Vorschau Chunk",
|
||||
"stepTwo.previewChunkCount": "{{Anzahl}} Geschätzte Chunks",
|
||||
"stepTwo.previewChunkCount": "{{count}} Geschätzte Chunks",
|
||||
"stepTwo.previewChunkTip": "Klicken Sie auf die Schaltfläche \"Preview Chunk\" auf der linken Seite, um die Vorschau zu laden",
|
||||
"stepTwo.previewSwitchTipEnd": " zusätzliche Tokens verbrauchen",
|
||||
"stepTwo.previewSwitchTipStart": "Die aktuelle Chunk-Vorschau ist im Textformat, ein Wechsel zur Vorschau im Frage-und-Antwort-Format wird",
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
"debugInfo.title": "Debuggen",
|
||||
"debugInfo.viewDocs": "Dokumente anzeigen",
|
||||
"deprecated": "Abgelehnt",
|
||||
"detailPanel.actionNum": "{{num}} {{Aktion}} IINKLUSIVE",
|
||||
"detailPanel.actionNum": "{{num}} {{action}} IINKLUSIVE",
|
||||
"detailPanel.categoryTip.debugging": "Debuggen-Plugin",
|
||||
"detailPanel.categoryTip.github": "Installiert von Github",
|
||||
"detailPanel.categoryTip.local": "Lokales Plugin",
|
||||
@@ -116,7 +116,7 @@
|
||||
"detailPanel.operation.update": "Aktualisieren",
|
||||
"detailPanel.operation.viewDetail": "Im Detail sehen",
|
||||
"detailPanel.serviceOk": "Service in Ordnung",
|
||||
"detailPanel.strategyNum": "{{num}} {{Strategie}} IINKLUSIVE",
|
||||
"detailPanel.strategyNum": "{{num}} {{strategy}} IINKLUSIVE",
|
||||
"detailPanel.switchVersion": "Version wechseln",
|
||||
"detailPanel.toolSelector.auto": "Auto",
|
||||
"detailPanel.toolSelector.descriptionLabel": "Beschreibung des Werkzeugs",
|
||||
@@ -236,7 +236,7 @@
|
||||
"task.installSuccess": "{{successLength}} plugins installed successfully",
|
||||
"task.installed": "Installed",
|
||||
"task.installedError": "{{errorLength}} Plugins konnten nicht installiert werden",
|
||||
"task.installing": "Installation von {{installingLength}} Plugins, 0 erledigt.",
|
||||
"task.installing": "Installation von Plugins, 0 erledigt.",
|
||||
"task.installingWithError": "Installation von {{installingLength}} Plugins, {{successLength}} erfolgreich, {{errorLength}} fehlgeschlagen",
|
||||
"task.installingWithSuccess": "Installation von {{installingLength}} Plugins, {{successLength}} erfolgreich.",
|
||||
"task.runningPlugins": "Installing Plugins",
|
||||
|
||||
@@ -363,7 +363,7 @@
|
||||
"nodes.agent.strategyNotFoundDescAndSwitchVersion": "Die installierte Plugin-Version bietet diese Strategie nicht. Klicken Sie hier, um die Version zu wechseln.",
|
||||
"nodes.agent.strategyNotInstallTooltip": "{{strategy}} ist nicht installiert",
|
||||
"nodes.agent.strategyNotSet": "Agentische Strategie nicht festgelegt",
|
||||
"nodes.agent.toolNotAuthorizedTooltip": "{{Werkzeug}} Nicht autorisiert",
|
||||
"nodes.agent.toolNotAuthorizedTooltip": "{{tool}} Nicht autorisiert",
|
||||
"nodes.agent.toolNotInstallTooltip": "{{tool}} ist nicht installiert",
|
||||
"nodes.agent.toolbox": "Werkzeugkasten",
|
||||
"nodes.agent.tools": "Werkzeuge",
|
||||
@@ -549,8 +549,8 @@
|
||||
"nodes.iteration.deleteDesc": "Das Löschen des Iterationsknotens löscht alle untergeordneten Knoten",
|
||||
"nodes.iteration.deleteTitle": "Iterationsknoten löschen?",
|
||||
"nodes.iteration.errorResponseMethod": "Methode der Fehlerantwort",
|
||||
"nodes.iteration.error_one": "{{Anzahl}} Fehler",
|
||||
"nodes.iteration.error_other": "{{Anzahl}} Irrtümer",
|
||||
"nodes.iteration.error_one": "{{count}} Fehler",
|
||||
"nodes.iteration.error_other": "{{count}} Irrtümer",
|
||||
"nodes.iteration.flattenOutput": "Ausgabe abflachen",
|
||||
"nodes.iteration.flattenOutputDesc": "Wenn aktiviert, werden alle Iterationsergebnisse, die Arrays sind, in ein einzelnes Array zusammengeführt. Wenn deaktiviert, behalten die Ergebnisse eine verschachtelte Array-Struktur bei.",
|
||||
"nodes.iteration.input": "Eingabe",
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "No se han encontrado bases de conocimiento",
|
||||
"gotoAnything.emptyState.noPluginsFound": "No se encontraron complementos",
|
||||
"gotoAnything.emptyState.noWorkflowNodesFound": "No se encontraron nodos de flujo de trabajo",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "Intenta un término de búsqueda diferente o elimina el filtro {{mode}}",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "Intenta un término de búsqueda diferente o elimina el filtro",
|
||||
"gotoAnything.emptyState.trySpecificSearch": "Prueba {{shortcuts}} para búsquedas específicas",
|
||||
"gotoAnything.groups.apps": "Aplicaciones",
|
||||
"gotoAnything.groups.commands": "Comandos",
|
||||
@@ -161,8 +161,8 @@
|
||||
"newApp.dropDSLToCreateApp": "Suelta el archivo DSL aquí para crear la aplicación",
|
||||
"newApp.forAdvanced": "PARA USUARIOS AVANZADOS",
|
||||
"newApp.forBeginners": "Tipos de aplicación más básicos",
|
||||
"newApp.foundResult": "{{conteo}} Resultado",
|
||||
"newApp.foundResults": "{{conteo}} Resultados",
|
||||
"newApp.foundResult": "{{count}} Resultado",
|
||||
"newApp.foundResults": "{{count}} Resultados",
|
||||
"newApp.hideTemplates": "Volver a la selección de modo",
|
||||
"newApp.import": "Importación",
|
||||
"newApp.learnMore": "Aprende más",
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
"stepTwo.preview": "Confirmar y vista previa",
|
||||
"stepTwo.previewButton": "Cambiar a formato de pregunta y respuesta",
|
||||
"stepTwo.previewChunk": "Fragmento de vista previa",
|
||||
"stepTwo.previewChunkCount": "{{conteo}} Fragmentos estimados",
|
||||
"stepTwo.previewChunkCount": "{{count}} Fragmentos estimados",
|
||||
"stepTwo.previewChunkTip": "Haga clic en el botón 'Vista previa de fragmento' a la izquierda para cargar la vista previa",
|
||||
"stepTwo.previewSwitchTipEnd": " consumirá tokens adicionales",
|
||||
"stepTwo.previewSwitchTipStart": "La vista previa actual del fragmento está en formato de texto, cambiar a una vista previa en formato de pregunta y respuesta",
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
"debugInfo.title": "Depuración",
|
||||
"debugInfo.viewDocs": "Ver documentos",
|
||||
"deprecated": "Obsoleto",
|
||||
"detailPanel.actionNum": "{{num}} {{acción}} INCLUIDO",
|
||||
"detailPanel.actionNum": "{{num}} {{action}} INCLUIDO",
|
||||
"detailPanel.categoryTip.debugging": "Complemento de depuración",
|
||||
"detailPanel.categoryTip.github": "Instalado desde Github",
|
||||
"detailPanel.categoryTip.local": "Plugin Local",
|
||||
@@ -96,7 +96,7 @@
|
||||
"detailPanel.deprecation.reason.noMaintainer": "sin mantenedor",
|
||||
"detailPanel.deprecation.reason.ownershipTransferred": "propiedad transferida",
|
||||
"detailPanel.disabled": "Deshabilitado",
|
||||
"detailPanel.endpointDeleteContent": "¿Te gustaría eliminar {{nombre}}?",
|
||||
"detailPanel.endpointDeleteContent": "¿Te gustaría eliminar {{name}}?",
|
||||
"detailPanel.endpointDeleteTip": "Eliminar punto de conexión",
|
||||
"detailPanel.endpointDisableContent": "¿Te gustaría desactivar {{name}}?",
|
||||
"detailPanel.endpointDisableTip": "Deshabilitar punto de conexión",
|
||||
@@ -116,7 +116,7 @@
|
||||
"detailPanel.operation.update": "Actualizar",
|
||||
"detailPanel.operation.viewDetail": "Ver Detalle",
|
||||
"detailPanel.serviceOk": "Servicio OK",
|
||||
"detailPanel.strategyNum": "{{num}} {{estrategia}} INCLUIDO",
|
||||
"detailPanel.strategyNum": "{{num}} {{strategy}} INCLUIDO",
|
||||
"detailPanel.switchVersion": "Versión del interruptor",
|
||||
"detailPanel.toolSelector.auto": "Auto",
|
||||
"detailPanel.toolSelector.descriptionLabel": "Descripción de la herramienta",
|
||||
@@ -236,7 +236,7 @@
|
||||
"task.installSuccess": "{{successLength}} plugins installed successfully",
|
||||
"task.installed": "Installed",
|
||||
"task.installedError": "Los complementos {{errorLength}} no se pudieron instalar",
|
||||
"task.installing": "Instalando plugins {{installingLength}}, 0 hecho.",
|
||||
"task.installing": "Instalando plugins, 0 hecho.",
|
||||
"task.installingWithError": "Instalando plugins {{installingLength}}, {{successLength}} éxito, {{errorLength}} fallido",
|
||||
"task.installingWithSuccess": "Instalando plugins {{installingLength}}, {{successLength}} éxito.",
|
||||
"task.runningPlugins": "Installing Plugins",
|
||||
|
||||
@@ -303,10 +303,10 @@
|
||||
"errorMsg.fields.visionVariable": "Variable de visión",
|
||||
"errorMsg.invalidJson": "{{field}} no es un JSON válido",
|
||||
"errorMsg.invalidVariable": "Variable no válida",
|
||||
"errorMsg.noValidTool": "{{campo}} no se ha seleccionado ninguna herramienta válida",
|
||||
"errorMsg.noValidTool": "{{field}} no se ha seleccionado ninguna herramienta válida",
|
||||
"errorMsg.rerankModelRequired": "Antes de activar el modelo de reclasificación, confirme que el modelo se ha configurado correctamente en la configuración.",
|
||||
"errorMsg.startNodeRequired": "Por favor, agregue primero un nodo de inicio antes de {{operation}}",
|
||||
"errorMsg.toolParameterRequired": "{{campo}}: el parámetro [{{param}}] es obligatorio",
|
||||
"errorMsg.toolParameterRequired": "{{field}}: el parámetro [{{param}}] es obligatorio",
|
||||
"globalVar.description": "Las variables del sistema son variables globales que cualquier nodo puede usar sin conexiones cuando el tipo es correcto, como el ID del usuario final y el ID del flujo de trabajo.",
|
||||
"globalVar.fieldsDescription.appId": "ID de la aplicación",
|
||||
"globalVar.fieldsDescription.conversationId": "ID de la conversación",
|
||||
@@ -361,10 +361,10 @@
|
||||
"nodes.agent.strategy.tooltip": "Diferentes estrategias agentic determinan cómo el sistema planifica y ejecuta las llamadas a herramientas de varios pasos",
|
||||
"nodes.agent.strategyNotFoundDesc": "La versión del plugin instalado no proporciona esta estrategia.",
|
||||
"nodes.agent.strategyNotFoundDescAndSwitchVersion": "La versión del plugin instalado no proporciona esta estrategia. Haga clic para cambiar de versión.",
|
||||
"nodes.agent.strategyNotInstallTooltip": "{{estrategia}} no está instalado",
|
||||
"nodes.agent.strategyNotInstallTooltip": "{{strategy}} no está instalado",
|
||||
"nodes.agent.strategyNotSet": "Estrategia agentica No establecida",
|
||||
"nodes.agent.toolNotAuthorizedTooltip": "{{herramienta}} No autorizado",
|
||||
"nodes.agent.toolNotInstallTooltip": "{{herramienta}} no está instalada",
|
||||
"nodes.agent.toolNotAuthorizedTooltip": "{{tool}} No autorizado",
|
||||
"nodes.agent.toolNotInstallTooltip": "{{tool}} no está instalada",
|
||||
"nodes.agent.toolbox": "caja de herramientas",
|
||||
"nodes.agent.tools": "Herramientas",
|
||||
"nodes.agent.unsupportedStrategy": "Estrategia no respaldada",
|
||||
@@ -438,7 +438,7 @@
|
||||
"nodes.common.retry.retries": "{{num}} Reintentos",
|
||||
"nodes.common.retry.retry": "Reintentar",
|
||||
"nodes.common.retry.retryFailed": "Error en el reintento",
|
||||
"nodes.common.retry.retryFailedTimes": "{{veces}} reintentos fallidos",
|
||||
"nodes.common.retry.retryFailedTimes": "{{times}} reintentos fallidos",
|
||||
"nodes.common.retry.retryInterval": "Intervalo de reintento",
|
||||
"nodes.common.retry.retryOnFailure": "Volver a intentarlo en caso de error",
|
||||
"nodes.common.retry.retrySuccessful": "Volver a intentarlo correctamente",
|
||||
@@ -453,7 +453,7 @@
|
||||
"nodes.docExtractor.inputVar": "Variable de entrada",
|
||||
"nodes.docExtractor.learnMore": "Aprende más",
|
||||
"nodes.docExtractor.outputVars.text": "Texto extraído",
|
||||
"nodes.docExtractor.supportFileTypes": "Tipos de archivos de soporte: {{tipos}}.",
|
||||
"nodes.docExtractor.supportFileTypes": "Tipos de archivos de soporte: {{types}}.",
|
||||
"nodes.end.output.type": "tipo de salida",
|
||||
"nodes.end.output.variable": "variable de salida",
|
||||
"nodes.end.outputs": "Salidas",
|
||||
@@ -549,8 +549,8 @@
|
||||
"nodes.iteration.deleteDesc": "Eliminar el nodo de iteración eliminará todos los nodos secundarios",
|
||||
"nodes.iteration.deleteTitle": "¿Eliminar nodo de iteración?",
|
||||
"nodes.iteration.errorResponseMethod": "Método de respuesta a errores",
|
||||
"nodes.iteration.error_one": "{{conteo}} Error",
|
||||
"nodes.iteration.error_other": "{{conteo}} Errores",
|
||||
"nodes.iteration.error_one": "{{count}} Error",
|
||||
"nodes.iteration.error_other": "{{count}} Errores",
|
||||
"nodes.iteration.flattenOutput": "Aplanar salida",
|
||||
"nodes.iteration.flattenOutputDesc": "Cuando está habilitado, si todas las salidas de la iteración son arrays, se aplanarán en un solo array. Cuando está deshabilitado, las salidas mantendrán una estructura de array anidada.",
|
||||
"nodes.iteration.input": "Entrada",
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "هیچ پایگاه دانش یافت نشد",
|
||||
"gotoAnything.emptyState.noPluginsFound": "هیچ افزونه ای یافت نشد",
|
||||
"gotoAnything.emptyState.noWorkflowNodesFound": "هیچ گره گردش کاری یافت نشد",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "یک عبارت جستجوی متفاوت را امتحان کنید یا فیلتر {{mode}} را حذف کنید",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "یک عبارت جستجوی متفاوت را امتحان کنید یا فیلتر را حذف کنید",
|
||||
"gotoAnything.emptyState.trySpecificSearch": "{{shortcuts}} را برای جستجوهای خاص امتحان کنید",
|
||||
"gotoAnything.groups.apps": "برنامهها",
|
||||
"gotoAnything.groups.commands": "دستورات",
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
"stepTwo.preview": "تأیید و پیشنمایش",
|
||||
"stepTwo.previewButton": "تغییر به قالب پرسش و پاسخ",
|
||||
"stepTwo.previewChunk": "پیش نمایش تکه",
|
||||
"stepTwo.previewChunkCount": "{{تعداد}} تکه های تخمینی",
|
||||
"stepTwo.previewChunkCount": "{{count}} تکه های تخمینی",
|
||||
"stepTwo.previewChunkTip": "روی دکمه \"پیش نمایش قطعه\" در سمت چپ کلیک کنید تا پیش نمایش بارگیری شود",
|
||||
"stepTwo.previewSwitchTipEnd": " توکنهای اضافی مصرف خواهد کرد",
|
||||
"stepTwo.previewSwitchTipStart": "پیشنمایش بخش فعلی در قالب متن است، تغییر به پیشنمایش قالب پرسش و پاسخ",
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
"parentMode.paragraph": "پاراگراف",
|
||||
"partialEnabled_one": "مجموعاً {{count}} سند، {{num}} موجود",
|
||||
"partialEnabled_other": "مجموع {{count}} سند، {{num}} موجود",
|
||||
"preprocessDocument": "{{عدد}} اسناد پیش پردازش",
|
||||
"preprocessDocument": "{{num}} اسناد پیش پردازش",
|
||||
"rerankSettings": "تنظیمات دوباره رتبهبندی",
|
||||
"retrieval.change": "تغییر",
|
||||
"retrieval.changeRetrievalMethod": "تغییر روش بازیابی",
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
"debugInfo.title": "اشکال زدایی",
|
||||
"debugInfo.viewDocs": "مشاهده اسناد",
|
||||
"deprecated": "منسوخ شده",
|
||||
"detailPanel.actionNum": "{{عدد}} {{اقدام}} شامل",
|
||||
"detailPanel.actionNum": "{{num}} {{action}} شامل",
|
||||
"detailPanel.categoryTip.debugging": "اشکال زدایی پلاگین",
|
||||
"detailPanel.categoryTip.github": "نصب شده از Github",
|
||||
"detailPanel.categoryTip.local": "پلاگین محلی",
|
||||
@@ -106,7 +106,7 @@
|
||||
"detailPanel.endpointsDocLink": "مشاهده سند",
|
||||
"detailPanel.endpointsEmpty": "برای افزودن نقطه پایانی روی دکمه \"+\" کلیک کنید",
|
||||
"detailPanel.endpointsTip": "این افزونه عملکردهای خاصی را از طریق نقاط پایانی ارائه می دهد و می توانید چندین مجموعه نقطه پایانی را برای فضای کاری فعلی پیکربندی کنید.",
|
||||
"detailPanel.modelNum": "{{عدد}} مدل های گنجانده شده است",
|
||||
"detailPanel.modelNum": "{{num}} مدل های گنجانده شده است",
|
||||
"detailPanel.operation.back": "بازگشت",
|
||||
"detailPanel.operation.checkUpdate": "به روز رسانی را بررسی کنید",
|
||||
"detailPanel.operation.detail": "جزئیات",
|
||||
@@ -116,7 +116,7 @@
|
||||
"detailPanel.operation.update": "روز رسانی",
|
||||
"detailPanel.operation.viewDetail": "نمایش جزئیات",
|
||||
"detailPanel.serviceOk": "خدمات خوب",
|
||||
"detailPanel.strategyNum": "{{عدد}} {{استراتژی}} شامل",
|
||||
"detailPanel.strategyNum": "{{num}} {{strategy}} شامل",
|
||||
"detailPanel.switchVersion": "نسخه سوئیچ",
|
||||
"detailPanel.toolSelector.auto": "خودکار",
|
||||
"detailPanel.toolSelector.descriptionLabel": "توضیحات ابزار",
|
||||
@@ -236,7 +236,7 @@
|
||||
"task.installSuccess": "{{successLength}} plugins installed successfully",
|
||||
"task.installed": "Installed",
|
||||
"task.installedError": "افزونه های {{errorLength}} نصب نشدند",
|
||||
"task.installing": "نصب پلاگین های {{installingLength}}، 0 انجام شد.",
|
||||
"task.installing": "نصب پلاگین های ، 0 انجام شد.",
|
||||
"task.installingWithError": "نصب پلاگین های {{installingLength}}، {{successLength}} با موفقیت مواجه شد، {{errorLength}} ناموفق بود",
|
||||
"task.installingWithSuccess": "نصب پلاگین های {{installingLength}}، {{successLength}} موفقیت آمیز است.",
|
||||
"task.runningPlugins": "Installing Plugins",
|
||||
|
||||
@@ -363,8 +363,8 @@
|
||||
"nodes.agent.strategyNotFoundDescAndSwitchVersion": "نسخه افزونه نصب شده این استراتژی را ارائه نمی دهد. برای تغییر نسخه کلیک کنید.",
|
||||
"nodes.agent.strategyNotInstallTooltip": "{{strategy}} نصب نشده است",
|
||||
"nodes.agent.strategyNotSet": "استراتژی عامل تنظیم نشده است",
|
||||
"nodes.agent.toolNotAuthorizedTooltip": "{{ابزار}} مجاز نیست",
|
||||
"nodes.agent.toolNotInstallTooltip": "{{ابزار}} نصب نشده است",
|
||||
"nodes.agent.toolNotAuthorizedTooltip": "{{tool}} مجاز نیست",
|
||||
"nodes.agent.toolNotInstallTooltip": "{{tool}} نصب نشده است",
|
||||
"nodes.agent.toolbox": "جعبه ابزار",
|
||||
"nodes.agent.tools": "ابزار",
|
||||
"nodes.agent.unsupportedStrategy": "استراتژی پشتیبانی نشده",
|
||||
@@ -435,10 +435,10 @@
|
||||
"nodes.common.pluginNotInstalled": "افزونه نصب نشده است",
|
||||
"nodes.common.retry.maxRetries": "حداکثر تلاش مجدد",
|
||||
"nodes.common.retry.ms": "خانم",
|
||||
"nodes.common.retry.retries": "{{عدد}} تلاش های مجدد",
|
||||
"nodes.common.retry.retries": "{{num}} تلاش های مجدد",
|
||||
"nodes.common.retry.retry": "دوباره",
|
||||
"nodes.common.retry.retryFailed": "تلاش مجدد ناموفق بود",
|
||||
"nodes.common.retry.retryFailedTimes": "{{بار}} تلاش های مجدد ناموفق بود",
|
||||
"nodes.common.retry.retryFailedTimes": "{{times}} تلاش های مجدد ناموفق بود",
|
||||
"nodes.common.retry.retryInterval": "فاصله تلاش مجدد",
|
||||
"nodes.common.retry.retryOnFailure": "در مورد شکست دوباره امتحان کنید",
|
||||
"nodes.common.retry.retrySuccessful": "امتحان مجدد با موفقیت انجام دهید",
|
||||
@@ -549,8 +549,8 @@
|
||||
"nodes.iteration.deleteDesc": "حذف نود تکرار باعث حذف تمام نودهای فرزند خواهد شد",
|
||||
"nodes.iteration.deleteTitle": "حذف نود تکرار؟",
|
||||
"nodes.iteration.errorResponseMethod": "روش پاسخ به خطا",
|
||||
"nodes.iteration.error_one": "{{تعداد}} خطا",
|
||||
"nodes.iteration.error_other": "{{تعداد}} خطاهای",
|
||||
"nodes.iteration.error_one": "{{count}} خطا",
|
||||
"nodes.iteration.error_other": "{{count}} خطاهای",
|
||||
"nodes.iteration.flattenOutput": "صاف کردن خروجی",
|
||||
"nodes.iteration.flattenOutputDesc": "هنگامی که فعال باشد، اگر تمام خروجیهای تکرار آرایه باشند، آنها به یک آرایهٔ واحد تبدیل خواهند شد. هنگامی که غیرفعال باشد، خروجیها ساختار آرایهٔ تو در تو را حفظ میکنند.",
|
||||
"nodes.iteration.input": "ورودی",
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Aucune base de connaissances trouvée",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Aucun plugin trouvé",
|
||||
"gotoAnything.emptyState.noWorkflowNodesFound": "Aucun nœud de workflow trouvé",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "Essayez un terme de recherche différent ou supprimez le filtre {{mode}}",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "Essayez un terme de recherche différent ou supprimez le filtre",
|
||||
"gotoAnything.emptyState.trySpecificSearch": "Essayez {{shortcuts}} pour des recherches spécifiques",
|
||||
"gotoAnything.groups.apps": "Applications",
|
||||
"gotoAnything.groups.commands": "Commandes",
|
||||
|
||||
@@ -305,7 +305,7 @@
|
||||
"modelProvider.addModel": "Ajouter un modèle",
|
||||
"modelProvider.addMoreModelProvider": "AJOUTER PLUS DE FOURNISSEUR DE MODÈLE",
|
||||
"modelProvider.apiKey": "API-KEY",
|
||||
"modelProvider.apiKeyRateLimit": "La limite de débit a été atteinte, disponible après {{secondes}}s",
|
||||
"modelProvider.apiKeyRateLimit": "La limite de débit a été atteinte, disponible après {{seconds}}s",
|
||||
"modelProvider.apiKeyStatusNormal": "L’état de l’APIKey est normal",
|
||||
"modelProvider.auth.addApiKey": "Ajouter une clé API",
|
||||
"modelProvider.auth.addCredential": "Ajouter un identifiant",
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
"detailPanel.operation.update": "Mettre à jour",
|
||||
"detailPanel.operation.viewDetail": "Voir les détails",
|
||||
"detailPanel.serviceOk": "Service OK",
|
||||
"detailPanel.strategyNum": "{{num}} {{stratégie}} INCLUS",
|
||||
"detailPanel.strategyNum": "{{num}} {{strategy}} INCLUS",
|
||||
"detailPanel.switchVersion": "Version du commutateur",
|
||||
"detailPanel.toolSelector.auto": "Auto",
|
||||
"detailPanel.toolSelector.descriptionLabel": "Description de l’outil",
|
||||
@@ -236,7 +236,7 @@
|
||||
"task.installSuccess": "{{successLength}} plugins installed successfully",
|
||||
"task.installed": "Installed",
|
||||
"task.installedError": "{{errorLength}} les plugins n’ont pas pu être installés",
|
||||
"task.installing": "Installation des plugins {{installingLength}}, 0 fait.",
|
||||
"task.installing": "Installation des plugins, 0 fait.",
|
||||
"task.installingWithError": "Installation des plugins {{installingLength}}, succès de {{successLength}}, échec de {{errorLength}}",
|
||||
"task.installingWithSuccess": "Installation des plugins {{installingLength}}, succès de {{successLength}}.",
|
||||
"task.runningPlugins": "Installing Plugins",
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "कोई ज्ञान आधार नहीं मिले",
|
||||
"gotoAnything.emptyState.noPluginsFound": "कोई प्लगइन नहीं मिले",
|
||||
"gotoAnything.emptyState.noWorkflowNodesFound": "कोई कार्यप्रवाह नोड नहीं मिला",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "एक अलग खोज शब्द आज़माएं या {{mode}} फ़िल्टर हटा दें",
|
||||
"gotoAnything.emptyState.tryDifferentTerm": "एक अलग खोज शब्द आज़माएं या फ़िल्टर हटा दें",
|
||||
"gotoAnything.emptyState.trySpecificSearch": "विशिष्ट खोज के लिए {{shortcuts}} आज़माएं",
|
||||
"gotoAnything.groups.apps": "ऐप्स",
|
||||
"gotoAnything.groups.commands": "आदेश",
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
"stepTwo.preview": "पुष्टि करें और पूर्वावलोकन करें",
|
||||
"stepTwo.previewButton": "प्रश्न-उत्तर प्रारूप में स्विच करना",
|
||||
"stepTwo.previewChunk": "पूर्वावलोकन चंक",
|
||||
"stepTwo.previewChunkCount": "{{गिनती}} अनुमानित खंड",
|
||||
"stepTwo.previewChunkCount": "{{count}} अनुमानित खंड",
|
||||
"stepTwo.previewChunkTip": "पूर्वावलोकन लोड करने के लिए बाईं ओर 'पूर्वावलोकन चंक' बटन पर क्लिक करें",
|
||||
"stepTwo.previewSwitchTipEnd": " अतिरिक्त टोकन खर्च होंगे",
|
||||
"stepTwo.previewSwitchTipStart": "वर्तमान खंड पूर्वावलोकन पाठ प्रारूप में है, प्रश्न-उत्तर प्रारूप में स्विच करने से",
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
"detailPanel.operation.update": "अपडेट",
|
||||
"detailPanel.operation.viewDetail": "विवरण देखें",
|
||||
"detailPanel.serviceOk": "सेवा ठीक है",
|
||||
"detailPanel.strategyNum": "{{num}} {{रणनीति}} शामिल",
|
||||
"detailPanel.strategyNum": "{{num}} {{strategy}} शामिल",
|
||||
"detailPanel.switchVersion": "स्विच संस्करण",
|
||||
"detailPanel.toolSelector.auto": "स्वचालित",
|
||||
"detailPanel.toolSelector.descriptionLabel": "उपकरण का विवरण",
|
||||
|
||||
@@ -286,8 +286,5 @@
|
||||
"pbkdf2": "~3.1.3",
|
||||
"prismjs": "~1.30",
|
||||
"string-width": "~4.2.3"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*": "eslint --fix"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user