feat: knowledge pipeline (#25360)

Signed-off-by: -LAN- <laipz8200@outlook.com>
Co-authored-by: twwu <twwu@dify.ai>
Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com>
Co-authored-by: jyong <718720800@qq.com>
Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com>
Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com>
Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com>
Co-authored-by: quicksand <quicksandzn@gmail.com>
Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com>
Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com>
Co-authored-by: zxhlyh <jasonapring2015@outlook.com>
Co-authored-by: Yongtao Huang <yongtaoh2022@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: nite-knite <nkCoding@gmail.com>
Co-authored-by: Hanqing Zhao <sherry9277@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Harry <xh001x@hotmail.com>
This commit is contained in:
-LAN-
2025-09-18 12:49:10 +08:00
committed by GitHub
parent 7dadb33003
commit 85cda47c70
1772 changed files with 102407 additions and 31710 deletions

View File

@ -340,6 +340,19 @@ const translation = {
'jsonSchema': 'Schema JSON',
'checkbox': 'Caseta de selectare',
'json': 'Cod JSON',
'unit': 'Unitate',
'placeholder': 'Substituent',
'noDefaultSelected': 'Nu selecta',
'displayName': 'Nume afișat',
'startChecked': 'Pornire verificată',
'startSelectedOption': 'Porniți opțiunea selectată',
'uploadMethod': 'Metoda de încărcare',
'tooltipsPlaceholder': 'Introduceți textul util afișat atunci când treceți cu mouse-ul peste etichetă',
'showAllSettings': 'Afișează toate setările',
'tooltips': 'Sfaturi',
'unitPlaceholder': 'Afișați unități după numere, de exemplu jetoane',
'placeholderPlaceholder': 'Introduceți text de afișat atunci când câmpul este gol',
'defaultValuePlaceholder': 'Introduceți valoarea implicită pentru a precompleta câmpul',
},
vision: {
name: 'Viziune',

View File

@ -80,6 +80,7 @@ const translation = {
forAdvanced: 'PENTRU UTILIZATORII AVANSAȚI',
chooseAppType: 'Alegeți un tip de aplicație',
dropDSLToCreateApp: 'Trageți fișierul DSL aici pentru a crea aplicația',
import: 'Importa',
},
editApp: 'Editează Info',
editAppTitle: 'Editează Info Aplicație',

View File

@ -93,6 +93,7 @@ const translation = {
freeTrialTip: 'perioadă de probă gratuită de 200 de apeluri OpenAI.',
documentsRequestQuotaTooltip: 'Specificați numărul total de acțiuni pe care un spațiu de lucru le poate efectua pe minut în cadrul bazei de cunoștințe, inclusiv crearea, ștergerea, actualizările setului de date, încărcările de documente, modificările, arhivarea și interogările bazei de cunoștințe. Acest metric este utilizat pentru a evalua performanța cererilor din baza de cunoștințe. De exemplu, dacă un utilizator Sandbox efectuează 10 teste consecutive de hituri într-un minut, spațiul său de lucru va fi restricționat temporar de la efectuarea următoarelor acțiuni pentru minutul următor: crearea setului de date, ștergerea, actualizările și încărcările sau modificările documentelor.',
apiRateLimitTooltip: 'Limita de rată API se aplică tuturor cererilor efectuate prin API-ul Dify, inclusiv generarea de texte, conversațiile de chat, execuțiile fluxului de lucru și procesarea documentelor.',
startBuilding: 'Începeți să construiți',
},
plans: {
sandbox: {
@ -115,6 +116,15 @@ const translation = {
description: 'Obțineți capacități și asistență complete pentru sisteme critice la scară largă.',
includesTitle: 'Tot ce este în planul Echipă, plus:',
features: {
1: 'Autorizare licență comercială',
3: 'Mai multe spații de lucru și managementul întreprinderii',
2: 'Funcții exclusive pentru întreprinderi',
7: 'Actualizări și întreținere de către Dify oficial',
0: 'Soluții de implementare scalabile la nivel de întreprindere',
4: 'SSO',
8: 'Asistență tehnică profesională',
5: 'SLA-uri negociate de partenerii Dify',
6: 'Securitate și controale avansate',
},
for: 'Pentru echipe de mari dimensiuni',
price: 'Personalizat',
@ -123,6 +133,9 @@ const translation = {
},
community: {
features: {
2: 'Respectă licența Dify Open Source',
0: 'Toate caracteristicile de bază lansate în depozitul public',
1: 'Spațiu de lucru unic',
},
description: 'Pentru utilizatori individuali, echipe mici sau proiecte necomerciale',
btnText: 'Începe cu Comunitatea',
@ -133,6 +146,10 @@ const translation = {
},
premium: {
features: {
1: 'Spațiu de lucru unic',
3: 'Asistență prioritară prin e-mail și chat',
2: 'Personalizarea logo-ului și brandingului WebApp',
0: 'Fiabilitate autogestionată de diverși furnizori de cloud',
},
btnText: 'Obține Premium în',
description: 'Pentru organizații și echipe de dimensiuni medii',

View File

@ -491,6 +491,14 @@ const translation = {
modelCredentials: 'Credențiale model',
specifyModelCredentialTip: 'Utilizați un acreditiv de model configurat.',
addNewModelCredential: 'Adăugați acreditive noi pentru model',
modelCredential: 'Model de acreditare',
removeModel: 'Eliminați modelul',
addModel: 'Adăugați model',
selectModelCredential: 'Selectați o acreditare model',
editModelCredential: 'Editarea acreditării modelului',
customModelCredentials: 'Acreditări model personalizate',
manageCredentials: 'Gestionați acreditările',
customModelCredentialsDeleteTip: 'Acreditarea este în uz și nu poate fi ștearsă',
},
},
dataSource: {
@ -590,6 +598,7 @@ const translation = {
viewDoc: 'Vizualizați documentația',
relatedApp: 'aplicații asociate',
noRelatedApp: 'Fără aplicații conectate',
pipeline: 'Pipeline',
},
voiceInput: {
speaking: 'Vorbiți acum...',
@ -749,6 +758,9 @@ const translation = {
placeholder: 'Vă rugăm să descrieți ce a mers prost sau cum putem îmbunătăți...',
title: 'Oferiți feedback',
},
label: {
optional: '(opțional)',
},
}
export default translation

View File

@ -87,6 +87,7 @@ const translation = {
configureFirecrawl: 'Configurează Firecrawl',
watercrawlDoc: 'Documentele Watercrawl',
configureWatercrawl: 'Configurează Watercrawl',
running: 'Rulează',
},
cancel: 'Anula',
},
@ -172,6 +173,7 @@ const translation = {
qaSwitchHighQualityTipContent: 'În prezent, numai metoda de index de înaltă calitate acceptă fragmentarea formatului de întrebări și răspunsuri. Doriți să treceți la modul de înaltă calitate?',
parentChildChunkDelimiterTip: 'Un delimitator este caracterul folosit pentru a separa textul. \\n este recomandat pentru împărțirea bucăților părinte în bucăți copii mici. De asemenea, puteți utiliza delimitatori speciali definiți de dvs.',
useQALanguage: 'Fragmentați folosind formatul Întrebări și răspunsuri în',
qaTip: 'Când utilizați date structurate de întrebări și răspunsuri, puteți crea documente care asociază întrebări cu răspunsuri. Aceste documente sunt indexate pe baza porțiunii de întrebare, permițând sistemului să preia răspunsuri relevante pe baza similitudinii interogărilor.',
},
stepThree: {
creationTitle: '🎉 Cunoștință creată',

View File

@ -99,6 +99,9 @@ const translation = {
upload_file: 'Încarcă fișier',
notion: 'Sincronizează din Notion',
github: 'Sincronizează din Github',
local_file: 'Fișier local',
website_crawl: 'Accesarea cu crawlere a site-ului web',
online_document: 'Online Document',
},
type: {
book: 'Carte',
@ -336,6 +339,7 @@ const translation = {
childMaxTokens: 'Copil',
parentMaxTokens: 'Părinte',
pause: 'Pauză',
waiting: 'Așteptând încorporarea...',
},
segment: {
paragraphs: 'Paragrafe',

View File

@ -0,0 +1,154 @@
const translation = {
creation: {
createFromScratch: {
description: 'Creați o conductă personalizată de la zero, cu control deplin asupra procesării și structurii datelor.',
title: 'Conductă de cunoștințe goală',
},
caution: 'Prudență',
backToKnowledge: 'Înapoi la cunoștințe',
importDSL: 'Importul dintr-un fișier DSL',
createKnowledge: 'Creați cunoștințe',
errorTip: 'Nu s-a reușit crearea unei baze de cunoștințe',
successTip: 'Crearea cu succes a unei baze de cunoștințe',
},
templates: {
customized: 'Personalizate',
},
operations: {
convert: 'Converti',
preview: 'Previzualizare',
details: 'Detalii',
process: 'Proces',
editInfo: 'Editați informațiile',
backToDataSource: 'Înapoi la sursa de date',
dataSource: 'Sursa datelor',
choose: 'Alege',
exportPipeline: 'Export Pipeline',
useTemplate: 'Utilizați această conductă de cunoștințe',
saveAndProcess: 'Salvați și procesați',
},
deletePipeline: {
title: 'Sunteți sigur că ștergeți acest șablon de conductă?',
content: 'Ștergerea șablonului de conductă este ireversibilă.',
},
publishPipeline: {
success: {
message: 'Fluxul de cunoștințe publicat',
},
error: {
message: 'Nu s-a reușit publicarea canalului de cunoștințe',
},
},
publishTemplate: {
success: {
learnMore: 'Află mai multe',
tip: 'Puteți utiliza acest șablon pe pagina de creare.',
message: 'Șablon de conductă publicat',
},
error: {
message: 'Nu s-a reușit publicarea șablonului de conductă',
},
},
exportDSL: {
errorTip: 'Nu s-a reușit exportul DSL al conductei',
successTip: 'Exportați cu succes DSL',
},
details: {
structure: 'Structură',
structureTooltip: 'Structura de bucăți determină modul în care documentele sunt împărțite și indexate - oferind modurile General, Părinte-Copil și Întrebări și răspunsuri - și este unică pentru fiecare bază de cunoștințe.',
},
testRun: {
steps: {
dataSource: 'Sursa datelor',
documentProcessing: 'Procesarea documentelor',
},
dataSource: {
localFiles: 'Fișiere locale',
},
notion: {
docTitle: 'Documente Notion',
title: 'Alegeți paginile Notion',
},
tooltip: 'În modul de testare, este permis importul unui singur document la un moment dat pentru o depanare și o observare mai ușoară.',
title: 'Rulare de testare',
},
inputFieldPanel: {
uniqueInputs: {
title: 'Intrări unice pentru fiecare intrare',
tooltip: 'Intrările unice sunt accesibile numai sursei de date selectate și nodurilor sale din aval. Utilizatorii nu vor trebui să-l completeze atunci când aleg alte surse de date. Numai câmpurile de intrare la care se face referire variabilele sursei de date vor apărea în primul pas (Sursă de date). Toate celelalte câmpuri vor fi afișate în al doilea pas (Procesați documente).',
},
globalInputs: {
tooltip: 'Intrările globale sunt partajate între toate nodurile. Utilizatorii vor trebui să le completeze atunci când selectează orice sursă de date. De exemplu, câmpuri precum delimitatorul și lungimea maximă a bucății pot fi aplicate uniform în mai multe surse de date. Numai câmpurile de intrare la care se face referire variabilele Sursă de date apar în primul pas (Sursă de date). Toate celelalte câmpuri apar în al doilea pas (Procesare documente).',
title: 'Intrări globale pentru toate intrările',
},
preview: {
stepOneTitle: 'Sursa datelor',
stepTwoTitle: 'Procesați documente',
},
error: {
variableDuplicate: 'Numele variabilei există deja. Vă rugăm să alegeți un alt nume.',
},
title: 'Câmpuri de introducere a utilizatorului',
editInputField: 'Editați câmpul de intrare',
addInputField: 'Adăugați câmp de intrare',
description: 'Câmpurile de introducere ale utilizatorului sunt utilizate pentru a defini și colecta variabilele necesare în timpul procesului de execuție a conductei. Utilizatorii pot personaliza tipul de câmp și pot configura flexibil valoarea de intrare pentru a satisface nevoile diferitelor surse de date sau etape de procesare a documentelor.',
},
addDocuments: {
steps: {
processDocuments: 'Procesați documente',
processingDocuments: 'Procesarea documentelor',
chooseDatasource: 'Alegeți o sursă de date',
},
stepOne: {
preview: 'Previzualizare',
},
stepTwo: {
chunkSettings: 'Setări bucăți',
previewChunks: 'Previzualizați bucăți',
},
stepThree: {
learnMore: 'Află mai multe',
},
characters: 'Caractere',
backToDataSource: 'Sursa datelor',
title: 'Adăugarea documentelor',
},
documentSettings: {
title: 'Setări document',
},
onlineDocument: {},
onlineDrive: {
breadcrumbs: {
allFiles: 'Toate fișierele',
allBuckets: 'Toate gălețile de stocare în cloud',
searchPlaceholder: 'Căutați fișiere...',
},
resetKeywords: 'Resetați cuvintele cheie',
emptyFolder: 'Acest folder este gol',
notSupportedFileType: 'Acest tip de fișier nu este acceptat',
emptySearchResult: 'Nu au fost găsite obiecte',
},
credentialSelector: {},
conversion: {
confirm: {
title: 'Confirmare',
content: 'Această acțiune este permanentă. Nu veți putea reveni la metoda anterioară. Vă rugăm să confirmați pentru a converti.',
},
warning: 'Această acțiune nu poate fi anulată.',
title: 'Conversia în Knowledge Pipeline',
errorMessage: 'Nu s-a reușit să se convertească setul de date într-o conductă',
successMessage: 'Conversia cu succes a setului de date într-o conductă',
descriptionChunk2: '— o abordare mai deschisă și mai flexibilă, cu acces la plugin-uri de pe piața noastră. Aceasta va aplica noua metodă de procesare tuturor documentelor viitoare.',
descriptionChunk1: 'Acum puteți converti baza de cunoștințe existentă pentru a utiliza Pipeline de cunoștințe pentru procesarea documentelor',
},
knowledgePermissions: 'Permisiuni',
knowledgeDescription: 'Descrierea cunoștințelor',
pipelineNameAndIcon: 'Numele și pictograma conductei',
knowledgeNameAndIcon: 'Nume și pictogramă de cunoștințe',
editPipelineInfo: 'Editați informațiile despre conductă',
knowledgeNameAndIconPlaceholder: 'Vă rugăm să introduceți numele bazei de cunoștințe',
knowledgeDescriptionPlaceholder: 'Descrieți ce este în această bază de cunoștințe. O descriere detaliată permite AI să acceseze mai precis conținutul setului de date. Dacă este gol, Dify va folosi strategia implicită de accesare. (Opțional)',
inputField: 'Câmp de intrare',
}
export default translation

View File

@ -37,6 +37,14 @@ const translation = {
upgradeHighQualityTip: 'După ce faceți upgrade la modul Înaltă calitate, revenirea la modul Economic nu este disponibilă',
helpText: 'Aflați cum să scrieți o descriere bună a setului de date.',
searchModel: 'Căutare model',
chunkStructure: {
learnMore: 'Află mai multe',
title: 'Structura bucății',
description: 'despre Chunk Structure.',
},
nameAndIcon: 'Nume și pictogramă',
onSearchResults: 'Niciun membru nu corespunde interogării de căutare.\nÎncercați din nou căutarea.',
numberOfKeywords: 'Număr de cuvinte cheie',
},
}

View File

@ -42,6 +42,10 @@ const translation = {
},
change: 'Schimbă',
changeRetrievalMethod: 'Schimbă metoda de recuperare',
keyword_search: {
description: 'Indexul inversat este o structură utilizată pentru o recuperare eficientă. Organizat pe termeni, fiecare termen indică documente sau pagini web care îl conțin.',
title: 'Indice inversat',
},
},
docsFailedNotice: 'documentele nu au putut fi indexate',
retry: 'Reîncercați',
@ -149,6 +153,8 @@ const translation = {
chunkingMode: {
general: 'General',
parentChild: 'Părinte-copil',
graph: 'Grafic',
qa: 'Întrebări și răspunsuri',
},
parentMode: {
paragraph: 'Paragraf',
@ -217,6 +223,9 @@ const translation = {
chooseTime: 'Alege o oră...',
},
embeddingModelNotAvailable: 'Modelul de încorporare nu este disponibil.',
updated: 'Actualizat',
externalKnowledgeBase: 'Baza de cunoștințe externă',
createFromPipeline: 'Crearea din Knowledge Pipeline',
}
export default translation

View File

@ -1,4 +1,8 @@
const translation = {
sidebar: {
collapseSidebar: 'Restrângere bară laterală',
expandSidebar: 'Extindeți bara laterală',
},
}
export default translation

View File

@ -0,0 +1,38 @@
const translation = {
common: {
publishAsPipeline: {
name: 'Numele și pictograma conductei',
description: 'Descrierea cunoștințelor',
namePlaceholder: 'Vă rugăm să introduceți numele acestui Knowledge Pipeline. (Obligatoriu)',
descriptionPlaceholder: 'Vă rugăm să introduceți descrierea acestui Pipeline de cunoștințe. (Opțional)',
},
processing: 'Prelucrare',
confirmPublish: 'Confirmați publicarea',
testRun: 'Rulare de testare',
preparingDataSource: 'Pregătirea sursei de date',
publishAs: 'Publicarea ca canal de cunoștințe',
goToAddDocuments: 'Accesați adăugarea documentelor',
reRun: 'Reluare',
confirmPublishContent: 'După publicarea cu succes a conductei de cunoștințe, structura de bucăți a acestei baze de cunoștințe nu poate fi modificată. Ești sigur că vrei să-l publici?',
},
inputField: {
manage: 'Gestiona',
create: 'Creați câmpul de introducere a utilizatorului',
},
publishToast: {
title: 'Această conductă nu a fost încă publicată',
desc: 'Când conducta nu este publicată, puteți modifica structura bucății în nodul bazei de cunoștințe, iar orchestrarea și modificările conductei vor fi salvate automat ca schiță.',
},
result: {
resultPreview: {
loading: 'Prelucrare... Te rog să aştepţi',
viewDetails: 'Vezi detalii',
error: 'A apărut o eroare în timpul execuției',
},
},
ragToolSuggestions: {
title: 'Sugestii pentru RAG',
},
}
export default translation

View File

@ -17,6 +17,7 @@ const translation = {
business: 'Afacere',
weather: 'Vreme',
image: 'Imagine',
rag: 'CÂRPĂ',
},
allTags: 'Toate etichetele',
searchTags: 'Etichete de căutare',

View File

@ -6,6 +6,7 @@ const translation = {
tools: 'Instrumente',
extensions: 'Extensii',
models: 'Modele',
datasources: 'Surse de date',
},
categorySingle: {
tool: 'Unealtă',
@ -13,6 +14,7 @@ const translation = {
extension: 'Extensie',
agent: 'Strategia agentului',
model: 'Model',
datasource: 'Sursa datelor',
},
list: {
source: {
@ -250,6 +252,8 @@ const translation = {
customCredentialUnavailable: 'Credentialele personalizate sunt în prezent indisponibile',
credentialUnavailable: 'Credențialele nu sunt disponibile în acest moment. Vă rugăm să contactați administratorul.',
credentialUnavailableInButton: 'Credential indisponibil',
connectedWorkspace: 'Spațiu de lucru conectat',
emptyAuth: 'Vă rugăm să configurați autentificarea',
},
deprecated: 'Încetat de a mai fi utilizat',
autoUpdate: {

View File

@ -244,6 +244,7 @@ const translation = {
publishTip: 'Aplicație nepublicată. Publicați aplicația mai întâi.',
},
},
allTools: 'Toate instrumentele',
}
export default translation

View File

@ -86,7 +86,6 @@ const translation = {
depthLimit: 'Limita straturilor de imbricare paralelă a {{num}} straturi',
limit: 'Paralelismul este limitat la {{num}} ramuri.',
},
parallelRun: 'Rulare paralelă',
disconnect: 'Deconecta',
jumpToNode: 'Sari la acest nod',
addParallelNode: 'Adăugare nod paralel',
@ -218,6 +217,8 @@ const translation = {
back: 'Înapoi',
iteration: 'Iterație',
loop: 'Loop',
reRun: 'Reluare',
preparingDataSource: 'Pregătirea sursei de date',
},
tabs: {
'tools': 'Instrumente',
@ -236,6 +237,8 @@ const translation = {
'searchBlock': 'Căutare nod',
'addAll': 'Adaugă tot',
'allAdded': 'Toate adăugate',
'sources': 'Surse',
'searchDataSource': 'Sursa de date de căutare',
},
blocks: {
'start': 'Începe',
@ -260,6 +263,8 @@ const translation = {
'loop': 'Loop',
'loop-end': 'Ieșire din buclă',
'loop-start': 'Întreținere buclă',
'knowledge-index': 'Cunoştinţe',
'datasource': 'Sursa datelor',
},
blocksAbout: {
'start': 'Definiți parametrii inițiali pentru lansarea unui flux de lucru',
@ -282,6 +287,8 @@ const translation = {
'agent': 'Invocarea modelelor lingvistice mari pentru a răspunde la întrebări sau pentru a procesa limbajul natural',
'loop': 'Executați o buclă de logică până când condiția de terminare este îndeplinită sau numărul maxim de bucle este atins.',
'loop-end': 'Echivalent cu „break”. Acest nod nu are elemente de configurare. Când corpul buclei ajunge la acest nod, bucla se termină.',
'datasource': 'Sursa de date Despre',
'knowledge-index': 'Baza de cunoștințe despre',
},
operator: {
zoomIn: 'Mărește',
@ -382,6 +389,7 @@ const translation = {
variable: 'Folosește variabila',
input: 'Valoare de intrare',
},
inputVars: 'Variabile de intrare',
},
start: {
required: 'necesar',
@ -916,6 +924,27 @@ const translation = {
comma: ',',
variableName: 'Nume Variabil',
},
dataSource: {
add: 'Adăugarea sursei de date',
supportedFileFormatsPlaceholder: 'Extensie de fișier, e.g. doc',
supportedFileFormats: 'Formate de fișiere acceptate',
},
knowledgeBase: {
chunkStructureTip: {
learnMore: 'Află mai multe',
title: 'Vă rugăm să alegeți o structură de bucăți',
message: 'Baza de cunoștințe Dify acceptă trei structuri de fragmentare: General, Părinte-copil și Întrebări și răspunsuri. Fiecare bază de cunoștințe poate avea o singură structură. Ieșirea de la nodul precedent trebuie să se alinieze cu structura de bucăți selectată. Rețineți că alegerea structurii de fragmentare afectează metodele de index disponibile.',
},
indexMethodIsRequired: 'Este necesară metoda indexului',
chunkStructure: 'Structura bucății',
chunkIsRequired: 'Este necesară structura bucății',
retrievalSettingIsRequired: 'Setarea de recuperare este necesară',
aboutRetrieval: 'despre metoda de recuperare.',
chooseChunkStructure: 'Alegeți o structură de bucăți',
changeChunkStructure: 'Modificați structura bucății',
chunksInput: 'Bucăți',
chunksInputTip: 'Variabila de intrare a nodului bazei de cunoștințe este Chunks. Tipul variabilei este un obiect cu un Șchema JSON specific care trebuie să fie coerent cu structura de chunk selectată.',
},
},
tracing: {
stopBy: 'Oprit de {{user}}',
@ -986,6 +1015,10 @@ const translation = {
edited: 'Editat',
clearNode: 'Șterge variabila cached',
emptyTip: 'După ce ai trecut printr-un nod pe canvas sau ai rulat un nod pas cu pas, poți vizualiza valoarea curentă a variabilei nodului în Inspectarea Variabilelor.',
export: 'export',
largeDataNoExport: 'Date mari - doar previzualizare parțială',
exportToolTip: 'Exportați variabila ca fișier',
largeData: 'Date mari, previzualizare doar în citire. Exportați pentru a vedea totul.',
},
settingsTab: 'Setări',
lastRunTab: 'Ultima execuție',