libre-webui 0.24.1 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/README.md +36 -15
  2. package/backend/dist/index.d.ts.map +1 -1
  3. package/backend/dist/index.js +35 -4
  4. package/backend/dist/index.js.map +1 -1
  5. package/backend/dist/middleware/auth.d.ts +7 -0
  6. package/backend/dist/middleware/auth.d.ts.map +1 -1
  7. package/backend/dist/middleware/auth.js +26 -0
  8. package/backend/dist/middleware/auth.js.map +1 -1
  9. package/backend/dist/middleware/index.d.ts +20 -0
  10. package/backend/dist/middleware/index.d.ts.map +1 -1
  11. package/backend/dist/middleware/index.js +105 -2
  12. package/backend/dist/middleware/index.js.map +1 -1
  13. package/backend/dist/models/personaModel.d.ts.map +1 -1
  14. package/backend/dist/models/personaModel.js +2 -0
  15. package/backend/dist/models/personaModel.js.map +1 -1
  16. package/backend/dist/observability/otel.d.ts +40 -0
  17. package/backend/dist/observability/otel.d.ts.map +1 -0
  18. package/backend/dist/observability/otel.js +337 -0
  19. package/backend/dist/observability/otel.js.map +1 -0
  20. package/backend/dist/observability/requestContext.d.ts +14 -0
  21. package/backend/dist/observability/requestContext.d.ts.map +1 -0
  22. package/backend/dist/observability/requestContext.js +21 -0
  23. package/backend/dist/observability/requestContext.js.map +1 -0
  24. package/backend/dist/persistence/chatGenerationTypes.d.ts +9 -0
  25. package/backend/dist/persistence/chatGenerationTypes.d.ts.map +1 -1
  26. package/backend/dist/persistence/extensionTypes.d.ts +13 -0
  27. package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
  28. package/backend/dist/persistence/extensionTypes.js.map +1 -1
  29. package/backend/dist/persistence/index.d.ts +1 -1
  30. package/backend/dist/persistence/index.d.ts.map +1 -1
  31. package/backend/dist/persistence/index.js.map +1 -1
  32. package/backend/dist/persistence/postgresAgentFoundationMigration.d.ts +9 -0
  33. package/backend/dist/persistence/postgresAgentFoundationMigration.d.ts.map +1 -0
  34. package/backend/dist/persistence/postgresAgentFoundationMigration.js +164 -0
  35. package/backend/dist/persistence/postgresAgentFoundationMigration.js.map +1 -0
  36. package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
  37. package/backend/dist/persistence/postgresExtensionRepositories.js +46 -2
  38. package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
  39. package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.d.ts +10 -0
  40. package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.d.ts.map +1 -0
  41. package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.js +148 -0
  42. package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.js.map +1 -0
  43. package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
  44. package/backend/dist/persistence/postgresMigrationRegistry.js +12 -0
  45. package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
  46. package/backend/dist/persistence/postgresNotesV2Migration.d.ts +4 -0
  47. package/backend/dist/persistence/postgresNotesV2Migration.d.ts.map +1 -0
  48. package/backend/dist/persistence/postgresNotesV2Migration.js +57 -0
  49. package/backend/dist/persistence/postgresNotesV2Migration.js.map +1 -0
  50. package/backend/dist/persistence/postgresPersonalAutomationsMigration.d.ts +8 -0
  51. package/backend/dist/persistence/postgresPersonalAutomationsMigration.d.ts.map +1 -0
  52. package/backend/dist/persistence/postgresPersonalAutomationsMigration.js +98 -0
  53. package/backend/dist/persistence/postgresPersonalAutomationsMigration.js.map +1 -0
  54. package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
  55. package/backend/dist/persistence/postgresResourceRepositories.js +1972 -63
  56. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
  57. package/backend/dist/persistence/postgresSkillFilesMigration.d.ts +9 -0
  58. package/backend/dist/persistence/postgresSkillFilesMigration.d.ts.map +1 -0
  59. package/backend/dist/persistence/postgresSkillFilesMigration.js +50 -0
  60. package/backend/dist/persistence/postgresSkillFilesMigration.js.map +1 -0
  61. package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts +10 -0
  62. package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts.map +1 -0
  63. package/backend/dist/persistence/postgresTeamCollaborationMigration.js +161 -0
  64. package/backend/dist/persistence/postgresTeamCollaborationMigration.js.map +1 -0
  65. package/backend/dist/persistence/resourceTypes.d.ts +622 -3
  66. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
  67. package/backend/dist/persistence/resourceTypes.js.map +1 -1
  68. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
  69. package/backend/dist/persistence/sqliteExtensionRepositories.js +26 -4
  70. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
  71. package/backend/dist/persistence/sqliteMigrations.d.ts +10 -0
  72. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
  73. package/backend/dist/persistence/sqliteMigrations.js +1396 -48
  74. package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
  75. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
  76. package/backend/dist/persistence/sqliteResourceRepositories.js +1680 -58
  77. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
  78. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
  79. package/backend/dist/persistence/sqliteToPostgresMigration.js +297 -2
  80. package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
  81. package/backend/dist/platform/jobs/domainJobContracts.d.ts +11 -0
  82. package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -1
  83. package/backend/dist/platform/jobs/domainJobContracts.js +11 -0
  84. package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -1
  85. package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
  86. package/backend/dist/platform/jobs/domainJobHandlers.js +409 -2
  87. package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
  88. package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -1
  89. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +4 -2
  90. package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -1
  91. package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -1
  92. package/backend/dist/platform/jobs/postgresDurableJobWorker.js +4 -2
  93. package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -1
  94. package/backend/dist/platform/storage/pgVectorStore.d.ts +2 -1
  95. package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -1
  96. package/backend/dist/platform/storage/pgVectorStore.js +51 -0
  97. package/backend/dist/platform/storage/pgVectorStore.js.map +1 -1
  98. package/backend/dist/platform/storage/platformDomainRepositories.d.ts +8 -2
  99. package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -1
  100. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -1
  101. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +25 -4
  102. package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -1
  103. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +2 -1
  104. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -1
  105. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +35 -0
  106. package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -1
  107. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -1
  108. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +26 -3
  109. package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -1
  110. package/backend/dist/platform/storage/vectorStore.d.ts +14 -0
  111. package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -1
  112. package/backend/dist/platform/storage/vectorStore.js.map +1 -1
  113. package/backend/dist/routes/access.d.ts.map +1 -1
  114. package/backend/dist/routes/access.js +84 -3
  115. package/backend/dist/routes/access.js.map +1 -1
  116. package/backend/dist/routes/automations.d.ts +3 -0
  117. package/backend/dist/routes/automations.d.ts.map +1 -0
  118. package/backend/dist/routes/automations.js +232 -0
  119. package/backend/dist/routes/automations.js.map +1 -0
  120. package/backend/dist/routes/calendar.d.ts +3 -0
  121. package/backend/dist/routes/calendar.d.ts.map +1 -0
  122. package/backend/dist/routes/calendar.js +309 -0
  123. package/backend/dist/routes/calendar.js.map +1 -0
  124. package/backend/dist/routes/channels.d.ts +3 -0
  125. package/backend/dist/routes/channels.d.ts.map +1 -0
  126. package/backend/dist/routes/channels.js +447 -0
  127. package/backend/dist/routes/channels.js.map +1 -0
  128. package/backend/dist/routes/chat.d.ts.map +1 -1
  129. package/backend/dist/routes/chat.js +237 -10
  130. package/backend/dist/routes/chat.js.map +1 -1
  131. package/backend/dist/routes/costs.d.ts +3 -0
  132. package/backend/dist/routes/costs.d.ts.map +1 -0
  133. package/backend/dist/routes/costs.js +191 -0
  134. package/backend/dist/routes/costs.js.map +1 -0
  135. package/backend/dist/routes/documents.d.ts.map +1 -1
  136. package/backend/dist/routes/documents.js +64 -21
  137. package/backend/dist/routes/documents.js.map +1 -1
  138. package/backend/dist/routes/evaluations.d.ts +3 -0
  139. package/backend/dist/routes/evaluations.d.ts.map +1 -0
  140. package/backend/dist/routes/evaluations.js +352 -0
  141. package/backend/dist/routes/evaluations.js.map +1 -0
  142. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  143. package/backend/dist/routes/imageGen.js +2 -1
  144. package/backend/dist/routes/imageGen.js.map +1 -1
  145. package/backend/dist/routes/media.d.ts.map +1 -1
  146. package/backend/dist/routes/media.js +228 -7
  147. package/backend/dist/routes/media.js.map +1 -1
  148. package/backend/dist/routes/notes.d.ts.map +1 -1
  149. package/backend/dist/routes/notes.js +149 -36
  150. package/backend/dist/routes/notes.js.map +1 -1
  151. package/backend/dist/routes/notifications.d.ts +3 -0
  152. package/backend/dist/routes/notifications.d.ts.map +1 -0
  153. package/backend/dist/routes/notifications.js +213 -0
  154. package/backend/dist/routes/notifications.js.map +1 -0
  155. package/backend/dist/routes/ollama.d.ts.map +1 -1
  156. package/backend/dist/routes/ollama.js +4 -1
  157. package/backend/dist/routes/ollama.js.map +1 -1
  158. package/backend/dist/routes/openaiCompat.d.ts +3 -0
  159. package/backend/dist/routes/openaiCompat.d.ts.map +1 -0
  160. package/backend/dist/routes/openaiCompat.js +314 -0
  161. package/backend/dist/routes/openaiCompat.js.map +1 -0
  162. package/backend/dist/routes/personas.js +1 -1
  163. package/backend/dist/routes/personas.js.map +1 -1
  164. package/backend/dist/routes/prompts.d.ts +3 -0
  165. package/backend/dist/routes/prompts.d.ts.map +1 -0
  166. package/backend/dist/routes/prompts.js +173 -0
  167. package/backend/dist/routes/prompts.js.map +1 -0
  168. package/backend/dist/routes/search.d.ts.map +1 -1
  169. package/backend/dist/routes/search.js +34 -4
  170. package/backend/dist/routes/search.js.map +1 -1
  171. package/backend/dist/routes/skills.d.ts +3 -0
  172. package/backend/dist/routes/skills.d.ts.map +1 -0
  173. package/backend/dist/routes/skills.js +246 -0
  174. package/backend/dist/routes/skills.js.map +1 -0
  175. package/backend/dist/routes/stt.d.ts.map +1 -1
  176. package/backend/dist/routes/stt.js +2 -1
  177. package/backend/dist/routes/stt.js.map +1 -1
  178. package/backend/dist/routes/tools.d.ts +3 -0
  179. package/backend/dist/routes/tools.d.ts.map +1 -0
  180. package/backend/dist/routes/tools.js +359 -0
  181. package/backend/dist/routes/tools.js.map +1 -0
  182. package/backend/dist/routes/tts.d.ts.map +1 -1
  183. package/backend/dist/routes/tts.js +63 -8
  184. package/backend/dist/routes/tts.js.map +1 -1
  185. package/backend/dist/routes/voiceAccess.d.ts +3 -0
  186. package/backend/dist/routes/voiceAccess.d.ts.map +1 -0
  187. package/backend/dist/routes/voiceAccess.js +102 -0
  188. package/backend/dist/routes/voiceAccess.js.map +1 -0
  189. package/backend/dist/services/apiTokenService.d.ts +2 -2
  190. package/backend/dist/services/apiTokenService.d.ts.map +1 -1
  191. package/backend/dist/services/apiTokenService.js +7 -0
  192. package/backend/dist/services/apiTokenService.js.map +1 -1
  193. package/backend/dist/services/authorizationService.d.ts +8 -4
  194. package/backend/dist/services/authorizationService.d.ts.map +1 -1
  195. package/backend/dist/services/authorizationService.js +31 -1
  196. package/backend/dist/services/authorizationService.js.map +1 -1
  197. package/backend/dist/services/automationSchedulerService.d.ts +28 -0
  198. package/backend/dist/services/automationSchedulerService.d.ts.map +1 -0
  199. package/backend/dist/services/automationSchedulerService.js +221 -0
  200. package/backend/dist/services/automationSchedulerService.js.map +1 -0
  201. package/backend/dist/services/automationService.d.ts +56 -0
  202. package/backend/dist/services/automationService.d.ts.map +1 -0
  203. package/backend/dist/services/automationService.js +247 -0
  204. package/backend/dist/services/automationService.js.map +1 -0
  205. package/backend/dist/services/builtinToolsService.d.ts +20 -0
  206. package/backend/dist/services/builtinToolsService.d.ts.map +1 -0
  207. package/backend/dist/services/builtinToolsService.js +661 -0
  208. package/backend/dist/services/builtinToolsService.js.map +1 -0
  209. package/backend/dist/services/calendarService.d.ts +74 -0
  210. package/backend/dist/services/calendarService.d.ts.map +1 -0
  211. package/backend/dist/services/calendarService.js +339 -0
  212. package/backend/dist/services/calendarService.js.map +1 -0
  213. package/backend/dist/services/channelService.d.ts +195 -0
  214. package/backend/dist/services/channelService.d.ts.map +1 -0
  215. package/backend/dist/services/channelService.js +1057 -0
  216. package/backend/dist/services/channelService.js.map +1 -0
  217. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  218. package/backend/dist/services/chatGenerationService.js +7 -1
  219. package/backend/dist/services/chatGenerationService.js.map +1 -1
  220. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  221. package/backend/dist/services/chatRequestService.js +29 -1
  222. package/backend/dist/services/chatRequestService.js.map +1 -1
  223. package/backend/dist/services/chatService.d.ts +62 -1
  224. package/backend/dist/services/chatService.d.ts.map +1 -1
  225. package/backend/dist/services/chatService.js +242 -1
  226. package/backend/dist/services/chatService.js.map +1 -1
  227. package/backend/dist/services/chatToolRuntimeService.d.ts +55 -0
  228. package/backend/dist/services/chatToolRuntimeService.d.ts.map +1 -0
  229. package/backend/dist/services/chatToolRuntimeService.js +389 -0
  230. package/backend/dist/services/chatToolRuntimeService.js.map +1 -0
  231. package/backend/dist/services/costGovernanceService.d.ts +102 -0
  232. package/backend/dist/services/costGovernanceService.d.ts.map +1 -0
  233. package/backend/dist/services/costGovernanceService.js +463 -0
  234. package/backend/dist/services/costGovernanceService.js.map +1 -0
  235. package/backend/dist/services/dataArchiveService.d.ts +6 -0
  236. package/backend/dist/services/dataArchiveService.d.ts.map +1 -1
  237. package/backend/dist/services/dataArchiveService.js +23 -4
  238. package/backend/dist/services/dataArchiveService.js.map +1 -1
  239. package/backend/dist/services/documentService.d.ts +58 -1
  240. package/backend/dist/services/documentService.d.ts.map +1 -1
  241. package/backend/dist/services/documentService.js +289 -84
  242. package/backend/dist/services/documentService.js.map +1 -1
  243. package/backend/dist/services/durableChatGenerationService.d.ts +9 -0
  244. package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -1
  245. package/backend/dist/services/durableChatGenerationService.js +160 -13
  246. package/backend/dist/services/durableChatGenerationService.js.map +1 -1
  247. package/backend/dist/services/evaluationService.d.ts +111 -0
  248. package/backend/dist/services/evaluationService.d.ts.map +1 -0
  249. package/backend/dist/services/evaluationService.js +403 -0
  250. package/backend/dist/services/evaluationService.js.map +1 -0
  251. package/backend/dist/services/galleryService.d.ts +6 -0
  252. package/backend/dist/services/galleryService.d.ts.map +1 -1
  253. package/backend/dist/services/galleryService.js +26 -0
  254. package/backend/dist/services/galleryService.js.map +1 -1
  255. package/backend/dist/services/mcpClientService.d.ts +29 -0
  256. package/backend/dist/services/mcpClientService.d.ts.map +1 -0
  257. package/backend/dist/services/mcpClientService.js +189 -0
  258. package/backend/dist/services/mcpClientService.js.map +1 -0
  259. package/backend/dist/services/noteService.d.ts +71 -0
  260. package/backend/dist/services/noteService.d.ts.map +1 -0
  261. package/backend/dist/services/noteService.js +397 -0
  262. package/backend/dist/services/noteService.js.map +1 -0
  263. package/backend/dist/services/notificationService.d.ts +55 -0
  264. package/backend/dist/services/notificationService.d.ts.map +1 -0
  265. package/backend/dist/services/notificationService.js +308 -0
  266. package/backend/dist/services/notificationService.js.map +1 -0
  267. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  268. package/backend/dist/services/ollamaService.js +3 -1
  269. package/backend/dist/services/ollamaService.js.map +1 -1
  270. package/backend/dist/services/openApiToolService.d.ts +38 -0
  271. package/backend/dist/services/openApiToolService.d.ts.map +1 -0
  272. package/backend/dist/services/openApiToolService.js +254 -0
  273. package/backend/dist/services/openApiToolService.js.map +1 -0
  274. package/backend/dist/services/personaService.d.ts +18 -2
  275. package/backend/dist/services/personaService.d.ts.map +1 -1
  276. package/backend/dist/services/personaService.js +113 -4
  277. package/backend/dist/services/personaService.js.map +1 -1
  278. package/backend/dist/services/pluginImageGenerationService.d.ts +19 -0
  279. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  280. package/backend/dist/services/pluginImageGenerationService.js +121 -0
  281. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  282. package/backend/dist/services/pluginService.d.ts +7 -0
  283. package/backend/dist/services/pluginService.d.ts.map +1 -1
  284. package/backend/dist/services/pluginService.js +8 -2
  285. package/backend/dist/services/pluginService.js.map +1 -1
  286. package/backend/dist/services/promptService.d.ts +74 -0
  287. package/backend/dist/services/promptService.d.ts.map +1 -0
  288. package/backend/dist/services/promptService.js +513 -0
  289. package/backend/dist/services/promptService.js.map +1 -0
  290. package/backend/dist/services/resourceGrantService.d.ts.map +1 -1
  291. package/backend/dist/services/resourceGrantService.js +62 -17
  292. package/backend/dist/services/resourceGrantService.js.map +1 -1
  293. package/backend/dist/services/searchService.d.ts +29 -0
  294. package/backend/dist/services/searchService.d.ts.map +1 -0
  295. package/backend/dist/services/searchService.js +0 -0
  296. package/backend/dist/services/searchService.js.map +1 -0
  297. package/backend/dist/services/securityAuditService.d.ts.map +1 -1
  298. package/backend/dist/services/securityAuditService.js +2 -1
  299. package/backend/dist/services/securityAuditService.js.map +1 -1
  300. package/backend/dist/services/sharedResourceAccess.d.ts +25 -0
  301. package/backend/dist/services/sharedResourceAccess.d.ts.map +1 -0
  302. package/backend/dist/services/sharedResourceAccess.js +59 -0
  303. package/backend/dist/services/sharedResourceAccess.js.map +1 -0
  304. package/backend/dist/services/skillService.d.ts +137 -0
  305. package/backend/dist/services/skillService.d.ts.map +1 -0
  306. package/backend/dist/services/skillService.js +852 -0
  307. package/backend/dist/services/skillService.js.map +1 -0
  308. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  309. package/backend/dist/services/titleGenerationService.js +5 -1
  310. package/backend/dist/services/titleGenerationService.js.map +1 -1
  311. package/backend/dist/services/toolAccessService.d.ts +9 -0
  312. package/backend/dist/services/toolAccessService.d.ts.map +1 -0
  313. package/backend/dist/services/toolAccessService.js +60 -0
  314. package/backend/dist/services/toolAccessService.js.map +1 -0
  315. package/backend/dist/services/toolApprovalService.d.ts +34 -0
  316. package/backend/dist/services/toolApprovalService.d.ts.map +1 -0
  317. package/backend/dist/services/toolApprovalService.js +188 -0
  318. package/backend/dist/services/toolApprovalService.js.map +1 -0
  319. package/backend/dist/services/toolGatewayService.d.ts +53 -0
  320. package/backend/dist/services/toolGatewayService.d.ts.map +1 -0
  321. package/backend/dist/services/toolGatewayService.js +249 -0
  322. package/backend/dist/services/toolGatewayService.js.map +1 -0
  323. package/backend/dist/services/toolServerService.d.ts +57 -0
  324. package/backend/dist/services/toolServerService.d.ts.map +1 -0
  325. package/backend/dist/services/toolServerService.js +521 -0
  326. package/backend/dist/services/toolServerService.js.map +1 -0
  327. package/backend/dist/services/voiceAccessService.d.ts +10 -0
  328. package/backend/dist/services/voiceAccessService.d.ts.map +1 -0
  329. package/backend/dist/services/voiceAccessService.js +74 -0
  330. package/backend/dist/services/voiceAccessService.js.map +1 -0
  331. package/backend/dist/services/voiceProfileService.d.ts +20 -0
  332. package/backend/dist/services/voiceProfileService.d.ts.map +1 -1
  333. package/backend/dist/services/voiceProfileService.js +60 -0
  334. package/backend/dist/services/voiceProfileService.js.map +1 -1
  335. package/backend/dist/services/webSearchPlanService.d.ts +18 -0
  336. package/backend/dist/services/webSearchPlanService.d.ts.map +1 -0
  337. package/backend/dist/services/webSearchPlanService.js +160 -0
  338. package/backend/dist/services/webSearchPlanService.js.map +1 -0
  339. package/backend/dist/services/webSearchService.d.ts +9 -3
  340. package/backend/dist/services/webSearchService.d.ts.map +1 -1
  341. package/backend/dist/services/webSearchService.js +8 -2
  342. package/backend/dist/services/webSearchService.js.map +1 -1
  343. package/backend/dist/storage.d.ts +34 -1
  344. package/backend/dist/storage.d.ts.map +1 -1
  345. package/backend/dist/storage.js +164 -1
  346. package/backend/dist/storage.js.map +1 -1
  347. package/backend/dist/storageMappers.d.ts +2 -2
  348. package/backend/dist/storageMappers.d.ts.map +1 -1
  349. package/backend/dist/storageMappers.js.map +1 -1
  350. package/backend/dist/types/index.d.ts +269 -2
  351. package/backend/dist/types/index.d.ts.map +1 -1
  352. package/backend/dist/types/index.js.map +1 -1
  353. package/backend/dist/types/tools.d.ts +137 -0
  354. package/backend/dist/types/tools.d.ts.map +1 -0
  355. package/backend/dist/types/tools.js +25 -0
  356. package/backend/dist/types/tools.js.map +1 -0
  357. package/backend/dist/utils/automationSchedule.d.ts +26 -0
  358. package/backend/dist/utils/automationSchedule.d.ts.map +1 -0
  359. package/backend/dist/utils/automationSchedule.js +231 -0
  360. package/backend/dist/utils/automationSchedule.js.map +1 -0
  361. package/backend/dist/utils/chatDocumentContext.d.ts +26 -1
  362. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  363. package/backend/dist/utils/chatDocumentContext.js +87 -18
  364. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  365. package/backend/dist/utils/documentExtraction.d.ts +69 -0
  366. package/backend/dist/utils/documentExtraction.d.ts.map +1 -0
  367. package/backend/dist/utils/documentExtraction.js +545 -0
  368. package/backend/dist/utils/documentExtraction.js.map +1 -0
  369. package/backend/dist/utils/hybridRetrieval.d.ts +34 -0
  370. package/backend/dist/utils/hybridRetrieval.d.ts.map +1 -0
  371. package/backend/dist/utils/hybridRetrieval.js +119 -0
  372. package/backend/dist/utils/hybridRetrieval.js.map +1 -0
  373. package/backend/dist/utils/icsCalendar.d.ts +27 -0
  374. package/backend/dist/utils/icsCalendar.d.ts.map +1 -0
  375. package/backend/dist/utils/icsCalendar.js +313 -0
  376. package/backend/dist/utils/icsCalendar.js.map +1 -0
  377. package/backend/dist/utils/imageEditUpload.d.ts +29 -0
  378. package/backend/dist/utils/imageEditUpload.d.ts.map +1 -0
  379. package/backend/dist/utils/imageEditUpload.js +82 -0
  380. package/backend/dist/utils/imageEditUpload.js.map +1 -0
  381. package/backend/dist/utils/logRedaction.d.ts +2 -0
  382. package/backend/dist/utils/logRedaction.d.ts.map +1 -0
  383. package/backend/dist/utils/logRedaction.js +66 -0
  384. package/backend/dist/utils/logRedaction.js.map +1 -0
  385. package/backend/dist/utils/logger.d.ts +3 -0
  386. package/backend/dist/utils/logger.d.ts.map +1 -1
  387. package/backend/dist/utils/logger.js +63 -20
  388. package/backend/dist/utils/logger.js.map +1 -1
  389. package/backend/dist/utils/pluginChatAdapter.d.ts +5 -1
  390. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  391. package/backend/dist/utils/pluginChatAdapter.js +83 -0
  392. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  393. package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
  394. package/backend/dist/utils/resourceLimits.d.ts +68 -2
  395. package/backend/dist/utils/resourceLimits.d.ts.map +1 -1
  396. package/backend/dist/utils/resourceLimits.js +66 -0
  397. package/backend/dist/utils/resourceLimits.js.map +1 -1
  398. package/backend/dist/utils/toolEgress.d.ts +22 -0
  399. package/backend/dist/utils/toolEgress.d.ts.map +1 -0
  400. package/backend/dist/utils/toolEgress.js +157 -0
  401. package/backend/dist/utils/toolEgress.js.map +1 -0
  402. package/backend/dist/utils/websocketMessages.d.ts +6 -0
  403. package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
  404. package/backend/dist/utils/websocketMessages.js +8 -0
  405. package/backend/dist/utils/websocketMessages.js.map +1 -1
  406. package/backend/dist/utils/zipArchive.d.ts +32 -0
  407. package/backend/dist/utils/zipArchive.d.ts.map +1 -0
  408. package/backend/dist/utils/zipArchive.js +171 -0
  409. package/backend/dist/utils/zipArchive.js.map +1 -0
  410. package/backend/dist/websocketServer.d.ts.map +1 -1
  411. package/backend/dist/websocketServer.js +150 -37
  412. package/backend/dist/websocketServer.js.map +1 -1
  413. package/backend/package.json +1 -1
  414. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  415. package/frontend/dist/assets/index-BPsH9FII.js +80 -0
  416. package/frontend/dist/assets/index-BtXF0Oxa.css +1 -0
  417. package/frontend/dist/index.html +18 -18
  418. package/frontend/dist/js/{ArtifactContainer-B-hs0F5K.js → ArtifactContainer-CIoFoMv8.js} +1 -1
  419. package/frontend/dist/js/{ArtifactDemoPage-QFtJw-u4.js → ArtifactDemoPage-D0JEIAbZ.js} +1 -1
  420. package/frontend/dist/js/{ArtifactSandboxFrame-S9g_q47-.js → ArtifactSandboxFrame-REazyIrx.js} +2 -2
  421. package/frontend/dist/js/ArtifactSlideOutPanel-A-i94ghF.js +1 -0
  422. package/frontend/dist/js/AutomationsPage-Dow_lbIf.js +1 -0
  423. package/frontend/dist/js/{Button-BPf_pOxH.js → Button-C0r3J9G_.js} +1 -1
  424. package/frontend/dist/js/CalendarPage-DLjasZOd.js +1 -0
  425. package/frontend/dist/js/ChannelsPage-C8hvTD7J.js +1 -0
  426. package/frontend/dist/js/ChatPage-BAgBHUES.js +16 -0
  427. package/frontend/dist/js/EvaluationsPage-Bm8FRoeX.js +2 -0
  428. package/frontend/dist/js/FirstTimeSetup-BxJapNul.js +1 -0
  429. package/frontend/dist/js/GalleryPage-DHz9DkK7.js +1 -0
  430. package/frontend/dist/js/HomePage-BqNy-FWX.js +1 -0
  431. package/frontend/dist/js/LibreClawPage-BDzDILjY.js +1 -0
  432. package/frontend/dist/js/{ModelManagerModals-DBmm_slu.js → ModelManagerModals-DX9eT5r2.js} +1 -1
  433. package/frontend/dist/js/ModelSelector-ol8mK2ja.js +1 -0
  434. package/frontend/dist/js/NotesPage-DzHEx2O4.js +3 -0
  435. package/frontend/dist/js/{OptimizedSyntaxHighlighter-Dz7D1LPB.js → OptimizedSyntaxHighlighter-CZNPwN0i.js} +1 -1
  436. package/frontend/dist/js/PersonasPage-M_WKH2a9.js +13 -0
  437. package/frontend/dist/js/PluginUsagePage-Ctoka6JZ.js +1 -0
  438. package/frontend/dist/js/RichMessageContent-BqgafH4p.js +3 -0
  439. package/frontend/dist/js/SettingsModal-R9EDadAV.js +19 -0
  440. package/frontend/dist/js/{SettingsToggle-woG_WebF.js → SettingsToggle-BIVyfGjl.js} +1 -1
  441. package/frontend/dist/js/{SystemPage-Xr7XJv8c.js → SystemPage-aOkrSuY7.js} +1 -1
  442. package/frontend/dist/js/UserManagementPage-BOuaX3ay.js +1 -0
  443. package/frontend/dist/js/WorkPage-DxZISerQ.js +6 -0
  444. package/frontend/dist/js/api-6bSMtSNh.js +14 -0
  445. package/frontend/dist/js/{appStore-DXlmTjIC.js → appStore-CdObhQBb.js} +2 -2
  446. package/frontend/dist/js/ar-DT_VLBO3.js +2 -0
  447. package/frontend/dist/js/{authStore-B97lJ5Ee.js → authStore-DbqqrfZv.js} +3 -3
  448. package/frontend/dist/js/{babel-D24oDI9y.js → babel-DSqqk5kt.js} +1 -1
  449. package/frontend/dist/js/bn-BrvEqhGA.js +2 -0
  450. package/frontend/dist/js/calendarDates-Co3o_05Y.js +1 -0
  451. package/frontend/dist/js/chatStore-DbZPJNsu.js +3 -0
  452. package/frontend/dist/js/{config-CmEh9o8U.js → config-8KdgjtEx.js} +1 -1
  453. package/frontend/dist/js/cs-BthnM_YI.js +2 -0
  454. package/frontend/dist/js/da-DCth-6_j.js +2 -0
  455. package/frontend/dist/js/de-BBWt0gJ_.js +2 -0
  456. package/frontend/dist/js/es-DuslOPqM.js +2 -0
  457. package/frontend/dist/js/{estree-CZO8RS52.js → estree-BU5-LV_1.js} +7 -7
  458. package/frontend/dist/js/evaluationsApi-CwZJsgeG.js +1 -0
  459. package/frontend/dist/js/fr-DZAeg46S.js +2 -0
  460. package/frontend/dist/js/hi-ijDSiY77.js +2 -0
  461. package/frontend/dist/js/{html-C31pxhBG.js → html-DeoAy2bo.js} +10 -10
  462. package/frontend/dist/js/id-BS6qS0oq.js +2 -0
  463. package/frontend/dist/js/is-CO2PMDte.js +2 -0
  464. package/frontend/dist/js/it-ChhxT4hs.js +2 -0
  465. package/frontend/dist/js/ja-cyeqUeJN.js +2 -0
  466. package/frontend/dist/js/ko-CfqHTLXj.js +2 -0
  467. package/frontend/dist/js/{markdown-C1CEqXpL.js → markdown-DOLsYkBY.js} +6 -6
  468. package/frontend/dist/js/markdown-core-BK7WVOb7.js +32 -0
  469. package/frontend/dist/js/{markdown-math-DK846gXU.js → markdown-math-e1ByS3KY.js} +5 -5
  470. package/frontend/dist/js/{messageCodeStyles-BqQ6kOSU.js → messageCodeStyles-DhVgizF-.js} +2 -2
  471. package/frontend/dist/js/ms-DZ5pACe1.js +2 -0
  472. package/frontend/dist/js/nl-BsRsnOVp.js +2 -0
  473. package/frontend/dist/js/pl-DXSTAW4M.js +2 -0
  474. package/frontend/dist/js/{postcss-Bx9CTcIc.js → postcss-Bg15EcFE.js} +1 -1
  475. package/frontend/dist/js/pt-DmDx0JxB.js +2 -0
  476. package/frontend/dist/js/{react-vendor-C5yShNlM.js → react-vendor-BG_HPV6X.js} +1 -1
  477. package/frontend/dist/js/router-vendor-CbexJIsv.js +1 -0
  478. package/frontend/dist/js/ru-d2g8EWfY.js +2 -0
  479. package/frontend/dist/js/{standalone-Dz0pkxn0.js → standalone-BO5pzI8_.js} +5 -5
  480. package/frontend/dist/js/sv-CIhYUTVQ.js +2 -0
  481. package/frontend/dist/js/{syntax-highlight-3EEX6CGL.js → syntax-highlight-DcR9Vhb7.js} +3 -3
  482. package/frontend/dist/js/th-B3wSxanB.js +2 -0
  483. package/frontend/dist/js/tr-R4UGgPOY.js +2 -0
  484. package/frontend/dist/js/{typescript-DeXPhp90.js → typescript-6GJ8APmn.js} +2 -2
  485. package/frontend/dist/js/ui-CV0LYmkM.js +2 -0
  486. package/frontend/dist/js/ui-vendor-CWjIBW-z.js +177 -0
  487. package/frontend/dist/js/uk-BzUF4Vkt.js +2 -0
  488. package/frontend/dist/js/{useTranslation-Bho4HCyg.js → useTranslation-5b5UhAc9.js} +1 -1
  489. package/frontend/dist/js/{utils-D9W1Lnkn.js → utils-BGrdX9ie.js} +1 -1
  490. package/frontend/dist/js/{utils-vendor-DWh39_3x.js → utils-vendor-9bQ62WeD.js} +1 -1
  491. package/frontend/dist/js/vi-CKc6Fg4h.js +2 -0
  492. package/frontend/dist/js/{workApi-C4QtuhcE.js → workApi-BruWTlHM.js} +2 -2
  493. package/frontend/dist/js/{yaml-DioTxVLA.js → yaml-DUeWcOOH.js} +5 -5
  494. package/frontend/dist/js/zh-CXL-kDe8.js +2 -0
  495. package/package.json +2 -2
  496. package/plugins/openai.json +52 -9
  497. package/frontend/dist/assets/index-CDQ12KBq.js +0 -34
  498. package/frontend/dist/assets/index-DkFWzmFD.css +0 -1
  499. package/frontend/dist/js/ArtifactSlideOutPanel-D0UOo8RW.js +0 -1
  500. package/frontend/dist/js/ChatPage-fdd8500b.js +0 -23
  501. package/frontend/dist/js/FirstTimeSetup-BTjafGOq.js +0 -1
  502. package/frontend/dist/js/GalleryPage-hR9AJ6b-.js +0 -1
  503. package/frontend/dist/js/HomePage-JvTzq-Pp.js +0 -1
  504. package/frontend/dist/js/LibreClawPage-CLJvtXft.js +0 -1
  505. package/frontend/dist/js/ModelSelector-A-viVFEc.js +0 -1
  506. package/frontend/dist/js/ModelsPage-C4Rm-TZF.js +0 -2
  507. package/frontend/dist/js/NotesPage-C7bPU_KF.js +0 -1
  508. package/frontend/dist/js/PersonasPage-DpvxbFzv.js +0 -13
  509. package/frontend/dist/js/PluginUsagePage-laF-M2X9.js +0 -1
  510. package/frontend/dist/js/RichMessageContent-D0mK9vRA.js +0 -3
  511. package/frontend/dist/js/SettingsModal-DNEQ5sTt.js +0 -1
  512. package/frontend/dist/js/UserManagementPage-DGmbGTC2.js +0 -1
  513. package/frontend/dist/js/WorkPage-DNKFD9gS.js +0 -6
  514. package/frontend/dist/js/api-DGVZHSkS.js +0 -14
  515. package/frontend/dist/js/ar-DW79oSyN.js +0 -2
  516. package/frontend/dist/js/bn-BEAmE7VH.js +0 -2
  517. package/frontend/dist/js/chatStore-zilBUd1p.js +0 -3
  518. package/frontend/dist/js/cs-irpRMzRo.js +0 -2
  519. package/frontend/dist/js/da-cgilTVxc.js +0 -2
  520. package/frontend/dist/js/de-BU-eH3gU.js +0 -2
  521. package/frontend/dist/js/es-B2LRpZ0p.js +0 -2
  522. package/frontend/dist/js/fr-Cd5JM-oQ.js +0 -2
  523. package/frontend/dist/js/hi-CvOhdtiK.js +0 -2
  524. package/frontend/dist/js/id-BtRK5nR_.js +0 -2
  525. package/frontend/dist/js/is-CnEqwgRF.js +0 -2
  526. package/frontend/dist/js/it-CI6WjId6.js +0 -2
  527. package/frontend/dist/js/ja-B6gFOHi6.js +0 -2
  528. package/frontend/dist/js/ko-DuAhnmMf.js +0 -2
  529. package/frontend/dist/js/markdown-core-BmPPZiuD.js +0 -31
  530. package/frontend/dist/js/ms-C8BIP7MZ.js +0 -2
  531. package/frontend/dist/js/nl-DnEdspER.js +0 -2
  532. package/frontend/dist/js/pl-Ddyyvbse.js +0 -2
  533. package/frontend/dist/js/pt-BYuzm70F.js +0 -2
  534. package/frontend/dist/js/router-vendor-CbPDks39.js +0 -1
  535. package/frontend/dist/js/ru-CmSPFxPX.js +0 -2
  536. package/frontend/dist/js/sv-Dd6SQ9f1.js +0 -2
  537. package/frontend/dist/js/th-CpH8745B.js +0 -2
  538. package/frontend/dist/js/tr-DuVD75iJ.js +0 -2
  539. package/frontend/dist/js/ui-CO0DPqrI.js +0 -2
  540. package/frontend/dist/js/ui-vendor-mqjSfAaS.js +0 -177
  541. package/frontend/dist/js/uk-B0MU-M8k.js +0 -2
  542. package/frontend/dist/js/vi-BLmFNp_z.js +0 -2
  543. package/frontend/dist/js/zh-BQu0TLhw.js +0 -2
@@ -1,2 +0,0 @@
1
- var e={common:{loading:`Завантаження...`,save:`Зберегти`,saving:`Збереження...`,cancel:`Скасувати`,delete:`Видалити`,edit:`Редагувати`,close:`Закрити`,back:`Назад`,next:`Далі`,confirm:`Підтвердити`,error:`Помилка`,success:`Успіх`,warning:`Попередження`,or:`або`,optional:`необов'язково`,enabled:`Увімкнено`,disabled:`Вимкнено`,on:`Увімк.`,off:`Вимк.`,yes:`Так`,no:`Ні`,search:`Пошук`,noResults:`Результатів не знайдено`,retry:`Повторити`,refresh:`Оновити`,download:`Завантажити`,upload:`Вивантажити`,export:`Експорт`,import:`Імпорт`,reset:`Скинути`,apply:`Застосувати`,clear:`Очистити`,all:`Усі`,none:`Жодного`,default:`За замовчуванням`,custom:`Власний`,remove:`Видалити`,home:`Головна`,more:`Більше`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`З поверненням`,subtitle:`Увійдіть до свого облікового запису, щоб продовжити`,username:`Ім'я користувача`,usernamePlaceholder:`Введіть ім'я користувача`,password:`Пароль`,passwordPlaceholder:`Введіть пароль`,signIn:`Увійти`,signingIn:`Вхід...`,noAccount:`Немає облікового запису?`,signUpHere:`Зареєструйтеся тут`,loginSuccess:`Вхід успішний!`,loginFailed:`Помилка входу`,checkCredentials:`Помилка входу. Перевірте свої облікові дані.`,approvalPending:`Ваш обліковий запис очікує на підтвердження адміністратором.`,enterBoth:`Введіть ім'я користувача та пароль`,githubSuccess:`Вхід через GitHub успішний!`,githubFailed:`Помилка автентифікації GitHub`,githubVerifyFailed:`Не вдалося перевірити автентифікацію GitHub`,verificationFailed:`Перевірка безпеки не вдалася. Оновіть сторінку та спробуйте ще раз.`},signup:{title:`Створити обліковий запис`,subtitle:`Зареєструйте новий обліковий запис`,username:`Ім'я користувача`,usernamePlaceholder:`Виберіть ім'я користувача`,email:`Електронна пошта`,emailPlaceholder:`ваша@пошта.com`,password:`Пароль`,passwordPlaceholder:`Виберіть пароль`,confirmPassword:`Підтвердіть пароль`,confirmPasswordPlaceholder:`Підтвердіть пароль`,createAccount:`Створити обліковий запис`,creatingAccount:`Створення облікового запису...`,hasAccount:`Вже є обліковий запис?`,signInHere:`Увійдіть тут`,signupSuccess:`Обліковий запис успішно створено!`,approvalPending:`Реєстрацію отримано. Адміністратор має підтвердити ваш обліковий запис.`,awaitingApproval:`Очікує підтвердження`,awaitingApprovalDescription:`Ваш обліковий запис створено, але адміністратор має активувати його, перш ніж ви зможете увійти.`,backToSignIn:`Повернутися до входу`,signupFailed:`Помилка реєстрації`,tryAgain:`Помилка реєстрації. Спробуйте ще раз.`,usernameRequired:`Ім'я користувача та пароль обов'язкові`,passwordMismatch:`Паролі не збігаються`,passwordTooShort:`Пароль має містити щонайменше 6 символів`},logout:{button:`Вийти`,success:`Ви успішно вийшли`},oauth:{continueWith:`Продовжити з {{provider}}`,connectingTo:`Підключення до {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Перевірка автентифікації...`,welcome:`Ласкаво просимо`,noEmail:`Email не вказано`,role:`Роль`,id:`ID`,userId:`ID користувача`,signInDescription:`Увійдіть за допомогою облікового запису GitHub, щоб продовжити`,signInWithGitHub:`Увійти через GitHub`,jwtActive:`JWT-автентифікація активна`,jwtDescription:`JWT-автентифікація з GitHub OAuth`,github:`GitHub`,provider:`Провайдер`,tagline:`Ваш AI стек має підпорядковуватися вам.`,selfHosted:`Самостійний хостинг · Apache 2.0`,highlights:{local:{title:`Локально насамперед`,body:`Ваші розмови та файли залишаються на пристрої, на якому ви запускаєте це.`},providers:{title:`Будь-який провайдер`,body:`Локальні моделі через Ollama, а також віддалені провайдери, які ви вирішите додати.`},work:{title:`Ізольована робота`,body:`Надайте моделі пісочницю з файлами, терміналом та попереднім переглядом.`}},oidc:{defaultProviderName:`Єдиний вхід`}},setup:{welcome:{title:`Ласкаво просимо до Libre WebUI`,subtitle:`Почнімо`,description:`Налаштуйте Libre WebUI за кілька простих кроків`,createAdmin:`Створити обліковий запис адміністратора`,features:{secure:{title:`Безпечний і приватний`,description:`Ваші розмови залишаються на вашому пристрої`},fast:{title:`Швидкий і чутливий`,description:`Оптимізовано для швидкості та продуктивності`},openSource:{title:`Відкритий код`,description:`Безкоштовне програмне забезпечення з відкритим кодом`}}},admin:{title:`Створити обліковий запис адміністратора`,subtitle:`Налаштування адміністратора`,description:`Створіть перший обліковий запис адміністратора для вашого екземпляра Libre WebUI`,usernamePlaceholder:`Введіть ім'я адміністратора`,passwordPlaceholder:`Введіть пароль (мін. 6 символів)`,confirmPlaceholder:`Підтвердіть пароль`,creating:`Створення...`,createAdmin:`Створити адміністратора`,success:`Обліковий запис адміністратора успішно створено!`,failed:`Не вдалося створити обліковий запис адміністратора`,approvalUnexpected:`Початкового адміністратора не вдалося активувати. Будь ласка, спробуйте ще раз.`,fillAllFields:`Заповніть усі поля`,note:`Це буде основний обліковий запис адміністратора для вашого екземпляра Libre WebUI`},encryptionKey:{title:`Збережіть ключ шифрування`,subtitle:`Важливо: збережіть цей ключ`,description:`Цей ключ шифрування захищає ваші конфіденційні дані. Зберігайте його надійно - він знадобиться для відновлення бази даних.`,warning:`Попередження`,warningText:`Якщо ви втратите цей ключ і вам потрібно буде відновити базу даних, ваші зашифровані дані (API-ключі, налаштування) будуть безповоротно втрачені.`,label:`Ваш ключ шифрування`,loading:`Завантаження...`,copyToClipboard:`Копіювати в буфер обміну`,copied:`Ключ шифрування скопійовано!`,copyFailed:`Не вдалося скопіювати ключ`,envNote:`Цей ключ також збережено у файлі backend/.env як ENCRYPTION_KEY`,acknowledgment:`Я зберіг ключ шифрування в надійному місці та розумію, що його втрата може призвести до втрати даних.`,confirmRequired:`Підтвердіть, що ви зберегли ключ шифрування`,continue:`Продовжити до Libre WebUI`}},chat:JSON.parse(`{"greeting":{"morning":"Доброго ранку","afternoon":"Доброго дня","evening":"Доброго вечора","night":"Доброї ночі"},"followUp":"Продовжити","welcome":{"helpToday":"Чим можу допомогти сьогодні?","helpTonight":"Чим можу допомогти сьогодні ввечері?","variety":{"create":{"title":"Що будемо створювати?","subtitle":"Почніть із думки, начерку або задачі, що ніяк не дається."},"explore":{"title":"З чого почнемо?","subtitle":"Принесіть запитання, до якого постійно повертаєтеся."},"imagine":{"title":"Що ви уявляєте?","subtitle":"Ми можемо разом надати цьому форми."},"focus":{"title":"Що заслуговує на вашу увагу?","subtitle":"Зробімо наступний крок зрозумілим."},"untangle":{"title":"Що треба розплутати?","subtitle":"Спочатку покажіть усе як є, навіть якщо поки хаотично."},"momentum":{"title":"Почнемо, коли будете готові.","subtitle":"Поверніться до ідеї, плану або незавершеної теми."},"open":{"title":"Що у вас на думці?","subtitle":"Невелика думка або амбітний проєкт. Підійде і те, й інше."},"challenge":{"title":"Що ми розв’язуємо?","subtitle":"Розкажіть, що поки не працює."},"draft":{"title":"Почнімо хоч із чогось.","subtitle":"Необов’язково одразу все шліфувати."},"possibility":{"title":"На що це може перетворитися?","subtitle":"Покажіть мені вихідний матеріал."},"unexpected":{"title":"Створімо щось несподіване.","subtitle":"Дайте мені обмеження, настрій або ще не до кінця сформовану ідею."}}},"input":{"placeholder":"Надіслати повідомлення","messagePlaceholder":"Повідомлення...","attachImages":"Прикріпити зображення","attachments":"Вкладення та розширені функції","sendMessage":"Надіслати повідомлення","stopGeneration":"Зупинити генерацію","menu":{"uploadImages":"Завантажити зображення","attachDocument":"Прикріпити документ","attachWebpage":"Прикріпити вебсторінку","structuredOutput":"Структурований вивід","attach":"Прикріпити","documentAttached":"Документ прикріплено","webpageAttached":"Вебсторінку прикріплено","attachFailed":"Не вдалося прикріпити","attachKnowledge":"Прикріпити знання","noCollections":"Колекцій поки немає — створіть у Налаштуваннях → Документи"},"voiceInput":"Голосове введення","voiceStop":"Зупинити прослуховування","transcriptionSource":"Джерело розпізнавання мовлення","browserSpeech":"Служба розпізнавання мовлення браузера","providerTranscriptionDisclosure":"Записати й надіслати аудіо до {{provider}} для транскрибування","webSearchOn":"Вебпошук увімкнено — відповіді використовують живі результати","webSearchOff":"Шукати в інтернеті для цього повідомлення","thinkingOn":"Міркування увімкнено ({{level}})","thinkingOff":"Міркувати перед відповіддю"},"session":{"new":"Новий чат","work":"Робота","chat":"Чат","private":"Приватний","incognito":"Приватна розмова","privateMode":"Приватний режим","privateDescription":"Ця розмова не буде збережена","privateTooltip":"Почати приватну розмову, яка не буде збережена","deleteConfirm":"Ви впевнені, що хочете видалити цей чат?","generatingTitle":"Генерація заголовка","noChats":"Чатів ще немає","createFirst":"Створіть свій перший чат вище","chats":"Чати","renameChat":"Перейменувати чат","openNewTab":"Відкрити в новій вкладці","pinChat":"Закріпити","unpinChat":"Відкріпити","deleteChat":"Видалити чат","archiveChat":"Архівувати чат","groups":{"pinned":"Закріплені","today":"Сьогодні","yesterday":"Вчора","previous7Days":"Останні 7 днів","previous30Days":"Останні 30 днів","older":"Старіші"},"folder":{"new":"Нова папка","namePlaceholder":"Назва папки","move":"Перемістити до папки","remove":"Прибрати з папки","delete":"Видалити папку","deleteConfirm":"Видалити цю папку? Чати всередині збережуться."}},"persona":{"applied":"Персону застосовано","label":"Персона","loadFailed":"Не вдалося завантажити відомості про персону","removeFailed":"Не вдалося видалити персону"},"model":{"updated":"Модель оновлено","noModels":"Моделі недоступні","noModelsDescription":"Моделі недоступні. Переконайтеся, що Ollama працює та моделі встановлені.","pullCommand":"ollama pull llama3.2:3b","noModelsTooltip":"Моделі недоступні. Переконайтеся, що Ollama працює та моделі встановлені.","selectBeforePrivateChat":"Виберіть доступну модель перед початком приватного чату","selectBeforeSending":"Виберіть доступну модель перед надсиланням"},"footer":{"disclaimer":"LLM може помилятися - перевіряйте важливу інформацію","images":"{{count}} зображення","images_plural":"{{count}} зображень","structuredOutput":"Структурований вивід"},"mediaUpload":{"dropImagesHere":"Перетягніть зображення сюди або","supportedFormats":"Підтримується: JPG, PNG, GIF, WebP (макс. 10 МБ кожне)","browse":"оберіть"},"structuredOutput":{"title":"Формат відповіді","none":"Без формату (природна мова)","noneDescription":"Стандартна відповідь природною мовою","json":"JSON","jsonDescription":"Структурований формат JSON","list":"Список","listDescription":"Масив елементів","summary":"Підсумок","summaryDescription":"Підсумок документа з ключовими пунктами","analysis":"Аналіз","analysisDescription":"Структурований аналіз з перевагами/недоліками","custom":"Власна схема","customDescription":"Визначте власну JSON-схему","customSchema":"Власна JSON-схема","schemaPreview":"Попередній перегляд схеми","applySchema":"Застосувати схему","cancel":"Скасувати","enabled":"Структурований вивід увімкнено"},"controls":{"title":"Налаштування чату","systemPrompt":"Системний промпт","systemPromptPlaceholder":"Інструкції лише для цього чату…","advancedParams":"Розширені параметри","advancedParamsDescription":"Перевизначення для цього чату. Порожні поля використовують глобальні значення.","fromModel":"з моделі","fromModelHint":"Це значення взято з рекомендованих налаштувань самої моделі.","contextCapped":"Контекст обмежено до {{context}} із {{trained}}, на яких навчалася модель, щоб вона завантажувалася.","saved":"Налаштування збережено","saveFailed":"Не вдалося зберегти налаштування","params":{"temperature":"Температура","topP":"Top P","topK":"Top K","minP":"Min P","maxTokens":"Макс. токенів","repeatPenalty":"Штраф за повтори","seed":"Сід","contextLength":"Довжина контексту"},"thinking":"Міркування","thinkingDescription":"Скільки модель міркує перед відповіддю. Моделі без міркування це ігнорують.","compaction":"Стиснення контексту","compactionDescription":"Коли сервер ущільнює довгі розмови, цей чат може відмовитися й зберегти повну історію.","compactionDefault":"Типове налаштування сервера","compactionOff":"Вимкнено для цього чату"},"message":{"sources":"Джерела"},"toasts":{"chatCreated":"Новий чат створено","createFailed":"Не вдалося створити сеанс","loadFailed":"Не вдалося завантажити сеанси","chatDeleted":"Чат видалено","deleteFailed":"Не вдалося видалити чат","deleteSessionFailed":"Не вдалося видалити сеанс","historyCleared":"Усю історію чату очищено","historyClearFailed":"Не вдалося очистити історію чату","titleUpdated":"Назву чату оновлено","updateFailed":"Не вдалося оновити сеанс","noValidSession":"Немає дійсного сеансу чату. Створіть або виберіть чат.","sessionNotFound":"Сеанс не знайдено або він недійсний. Виберіть або створіть дійсний сеанс чату.","noModelProvider":"Немає доступного постачальника моделей","modelUnavailable":"Вибрану модель \\"{{model}}\\" недоступно у {{provider}}. Повторно активуйте цього постачальника або виберіть іншу модель.","modelSwitched":"Переключено на {{model}} (попередня модель більше недоступна)","modelsLoadFailed":"Не вдалося завантажити моделі","modelUpdated":"Модель оновлено для поточного чату","modelUpdateFailed":"Не вдалося оновити модель сеансу"},"documents":{"title":"Документи в контексті"},"context":{"title":"Вікно контексту:","full":"заповнено на {{percent}}%","tokensUsed":"використано {{used}} / {{budget}} токенів","tokensUsedNoBudget":"використано {{used}} токенів","capped":"обмежено з {{trained}}"}}`),sidebar:{navigation:{chat:`Чат`,models:`Моделі`,personas:`Персони`,imagine:`Генерація`,agents:`Агенти`,work:`Робота`,settings:`Налаштування`,usageAnalytics:`Використання провайдерів`,system:`Система`,userManagement:`Керування користувачами`,signOut:`Вийти`,exploreLabel:`Огляд`,notes:`Нотатки`},toggleSize:`Змінити розмір бічної панелі`,expandSidebar:`Розгорнути бічну панель`},user:{menu:{changePicture:`Змінити зображення`,settings:`Налаштування`,usageAnalytics:`Використання провайдерів`,system:`Система`,userManagement:`Керування користувачами`,logout:`Вийти`},avatar:{title:`Змінити фото профілю`,updated:`Фото профілю оновлено`,updateFailed:`Не вдалося оновити фото профілю`,saving:`Збереження...`,label:`Аватар`,uploadAvatarImage:`Завантажити зображення аватара`,dragAndDrop:`Перетягніть зображення або натисніть для вибору`,chooseImage:`Вибрати зображення`,uploading:`Завантаження...`,enterImageUrl:`Або введіть URL зображення`,supportedFormats:`Підтримуються: JPG, PNG, GIF, WebP (макс. 2 МБ). Квадратні зображення підходять найкраще.`,customAvatar:`Користувацьке зображення аватара`,clickToChange:`Натисніть, щоб змінити або видалити`,removed:`Аватар видалено`,uploaded:`Аватар успішно завантажено`,invalidFile:`Будь ласка, виберіть дійсний файл зображення`,fileTooLarge:`Розмір зображення аватара має бути менше 2 МБ`,readFailed:`Не вдалося прочитати файл зображення`,uploadFailed:`Не вдалося завантажити зображення аватара`},profile:{noEmail:`Електронна пошта не вказана`}},settings:JSON.parse(`{"title":"Налаштування","tabs":{"appearance":"Зовнішній вигляд","model":"Модель","systemMessage":"Системне повідомлення","plugins":"Плагіни","search":"Пошук","generation":"Генерація","documents":"Документи","tts":"Текст у мовлення","imageGen":"Генерація зображень","data":"Дані","shortcuts":"Комбінації клавіш","about":"Про програму","sessions":"Сеанси","apiKeys":"API-ключі"},"appearance":{"title":"Зовнішній вигляд","language":{"title":"Мова","description":"Виберіть бажану мову"},"theme":{"title":"Тема","light":"Світла","dark":"Темна","amoled":"Глибокий чорний","system":"Системна"},"accent":{"title":"Акцентний колір","custom":"Власний колір","useColor":"Використати {{color}} як акцент","behaviorTitle":"Палітра інтерфейсу","behaviorDescription":"Оберіть, чи залишити акцент лише на елементах керування, чи адаптувати весь світлий або темний інтерфейс.","defaultStyle":"За замовчуванням","defaultStyleDescription":"Зберегти нейтральні поверхні світлої та темної теми.","adaptedStyle":"Адаптувати до акценту","adaptedStyleDescription":"Забарвити поверхні, межі й текст акцентним кольором."},"chatInterface":{"title":"Інтерфейс чату","showUsername":"Показувати ім'я користувача","showUsernameDescription":"Відображати ім'я користувача в повідомленнях чату","followUpSuggestions":"Підказки для продовження","followUpSuggestionsDescription":"Пропонувати швидкі відповіді після кожної відповіді","hapticFeedback":"Тактильний відгук (Android)","hapticFeedbackDescription":"Використовувати легку вібрацію для важливих мобільних дій"},"background":{"title":"Фонове зображення","enable":"Увімкнути фонове зображення","enableDescription":"Показувати власний фон з ефектом розмиття","blur":"Розмиття","opacity":"Прозорість","upload":"Завантажити фонове зображення","dragDrop":"Перетягніть зображення або клацніть для вибору","chooseImage":"Вибрати зображення"}},"saveSettings":"Зберегти налаштування","model":{"title":"Налаштування моделі","defaultModel":"Модель за замовчуванням","defaultModelDescription":"Ця модель буде використовуватися за замовчуванням для нових розмов","selectModel":"Виберіть модель","specializedModels":"Спеціалізовані моделі","visionModel":"Модель зору","selectVisionModel":"Використовувати поточну модель чату","visionModelDescription":"Використовується автоматично, щоразу коли контекст чату містить зображення. Виберіть модель, що підтримує введення зображень.","visionModelUpdateFailed":"Не вдалося оновити модель зору: {{error}}","visionModelNoProvider":"Ця модель зору не має ідентифікатора провайдера. Виберіть доступну модель.","persona":"Персона","updateAll":"Оновити всі моделі","updateAllDescription":"Перевірити оновлення та завантажити останні версії всіх встановлених моделей","updateAllButton":"Оновити всі","updating":"Оновлення моделей...","currentModelInfo":"Інформація про поточну модель","name":"Назва","size":"Розмір","family":"Сімейство","format":"Формат","status":"Статус","statusStarting":"Запуск...","statusComplete":"Завершено","statusError":"Помилка","bulkOperations":"Масові операції","autoTitle":{"title":"Автоматична генерація заголовків","enable":"Увімкнути автозаголовки","enableDescription":"Автоматично генерувати заголовки для нових розмов","taskModel":"Модель для завдань","selectTaskModel":"Виберіть модель для завдань","taskModelDescription":"Модель, що використовується для генерації заголовків розмов"},"updatingModel":"Оновлення {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} з {{total}} моделей"},"systemMessage":{"title":"Системне повідомлення","description":"Встановіть власне системне повідомлення, яке буде використовуватися для всіх нових розмов.","placeholder":"Введіть системне повідомлення...","saved":"Системне повідомлення збережено","saveFailed":"Не вдалося зберегти системне повідомлення"},"plugins":{"title":"Плагіни","description":"Керуйте встановленими плагінами","providerConnections":"Підключення провайдерів","providerConnectionsDescription":"Підключайте, налаштовуйте та перевіряйте провайдерів моделей через плагіни.","providers":"Провайдери","searchProviders":"Пошук провайдерів","noProvidersFound":"Жоден провайдер не відповідає вашому пошуку.","selectProvider":"Виберіть провайдера","selectProviderDescription":"Виберіть провайдера, щоб переглянути його підключення та каталог моделей.","addNew":"Додати новий плагін","upload":"Завантажити плагін","addJson":"Додати JSON","uploading":"Завантаження...","jsonPlaceholder":"Вставте JSON-конфігурацію плагіна...","install":"Встановити плагін","noPlugins":"Плагіни не встановлено","noPluginsDescription":"Додайте плагін для розширення функціональності","loading":"Завантаження плагінів...","installed":"Встановлені плагіни","active":"Активні плагіни","activeLabel":"Активний","inactive":"Неактивний","activate":"Активувати","deactivate":"Деактивувати","models":"моделей","apiKeySet":"API-ключ встановлено","apiKeyConfiguration":"Налаштування API-ключа","apiKeyDescription":"Зберегти особистий API ключ для {{name}}.","apiKeyEnvAlternative":"Або встановіть","environmentVariable":"змінну середовища","apiKeyConfigured":"API-ключ налаштовано","apiKeyPlaceholder":"Введіть API-ключ...","saveApiKey":"Зберегти API-ключ","showApiKey":"Показати API ключ","hideApiKey":"Приховати API ключ","configure":"Налаштувати","providerSettings":"Налаштування провайдера","status":"Статус","defaultEndpoint":"Типова кінцева точка","modelCatalog":"Каталог моделей","modelCatalogDescription":"Виявлені та налаштовані моделі для цього провайдера та їхні можливості.","refreshModels":"Оновити моделі","noModelsConfigured":"Для цього провайдера не налаштовано жодної моделі.","modelId":"ID моделі","capabilities":"Можливості","modelCatalogUpdated":"Каталог моделей оновлено: {{count}} моделей.","modelCatalogUnchanged":"Каталог моделей вже актуальний.","modelCatalogNeedsApiKey":"Додайте дійсний API-ключ для цього провайдера, щоб завантажити його актуальний список моделей.","modelCatalogUnavailable":"Не вдалося завантажити список моделей провайдера.","modelCatalogRefreshFailed":"Не вдалося оновити каталог моделей","capability":{"chat":"Чат","embedding":"Вбудовування","image":"Зображення","speech":"Мовлення","transcription":"Транскрипція"},"exportPlugin":"Експортувати плагін","deletePlugin":"Видалити плагін","apiKey":{"title":"API-ключ","placeholder":"Введіть API-ключ","save":"Зберегти ключ","remove":"Видалити ключ","configured":"API-ключ налаштовано","notConfigured":"Потрібен API-ключ","saved":"API-ключ успішно збережено","removed":"API-ключ видалено","saveFailed":"Не вдалося зберегти API-ключ","removeFailed":"Не вдалося видалити API-ключ","enterKey":"Введіть API-ключ"},"variables":"Variables"},"generation":{"title":"Параметри генерації","description":"Налаштуйте, як AI генерує відповіді","scopeLabel":"Застосовується до","scopeAll":"Усіх моделей","scopeModel":"Лише {{model}}","scopeAllHint":"Значення, які використовує кожна модель, якщо не має власних.","scopeModelHint":"Зберігається лише для цієї моделі й має перевагу над загальними значеннями.","advancedSettings":"Розширені налаштування генерації","advancedSettingsDescription":"Вибірка, ліміти токенів, контекст, штрафи та послідовності зупинки","coreParameters":"Основні параметри","temperature":"Температура","temperatureDescription":"Контролює випадковість. Нижчі значення більш зосереджені, вищі — більш креативні.","topP":"Top P","topPDescription":"Контролює різноманітність через nucleus sampling. Нижчі значення фокусуються на ймовірних токенах.","topK":"Top K","topKDescription":"Обмежує вибір токенів до K найімовірніших. Встановіть 0 для вимкнення.","minP":"Min P","minPDescription":"Мінімальний поріг ймовірності для вибору токенів.","generationControl":"Контроль генерації","maxTokens":"Макс. токенів","maxTokensDescription":"Максимальна кількість токенів для генерації у відповіді.","repeatPenalty":"Штраф за повторення","repeatPenaltyDescription":"Штрафує повторювані токени. Вищі значення зменшують повторення.","contextLength":"Довжина контексту","contextLengthDescription":"Максимальний розмір контекстного вікна для розмов.","seed":"Seed","optional":"необов'язково","random":"Випадковий","seedDescription":"Встановіть конкретний seed для відтворюваних результатів.","advancedOptions":"Розширені параметри","presencePenalty":"Штраф за присутність","presencePenaltyDescription":"Штрафує токени, що з'являються в контексті.","frequencyPenalty":"Штраф за частоту","frequencyPenaltyDescription":"Штрафує часто використовувані токени.","stopSequences":"Стоп-послідовності","commaSeparated":"через кому","stopSequencesDescription":"Власні токени, які зупинять генерацію при зустрічі.","resetDefaults":"Скинути до стандартних","saveOptions":"Зберегти параметри","embeddingSettings":"Налаштування ембедингів","enableEmbeddings":"Увімкнути ембединги документів","thinking":"Міркування","thinkingDescription":"Типовий рівень міркування для відповідей. Кожен чат може його змінити.","thinkingLevels":{"default":"Типове для моделі","defaultWith":"Типове для моделі ({{level}})","off":"Вимкнено","on":"Увімкнено","low":"Низький","medium":"Середній","high":"Високий"}},"documents":{"title":"Налаштування документів","embeddings":{"title":"Ембединги","enable":"Увімкнути ембединги документів","model":"Модель ембедингів","modelDescription":"Виберіть модель для ембедингу документів","chunkSize":"Розмір частини","chunkSizeInTokens":"(у токенах)","chunkSizeDescription":"Розмір текстових частин для ембедингу","chunkOverlap":"Перекриття частин","chunkOverlapInTokens":"(у токенах)","chunkOverlapDescription":"Перекриття між послідовними частинами","similarityThreshold":"Поріг схожості","similarityDescription":"Мінімальний бал схожості для включення результатів","status":"Статус ембедингів","statusLabel":"Статус","available":"Доступно","unavailable":"Недоступно","chunksWithEmbeddings":"Частини з ембедингами","coverage":"Покриття","regenerate":"Перегенерувати ембединги","regenerating":"Перегенерація..."},"collections":{"title":"Колекції знань","description":"Групуйте документи в колекції та прикріплюйте їх до будь-якого чату.","namePlaceholder":"Назва колекції","create":"Створити","none":"Без колекції","deleteConfirm":"Видалити цю колекцію? Документи всередині збережуться.","createFailed":"Не вдалося створити колекцію","deleteFailed":"Не вдалося видалити колекцію","assignFailed":"Не вдалося перемістити документ"},"library":{"title":"Завантажені документи","description":"Документи, доступні як контекст чату. Документ, завантажений у чаті, лишається у своїй розмові; документ без чату й колекції долучається до кожної розмови.","empty":"Документів ще не завантажено.","chatScope":"Один чат","everyChatScope":"Усі чати","deleteConfirm":"Видалити «{{name}}»? Він зникне з усіх чатів.","deleteFailed":"Не вдалося видалити документ"}},"tts":{"title":"Текст у мовлення","description":"Налаштуйте параметри синтезу мовлення для озвучення повідомлень","loadingProviders":"Завантаження провайдерів TTS...","noProviders":"Немає провайдерів TTS","noProvidersDescription":"Налаштуйте плагін з підтримкою TTS, щоб увімкнути синтез мовлення","enable":"Увімкнути TTS","enableDescription":"Дозволити синтез мовлення для повідомлень асистента","autoPlay":"Автовідтворення відповідей","autoPlayDescription":"Автоматично озвучувати нові повідомлення асистента","streamSentences":"Природне пакетне відтворення","streamSentencesDescription":"Заздалегідь створювати кілька пакетів з урахуванням фраз і відтворювати їх як одну безперервну відповідь.","voiceConfiguration":"Налаштування голосу","model":"Модель TTS","modelDescription":"Виберіть модель для синтезу мовлення","voice":"Голос","selectVoice":"Виберіть голос","voiceDescription":"Виберіть голос для синтезу мовлення","providerDefaultVoice":"Ця модель використовує голос за замовчуванням, якщо під час створення мовлення не надано еталонний запис.","voiceCloningAvailable":"Доступне клонування голосу","voiceCloningAvailableDescription":"Використовуйте розділ «Уявити → Аудіо», щоб створити мовлення з еталонного запису, зробленого за згодою мовця, і його точної розшифровки. За бажанням запис можна зберегти як голос для повторного використання.","savedVoiceOption":"{{name}} (збережений голос)","savedVoices":"Збережені голоси","loadingSavedVoices":"Завантаження збережених голосів…","deleteSavedVoice":"Видалити збережений голос {{name}}","deleteSavedVoiceConfirm":"Видалити збережений голос «{{name}}»? Його еталонний запис і розшифровку буде видалено.","savedVoiceDeleted":"Збережений голос видалено","savedVoicePreferenceCleanupFailed":"Збережений голос видалено, але налаштування мовлення не вдалося скинути","savedVoiceDeleteFailed":"Не вдалося видалити збережений голос","speed":"Швидкість","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Доступні провайдери","models":"моделей","test":"Тест","testing":"Тестування...","stop":"Зупинити"},"imageGen":{"title":"Генерація зображень","description":"Налаштуйте параметри та провайдерів генерації зображень","loadingProviders":"Завантаження провайдерів генерації зображень...","noProviders":"Немає провайдерів генерації зображень","noProvidersDescription":"Налаштуйте плагін з підтримкою генерації зображень","enable":"Увімкнути генерацію зображень","enableDescription":"Дозволити AI-генерацію зображень у розмовах","configuration":"Налаштування","model":"Модель","modelDescription":"Виберіть модель для генерації зображень","size":"Розмір","sizeDescription":"Роздільна здатність згенерованих зображень","quality":"Якість","qualityDescription":"Рівень якості згенерованих зображень","style":"Стиль","styleDescription":"Пресет стилю для згенерованих зображень","availableProviders":"Доступні провайдери","models":"моделей"},"data":{"title":"Керування даними","export":"Експорт даних","exportDescription":"Завантажте переносний архів налаштувань, папок чатів, сеансів і повідомлень, нотаток, колекцій знань та видобутого тексту документів.","archiveScopeV3":"Містить налаштування, чати, папки, нотатки, колекції знань і видобутий текст документів. Не містить облікових записів і секретів, біометрично клонованих голосів, створених медіафайлів, персон і пам’яті, а також даних або томів Work.","exportAll":"Експортувати всі дані","import":"Імпорт даних","importDescription":"Імпортуйте дані з попереднього експорту.","importData":"Імпортувати дані","importing":"Імпорт...","clearSessions":"Очистити сесії","clearSessionsDescription":"Видалити всі сесії чату. Цю дію неможливо скасувати.","clearAll":"Очистити все","clearing":"Очищення...","importOptions":"Параметри імпорту","importOptionsDescription":"Виберіть, як обробляти існуючі дані","validatingArchive":"Перевірка архіву та обчислення змін…","archiveValidationFailed":"Не вдалося перевірити архів","preflightReport":"Попередній перегляд імпорту","preflightIncoming":"{{folders}} папок · {{sessions}} чатів · {{messages}} повідомлень · {{notes}} нотаток · {{collections}} колекцій · {{documents}} документів · {{chunks}} фрагментів","preflightRemappedIds":"{{count}} ідентифікаторів буде перепризначено для захисту даних іншого облікового запису.","skipDuplicates":"Пропустити дублікати","overwrite":"Перезаписати існуючі","importResults":"Результати імпорту","preferences":"Налаштування","imported":"Імпортовано","failed":"Помилка","sessions":"Сесії","sessionFolders":"Папки сеансів","notes":"Нотатки","knowledgeCollections":"Колекції знань","importedLabel":"імпортовано","overwrittenLabel":"перезаписано","skipped":"пропущено","toCreate":"буде створено","toOverwrite":"буде перезаписано","toSkip":"буде пропущено","documents":"Документи","warnings":"Попередження","refreshAfterImportFailed":"Дані імпортовано, але деякі подання не вдалося оновити. Перезавантажте Libre WebUI, щоб побачити всі зміни.","errors":"Помилки","archivedChats":{"title":"Архівовані чати","empty":"Немає архівованих чатів","unarchive":"Відновити"}},"about":{"title":"Про програму","versionLabel":"Версія","ollama":{"title":"Статус Ollama","version":"Версія","healthy":"Працює","unhealthy":"Не працює"},"stats":{"models":"Моделі","sessions":"Сесії"},"features":{"privacy":{"title":"Приватність перш за все","description":"Ваші дані залишаються на вашому пристрої"},"openSource":{"title":"Відкритий код","description":"Безкоштовне програмне забезпечення з відкритим кодом"},"localInference":{"title":"Локальний інференс","description":"Запускайте AI-моделі локально з Ollama"}},"openSourceBy":"Відкритий код від {{company}}","links":{"title":"Посилання","github":"GitHub","githubDescription":"Переглянути вихідний код та зробити внесок","website":"Веб-сайт","websiteDescription":"Відвідайте наш веб-сайт","documentation":"Документація","reportIssue":"Повідомити про проблему","reportIssueDescription":"Звіти про помилки та запити функцій","documentationDescription":"Посібники, навчальні матеріали та довідник API","forgejo":"Дзеркало Forgejo","forgejoDescription":"Самостійно розміщений репозиторій Forgejo","sponsor":"Підтримати","sponsorDescription":"Допоможіть фінансувати проєкт"},"version":"Версія {{version}}"},"groups":{"general":"Загальні","chat":"Чат","media":"Мовлення та зображення","connections":"З'єднання"},"search":{"title":"Вебпошук","description":"Шукайте в інтернеті через власний екземпляр SearXNG. Після ввімкнення в чаті з'являється перемикач пошуку, а завдання Work з доступом до мережі можуть шукати.","enableLabel":"Увімкнути вебпошук","enableDescription":"Надати вебпошук чатам і завданням Work. Пошук виконується на сервері через налаштований екземпляр.","urlLabel":"URL SearXNG","urlDescription":"Базовий URL екземпляра SearXNG, доступний із сервера. Доданий приватний деплой-стек надає http://searxng:8080.","maxResultsLabel":"Результатів на пошук","maxResultsDescription":"Скільки результатів живлять відповідь або виклик інструмента, 1-10.","maxResultsInvalid":"Кількість результатів має бути від 1 до 10.","safeSearchLabel":"Безпечний пошук","safeSearchDescription":"Просити рушій фільтрувати відверті результати.","test":"Перевірити з'єднання","testing":"Перевірка…","testOk":"Пошук працює — отримано {{results}} результатів","testFailed":"Перевірка пошуку не вдалася","save":"Зберегти","saved":"Налаштування пошуку збережено","saveFailed":"Не вдалося зберегти налаштування пошуку"},"compaction":{"title":"Стиснення контексту","description":"Коли розмова перевищує поріг токенів, сервер підсумовує її старіші повідомлення й дослівно зберігає лише найновіші. Діє для всіх користувачів цього сервера.","thresholdLabel":"Поріг токенів","thresholdDescription":"Оцінна кількість токенів контексту, вище якої стара історія підсумовується, 500-1 000 000.","thresholdInvalid":"Поріг токенів має бути від 500 до 1 000 000.","keepRecentLabel":"Збережені останні повідомлення","keepRecentDescription":"Скільки останніх повідомлень завжди залишаються дослівно, 2-200.","keepRecentInvalid":"Кількість збережених останніх повідомлень має бути від 2 до 200.","modelLabel":"Модель стиснення","modelDescription":"Модель, яка пише підсумки. Якщо нічого не вибрано, використовується модель самого сеансу.","sessionModelOption":"Використовувати модель сеансу","promptLabel":"Власний промпт для підсумку","promptPlaceholder":"Залиште порожнім, щоб використовувати вбудований промпт","promptDescription":"Змінні шаблону {{previousSummaryVariable}} і {{messagesVariable}} замінюються попереднім підсумком і повідомленнями, що підсумовуються.","saved":"Налаштування стиснення збережено","saveFailed":"Не вдалося зберегти налаштування стиснення","loadFailed":"Не вдалося завантажити налаштування стиснення"},"sessions":{"title":"Сеанси","description":"Усі місця, де виконано вхід у цей обліковий запис. Вихід із сеансу набирає чинності негайно; повторний вхід відновлює доступ.","signOutOthers":"Вийти з інших сеансів","signingOutOthers":"Вихід…","signOut":"Вийти","signingOut":"Вихід…","revoked":"Сеанс завершено.","revokeFailed":"Не вдалося завершити сеанс.","othersRevoked":"Завершено інших сеансів: {{count}}","loadFailed":"Не вдалося завантажити сеанси.","empty":"Сеансів не знайдено.","current":"Поточний сеанс","revokedBadge":"Завершено","unknownDevice":"Невідомий пристрій","createdAt":"Вхід виконано","lastSeenAt":"Остання активність","expiresAt":"Закінчується"},"apiKeys":{"title":"API-ключі","description":"Токени з обмеженими областями дії для скриптів та інтеграцій. Кожен ключ має доступ лише до вибраних вами областей.","newKeyTitle":"Ваш новий API-ключ","copy":"Копіювати","copied":"Скопійовано в буфер обміну.","copyFailed":"Не вдалося скопіювати.","showOnceWarning":"Скопіюйте його зараз — більше він не показуватиметься.","dismiss":"Готово","createTitle":"Створити ключ","nameLabel":"Назва","namePlaceholder":"напр. CI-конвеєр","nameRequired":"Дайте ключу назву.","expiryLabel":"Термін дії в днях (необов'язково)","expiryPlaceholder":"Безстроково","expiryInvalid":"Термін дії має бути цілим числом днів.","scopesLabel":"Області дії","scopesRequired":"Виберіть принаймні одну область дії.","create":"Створити ключ","creating":"Створення…","created":"API-ключ створено.","createFailed":"Не вдалося створити API-ключ.","revoke":"Відкликати","revoking":"Відкликання…","revoked":"API-ключ відкликано.","revokeFailed":"Не вдалося відкликати API-ключ.","revokedBadge":"Відкликано","loadFailed":"Не вдалося завантажити API-ключі.","empty":"API-ключів ще немає.","createdAt":"Створено","lastUsedAt":"Останнє використання","expiresAt":"Закінчується","neverExpires":"Безстроково"}}`),models:{title:`Моделі`,subtitle:`Завантажуйте, керуйте та моніторте ваші моделі Ollama`,installed:`Встановлені моделі`,available:`Доступні моделі`,pull:`Завантажити модель`,pulling:`Завантаження...`,delete:`Видалити модель`,deleting:`Видалення...`,size:`Розмір`,modified:`Змінено`,family:`Сімейство`,parameters:`Параметри`,quantization:`Квантизація`,noModels:`Моделі не встановлено`,pullFirst:`Завантажте модель, щоб почати`,noModelsFound:`Моделей не знайдено`},personas:{title:`Персони`,create:`Створити персону`,edit:`Редагувати персону`,delete:`Видалити персону`,name:`Назва`,description:`Опис`,systemPrompt:`Системний промпт`,model:`Модель`,avatar:`Аватар`,background:`Фон`,noPersonas:`Персони не створено`,createFirst:`Створіть свою першу персону, щоб налаштувати досвід чату`},gallery:{title:`Галерея`,subtitle:`Ваша галерея зображень, згенерованих AI`,imageCount:`{{count}} зображень`,generate:`Згенерувати зображення`,generateDescription:`Створюйте зображення за допомогою AI`,generating:`Генерація...`,prompt:`Промпт`,promptPlaceholder:`Опишіть зображення, яке хочете згенерувати...`,noImages:`Зображення ще не згенеровано`,download:`Завантажити`,delete:`Видалити`,regenerate:`Перегенерувати`,model:`Модель`,size:`Розмір`,quality:`Якість`,created:`Створено`},errors:{generic:`Сталася помилка`,network:`Помилка мережі. Перевірте підключення.`,unauthorized:`У вас немає дозволу на виконання цієї дії.`,notFound:`Запитуваний ресурс не знайдено.`,serverError:`Помилка сервера. Спробуйте пізніше.`,validation:`Перевірте введені дані та спробуйте ще раз.`},keyboard:{title:`Гарячі клавіші`,toggleSidebar:`Перемкнути бічну панель`,openSettings:`Відкрити налаштування`,toggleDarkMode:`Перемкнути темний режим`,showShortcuts:`Показати гарячі клавіші`,closeModals:`Закрити модальні вікна`,groups:{navigation:`Навігація`,general:`Загальні`,chat:`Чат`,workspace:`Робоча область`},actions:{sendMessage:`Надіслати повідомлення`,newLine:`Новий рядок у повідомленні`,saveEdit:`Зберегти змінене повідомлення`,cancelEdit:`Скасувати редагування`,saveFile:`Зберегти файл`,formatCode:`Форматувати код`},description:`Усі комбінації клавіш, доступні в Libre WebUI.`,newChat:`Новий чат`,newWork:`Новий сеанс Work`,openPalette:`Відкрити палітру команд`},modelManager:{title:`Моделі`,loading:`Завантаження моделей...`,systemStatus:{online:`Ollama онлайн`,offline:`Ollama офлайн`,models:`модель`,models_plural:`моделей`,running:`працює`,vram:`VRAM`},sections:{pull:`Завантажити нову модель`,library:`Переглянути бібліотеку`,huggingface:`HuggingFace Hub`,running:`Запущені моделі`,local:`Локальні моделі`,advanced:`Розширені дії`,catalog:`Каталог моделей`},catalog:{searchPlaceholder:`Шукати моделі за назвою або провайдером...`,noModels:`Моделей поки немає.`,empty:`Жодна модель не відповідає вашому запиту.`,providerOllama:`Ollama`,hidden:`Прихована`,visibilityFailed:`Не вдалося оновити видимість моделі.`,filterAll:`Усі моделі`,filterLocal:`Локальні`,filterProviders:`Провайдери`,filterHidden:`Приховані`,enableAll:`Увімкнути показані`,disableAll:`Вимкнути показані`,rename:`Змінити назву та зображення`,setPicture:`Задати зображення`,clearPicture:`Прибрати зображення`,pictureInvalid:`Виберіть файл зображення.`,pictureTooLarge:`Зображення мають бути менші за 192 КБ.`,saving:`Збереження…`,hide:`Приховати від користувачів`,show:`Показати користувачам`},pull:{placeholder:`Введіть назву моделі (напр., llama3.2:3b, deepseek-r1:14b)`,button:`Завантажити`,cancel:`Скасувати`,popular:`Популярні моделі:`,browseAll:`Переглянути всі моделі на ollama.com`,success:`Модель {{name}} успішно завантажено`,cancelled:`Завантаження моделі скасовано`,failed:`Не вдалося завантажити модель`,enterName:`Введіть назву моделі`,restricted:`Встановлення моделей у цьому екземплярі доступне лише адміністраторам.`},progress:{starting:`Ініціалізація...`,pulling:`Завантаження моделі...`,pullingLayer:`завантаження`,verifying:`Перевірка цілісності...`,verifyingDigest:`перевірка sha256 дайджесту`,writing:`Запис маніфесту...`,cleaning:`Очищення...`},library:{available:`доступно`,search:`Пошук моделей...`,noResults:`Моделі, що відповідають критеріям, не знайдено`,installed:`Встановлено`,more:`+{{count}} ще`,refresh:`Оновити бібліотеку`},huggingface:{browseAll:`Переглянути все на HuggingFace`,checkingGguf:`Пошук GGUF-файлів...`,noGgufAvailable:`Немає GGUF-файлів для прямого завантаження в Ollama`,ggufFilesCount:`GGUF-файли ({{count}}) - Завантажити напряму в Ollama`,noModelsFound:`Моделей не знайдено`,noResults:`Моделей не знайдено. Спробуйте змінити пошук або фільтри.`,browseAllLink:`Переглянути все`,search:`Пошук моделей HuggingFace...`,by:`від`,gated:`Обмежений доступ`,viewOnHF:`Переглянути на HuggingFace`,sortDownloads:`Завантаження`,sortLikes:`Вподобання`,sortRecent:`Нещодавні`,taskTextGeneration:`Генерація тексту`,taskTextToSpeech:`Текст у мовлення`,taskTextToImage:`Текст у зображення`,taskSpeechRecognition:`Розпізнавання мовлення`,tasks:{textGen:`Генерація тексту`,tts:`Текст у мовлення`,image:`Текст у зображення`,stt:`Розпізнавання мовлення`},sort:{downloads:`Найбільш завантажувані`,likes:`Найпопулярніші`,recent:`Нещодавно оновлені`}},local:{noModels:`Моделі ще не встановлено`,pullToStart:`Завантажте модель вище, щоб почати`,installed:`встановлено`,running:`Працює`,info:`Інфо`,copy:`Копіювати`,delete:`Видалити`,deleteConfirm:`Ви впевнені, що хочете видалити модель "{{name}}"?`,deleteSuccess:`Модель {{name}} успішно видалено`,deleteFailed:`Не вдалося видалити модель`},advanced:{createModel:`Створити модель`,fromModelfile:`З Modelfile`,copyModel:`Копіювати модель`,duplicateExisting:`Дублювати існуючу`,testEmbeddings:`Тестувати ембединги`,generateVectors:`Генерувати вектори`,healthCheck:`Перевірка справності`,testConnection:`Тест підключення`,healthy:`Ollama справний!`},modals:{details:{title:`Деталі моделі`,info:`Інформація про модель`,family:`Сімейство`,parameters:`Параметри`,quantization:`Квантизація`,format:`Формат`,systemPrompt:`Системний промпт`,template:`Шаблон`,license:`Ліцензія`,modelfile:`Modelfile`,noDetails:`Деталі недоступні`},copy:{title:`Копіювати модель`,source:`Вихідна модель`,selectModel:`Виберіть модель...`,newName:`Нова назва моделі`,placeholder:`напр., my-custom-model`,copying:`Копіювання...`,button:`Копіювати модель`,success:`Модель скопійовано як {{name}}`,failed:`Не вдалося скопіювати модель`,enterBoth:`Введіть назву вихідної та цільової моделі`},create:{title:`Створити власну модель`,name:`Назва моделі`,namePlaceholder:`напр., my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
- SYSTEM You are a helpful assistant.`,see:`Див.`,docs:`Документація Modelfile`,docsLink:`для довідки з синтаксису`,creating:`Створення...`,button:`Створити модель`,success:`Модель {{name}} успішно створено`,failed:`Не вдалося створити модель`,enterBoth:`Введіть назву моделі та вміст Modelfile`},embeddings:{title:`Тестувати ембединги`,model:`Модель ембедингів`,selectModel:`Виберіть модель...`,recommended:`Рекомендовано: nomic-embed-text, mxbai-embed-large`,input:`Вхідний текст`,placeholder:`Введіть текст для генерації ембедингів...`,generating:`Генерація...`,button:`Згенерувати ембединги`,result:`Результат ({{count}} вимірів)`,success:`Згенеровано {{count}}-вимірний вектор ембедингу`,failed:`Не вдалося згенерувати ембединги`,enterBoth:`Виберіть модель та введіть текст`}}},personaManager:{title:`Персони`,subtitle:`Створюйте та керуйте AI-персонами з унікальними особистостями, пам'яттю та поведінкою`,loading:`Завантаження персон...`,createButton:`Створити персону`,importExport:`Імпорт/Експорт`,stats:{title:`Ваші персони`,count:`{{count}} персона створена`,count_plural:`{{count}} персон створено`},empty:{title:`Персон ще немає`,description:`Створіть свою першу персону, щоб почати персоналізовану взаємодію з AI`,button:`Створити першу персону`},deleteConfirm:`Ви впевнені, що хочете видалити "{{name}}"?`,deleteSuccess:`Персону "{{name}}" успішно видалено`,downloadSuccess:`Персону "{{name}}" успішно завантажено`,failed:`Не вдалося {{action}} персону`},personaForm:{title:{create:`Створити нову персону`,edit:`Редагувати персону`},subtitle:{create:`Створіть нову AI-персону з унікальною особистістю, системою пам'яті та адаптивним навчанням`,edit:`Налаштуйте вашу AI-персону з розширеною пам'яттю, адаптивним навчанням та інтелектуальними параметрами`},loading:`Завантаження форми...`,saved:`Збережено`,tabs:{basic:`Основне`,parameters:`Параметри`,memory:`Пам'ять і навчання`,advanced:`Розширене`},basic:{name:`Назва`,namePlaceholder:`Введіть назву персони`,model:`Модель`,selectModel:`Виберіть модель`,description:`Опис`,descriptionPlaceholder:`Опишіть вашу персону...`,systemPrompt:`Системний промпт`,systemPromptPlaceholder:`Введіть системний промпт, який визначає поведінку персони...`,systemPromptHint:`Системний промпт визначає, як ваша персона буде поводитися та відповідати.`},parameters:{temperature:`Температура`,temperatureHint:`Контролює креативність vs послідовність`,topP:`Top-P`,topPHint:`Контролює різноманітність відповідей`,topK:`Top-K`,topKHint:`Обмежує словник до top-k токенів`,contextWindow:`Контекстне вікно`,contextWindowHint:`Максимальна довжина історії розмови`,maxTokens:`Макс. токенів`,maxTokensHint:`Максимальна довжина відповіді`,repeatPenalty:`Штраф за повторення`,repeatPenaltyHint:`Зменшує повторювані відповіді`},memory:{title:`Система пам'яті`,subtitle:`Персона запам'ятовує розмови з часом`,enableHint:`Увімкніть систему пам'яті, щоб ваша персона запам'ятовувала розмови та будувала контекст з часом.`,loading:`Завантаження статусу пам'яті...`,noData:`Даних пам'яті ще немає`,memories:`Спогади`,mbUsed:`МБ використано`,lastBackup:`Останній бекап`,never:`Ніколи`,maxMemories:`Максимум спогадів`,maxMemoriesHint:`Скільки спогадів може зберігати персона`,retention:`Збереження пам'яті`,retentionHint:`Днів зберігання спогадів до очищення`,autoCleanup:`Автоочищення старих спогадів`,wipeAll:`Очистити всі спогади`,wipeCannot:`Цю дію неможливо скасувати`,wipeButton:`Очистити`,wiping:`Очищення...`,wipeConfirm:`Ви впевнені, що хочете очистити всі спогади? Цю дію неможливо скасувати.`,wipeSuccess:`Очищено {{count}} спогадів`},learning:{title:`Адаптивне навчання`,subtitle:`Персона еволюціонує на основі взаємодій`,enableHint:`Увімкніть адаптивне навчання, щоб персона еволюціонувала та персоналізувала відповіді на основі ваших взаємодій.`,speed:`Швидкість навчання`,slow:`Повільна`,slowDesc:`Поступові зміни`,balanced:`Збалансована`,balancedDesc:`Помірний темп`,fast:`Швидка`,fastDesc:`Швидка адаптація`,autoAdapt:`Автоадаптація до вподобань користувача`,whatLearns:`Що вивчає персона:`,conversationTone:`Тон розмови`,responseStyle:`Стиль відповідей`,userPreferences:`Вподобання користувача`,topicInterests:`Інтереси щодо тем`},advanced:{embeddingModel:`Модель ембедингів`,embeddingHint:`Виберіть модель для кодування пам'яті та семантичного пошуку. Моделі ембедингів показані першими, потім інші доступні моделі.`,noModels:`Моделі не знайдено`,embeddingModels:`Моделі ембедингів`,otherModels:`Інші моделі`,installHint:`Встановіть модель ембедингів:`,recommended:`Рекомендовано: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`Про розширені налаштування`,aboutDescription:`Модель ембедингів використовується системою пам'яті для розуміння семантичного значення та пошуку релевантних спогадів під час розмов. Виберіть модель, що відповідає вашому випадку використання та доступним ресурсам.`},actions:{cancel:`Скасувати`,save:`Зберегти`,saving:`Збереження...`,saveClose:`Зберегти і закрити`,create:`Створити`},success:{created:`Персону створено`,updated:`Персону оновлено`},error:{saveFailed:`Не вдалося зберегти`}},personaCard:{enhanced:`Покращена`,systemPrompt:`Системний промпт`,memories:`спогадів`,use:`Використати`,editTooltip:`Редагувати персону`,downloadTooltip:`Завантажити персону`,backup:`Бекап`,exportDNA:`Експорт ДНК`,wipeMemories:`Очистити спогади`,wipeConfirm:`Ви впевнені, що хочете очистити всі спогади цієї персони? Цю дію неможливо скасувати.`,wipeSuccess:`Очищено {{count}} спогадів`,backupSuccess:`Бекап персони успішно завантажено`,dnaSuccess:`ДНК персони успішно експортовано`,failed:`Не вдалося {{action}}`},userManager:{title:`Керування користувачами`,subtitle:`Керуйте обліковими записами та дозволами користувачів`,pageDescription:`Керуйте обліковими записами користувачів, дозволами та контролем доступу для вашого екземпляра Libre WebUI.`,loading:`Завантаження користувачів...`,createUser:`Створити користувача`,search:`Пошук користувачів...`,noUsers:`Користувачів не знайдено`,noUsersMatching:`Користувачів, що відповідають пошуку, не знайдено`,columns:{user:`Користувач`,email:`Електронна пошта`,role:`Роль`,created:`Створено`,actions:`Дії`},roles:{admin:`Адміністратор`,user:`Користувач`},noEmail:`Пошта не вказана`,deleteConfirm:`Ви впевнені, що хочете видалити користувача "{{name}}"?`,deleteSuccess:`Користувача успішно видалено`,deleteFailed:`Не вдалося видалити користувача`,cannotDeleteSelf:`Ви не можете видалити власний обліковий запис`,approval:{title:`Очікують на підтвердження`,description:`Перевіряйте нові реєстрації, перш ніж дозволити доступ до цього екземпляра.`,registered:`Зареєстровано`,activate:`Активувати обліковий запис`,reject:`Відхилити реєстрацію`,approved:`{{name}} тепер може увійти.`,failed:`Обліковий запис не вдалося підтвердити.`,notification:`{{count}} реєстрацій очікують на ваш дозвіл.`,notificationBadge:`{{count}} користувачів очікують на підтвердження`},form:{title:{create:`Створити користувача`,edit:`Редагувати користувача`},username:`Ім'я користувача`,usernamePlaceholder:`Введіть ім'я користувача`,email:`Електронна пошта`,emailPlaceholder:`Введіть пошту (необов'язково)`,password:`Пароль`,passwordPlaceholder:`Введіть пароль`,passwordHint:`Залиште порожнім, щоб зберегти поточний пароль`,role:`Роль`,creating:`Створення...`,updating:`Оновлення...`,createButton:`Створити користувача`,updateButton:`Оновити користувача`,createSuccess:`Користувача успішно створено`,updateSuccess:`Користувача успішно оновлено`,createFailed:`Не вдалося створити користувача`,updateFailed:`Не вдалося оновити користувача`},workAccess:{title:`Доступ до Work`,description:`Дозволити всім активним користувачам створювати та запускати завдання Work в ізольованих пісочницях. Адміністратори завжди мають доступ; робочі простори в теках хоста залишаються лише для адміністраторів.`,saved:`Доступ до Work оновлено`,saveFailed:`Не вдалося оновити доступ до Work`},workPolicies:{title:`Політики Work`,description:`Іменовані пресети середовища (образ, ліміти, зупинка в простої), під якими створюються завдання. Порожні поля успадковують глобальні значення.`,add:`Додати політику`,name:`Назва`,image:`Образ`,memory:`Пам'ять`,cpu:`CPU`,pids:`Ліміт PID`,workspaceSize:`Розмір робочого простору`,idleMinutes:`Зупинка в простої (хвилини)`,networkDefault:`Мережа за замовчуванням`,networkInherit:`Успадкувати типове`,networkOn:`Увімкнено`,networkOff:`Вимкнено`,save:`Зберегти`,cancel:`Скасувати`,edit:`Редагувати політику`,delete:`Видалити політику`,deleteConfirm:`Видалити цю політику? Завдання, що її використовують, повернуться до глобальних значень.`,empty:`Політик поки немає. Завдання використовують глобальні налаштування середовища.`,saved:`Політику Work збережено`,deleted:`Політику Work видалено`,failed:`Не вдалося зберегти політику Work`,invalidNumber:`Ліміт PID і зупинка в простої мають бути числами.`},modelAccess:{title:`Завантаження моделей`,description:`Дозволити всім активним користувачам завантажувати моделі з Ollama та браузера Hugging Face. Адміністратори завжди можуть завантажувати моделі.`,saved:`Доступ до завантаження моделей оновлено`,saveFailed:`Не вдалося оновити доступ до завантаження моделей`},webSearchAccess:{title:`Вебпошук`,description:`Дозволити всім активним користувачам використовувати вебпошук у чатах і завданнях Work. Адміністратори завжди можуть ним користуватися. Рушій налаштовується в Налаштування > Пошук.`,saved:`Доступ до вебпошуку оновлено`,saveFailed:`Не вдалося оновити доступ до вебпошуку`},agentAccess:{title:`Агенти`,description:`Надати адміністраторам розділ «Агенти» (Libre Claw). CLI агентів виконуються на хості від імені користувача сервера, поза пісочницею Work.`,saved:`Доступ до агентів оновлено`,saveFailed:`Не вдалося оновити доступ до агентів`,lockedByEnv:`Закріплено змінною середовища AGENT_CLI_MODELS_ENABLED.`},groups:{title:`Групи`,description:`Об'єднуйте облікові записи в групи для керування спільним доступом і переглядайте, що фактично може робити будь-який обліковий запис.`,newGroup:`Нова група`,nameLabel:`Назва`,nameRequired:`Дайте групі назву.`,descriptionLabel:`Опис (необов'язково)`,create:`Створити групу`,creating:`Створення…`,created:`Групу створено.`,createFailed:`Не вдалося створити групу.`,deleted:`Групу видалено.`,deleteFailed:`Не вдалося видалити групу.`,deleteGroup:`Видалити групу`,loadFailed:`Не вдалося завантажити групи.`,empty:`Груп ще немає.`,memberCount:`Учасники: {{count}}`,noMembers:`Учасників ще немає.`,addedAt:`Додано`,addMember:`Додати учасника`,add:`Додати`,selectUser:`Виберіть користувача…`,memberAdded:`Учасника додано.`,memberAddFailed:`Не вдалося додати учасника.`,removeMember:`Вилучити учасника`,memberRemoved:`Учасника вилучено.`,memberRemoveFailed:`Не вдалося вилучити учасника.`,effectiveTitle:`Фактичний доступ`,effectiveDescription:`Виберіть обліковий запис, щоб побачити доступ, який він отримує в підсумку через роль, групи та надані дозволи.`,accessLookupFailed:`Не вдалося завантажити фактичний доступ.`,roleLabel:`Роль`,statusLabel:`Статус`,memberOf:`Групи`,featuresLabel:`Доступ до функцій`,grantsLabel:`Надані дозволи`,grantVia:`через`},audit:{title:`Журнал аудиту безпеки`,description:`Останні входи, перевірки дозволів та адміністративні зміни на цьому екземплярі.`,actionFilter:`Дія`,actionPlaceholder:`напр. auth.login`,resultFilter:`Результат`,resultSuccess:`Успішно`,resultDenied:`Відмовлено`,resultFailure:`Помилка`,limitFilter:`Ліміт`,loadFailed:`Не вдалося завантажити журнал аудиту.`,empty:`Подій аудиту ще не зафіксовано.`,actor:`Виконавець`,target:`Ціль`}},usageAnalytics:{eyebrow:`Адміністрування`,title:`Використання провайдерів`,description:`Відстежуйте вихідні API-виклики та споживання моделей у ввімкнених плагінах цього екземпляра.`,days:`{{count}} днів`,refresh:`Оновити статистику`,loadFailed:`Не вдалося завантажити статистику використання провайдерів.`,metrics:{calls:`Виклики`,tokens:`Токени`},cards:{calls:`API-виклики`,callsDetail:`Серед {{count}} активних користувачів`,tokens:`Використані токени`,tokensDetail:`Використання зафіксовано у {{count}} викликах`,success:`Рівень успіху`,successDetail:`{{count}} невдалих викликів`,latency:`Середня затримка`,latencyDetail:`Час виконання від початку до кінця у провайдера`},activity:{title:`Споживання з часом`,callsDescription:`Щоденні вихідні запити до увімкнених плагінів`,tokensDescription:`Щоденні підсумки токенів, звітовані провайдерами`,chartLabel:`Графік щоденного {{metric}} провайдера`},models:{title:`Споживання моделями`,description:`Моделі з найбільшим трафіком за цей період.`,model:`Модель`,success:`Успіх`,latency:`Затримка`},providers:{title:`Трафік увімкнених плагінів`},capabilities:{title:`Розподіл можливостей`,characters:`{{count}} символів`,bytes:`{{count}} байтів`,images:`{{count}} зображень`,jobs:`{{count}} відеозавдань`,inputs:`{{count}} входів`,reportedTokens:`{{count}} звітованих токенів`},empty:{title:`Викликів провайдерів ще немає`,description:`Виклики з'являться тут після того, як увімкнений плагін обробить запити чату, Work, вбудовування, зображення, мовлення, звуку або відео.`},privacyNote:`Використання вимірюється на сервері на межі вихідного плагіна. Libre WebUI зберігає провайдера, модель, час, статус і звітовані лічильники — ніколи промпти, відповіді, кінцеві точки, облікові дані або тіла помилок провайдера. Підсумки токенів включають лише виклики, у яких провайдер повернув метадані використання.`,heatmap:{title:`Рік активності`,description:`Щоденні виклики провайдерів за останній рік, розфарбовані за найуживанішою моделлю кожного дня.`,calls:`викликів`,noCalls:`Немає викликів`,other:`Інші моделі`,less:`Менше`,more:`Більше`,yearTotal:`{{formatted}} викликів за останній рік`}},systemPage:{eyebrow:`Адміністрування`,title:`Система`,description:`Моніторинг машини та середовища, на яких розміщено цей екземпляр Libre WebUI.`,updated:`Оновлено {{date}}`,refresh:`Оновити системну інформацію`,loadFailed:`Не вдалося завантажити системну інформацію.`,cards:{uptime:`Час роботи хоста`,uptimeDetail:`Працює з {{date}}`,memory:`Використано пам'яті`,memoryDetail:`{{used}} з {{total}}`,freeSpace:`Вільний простір`,freeSpaceDetail:`{{label}} · {{total}} загалом`,containers:`Запущені контейнери`,containersDetail:`{{total}} контейнер(ів) відомо Docker`,dockerUnavailable:`Docker недоступний`,unavailable:`Недоступно`},host:{title:`Хост і середовище`,description:`Операційна система, процесор та деталі процесу Libre WebUI.`,container:`Середовище контейнера`,native:`Нативне середовище`,hostname:`Ім'я хоста`,operatingSystem:`Операційна система`,processor:`Процесор`,logicalCpus:`логічні CPU`,loadAverage:`Середнє навантаження · 1 / 5 / 15 хв`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Процес`,workingDirectory:`Робочий каталог`},memory:{title:`Пам'ять`,description:`Видима під час виконання системна пам'ять та використання процесом застосунку.`,usedOf:`{{used}} використано з {{total}}`,free:`{{value}} вільно`,processRss:`RSS процесу`,heapUsed:`Використано купу V8`,heapTotal:`Загальна купа V8`,external:`Зовнішня пам'ять`},storage:{title:`Сховище`,description:`Доступний простір для файлової системи середовища та постійних даних застосунку.`,used:`{{value}} використано`,free:`{{value}} вільно`,empty:`Інформація про файлову систему недоступна в цьому середовищі.`},docker:{title:`Docker`,description:`Статус Docker Engine лише для читання та скорочений список контейнерів.`,connected:`Підключено`,unavailable:`Недоступно`,unavailableDetail:`Діагностика Docker Engine недоступна.`,socketStatus:`Локальний сокет: {{status}}`,mounted:`змонтовано`,notMounted:`не змонтовано`,running:`Працює`,stopped:`Зупинено`,paused:`Призупинено`,total:`Загалом`,version:`Версія`,host:`Хост`,architecture:`Архітектура`,cpus:`CPU`,memory:`Пам'ять`,container:`Контейнер`,image:`Образ`,state:`Стан`,created:`Створено`,empty:`Docker підключено, контейнери наразі відсутні.`},network:{title:`Мережа`,description:`Інтерфейси, адреси та лічильники трафіку Linux, видимі під час виконання.`,internal:`внутрішній`,empty:`Середовищу виконання додатку не видно жодних мережевих інтерфейсів.`},securityNote:`Ця сторінка доступна лише адміністраторам. Сервер повертає лише оперативні підсумки: він не розкриває змінні середовища, облікові дані, мітки Docker, монтування, команди контейнерів чи дані інспекції. Коли Libre WebUI працює в контейнері, відомості про CPU та пам'ять на рівні хоста отримуються з Docker Engine за наявності його локального сокета; інші значення описують середовище виконання додатку.`,work:{title:`Work`,description:`Пісочниці всіх користувачів`,access:`Доступ`,accessAdmins:`Лише адміністратори`,accessAllUsers:`Усі користувачі`,runtimeAvailable:`Доступно`,runtimeUnavailable:`Недоступно`,activeRuntimes:`Активні середовища`,pendingCleanups:`Очікувані очищення`,orphans:`Осиротілі контейнери`,owner:`Власник`,task:`Завдання`,state:`Стан`,preview:`Попередній перегляд`,terminals:`Термінали`,updated:`Оновлено`,stateRunning:`Виконується`,stateStopped:`Зупинено`,stateStarting:`Запускається`,stateUnknown:`Невідомо`,noTasks:`Завдань Work поки немає.`}},chatHistory:{label:`Історія розмови`,jumpToTurn:`Перейти до репліки {{index}} з {{total}}`},chatMessage:{you:`Ви`,assistant:`Асистент`,system:`Система`,conversationSummary:`Підсумок розмови`,restoreCompacted:`Відновити підсумовані повідомлення`,restoreFailed:`Не вдалося відновити підсумовані повідомлення`,copy:`Копіювати`,copyMessage:`Копіювати повідомлення`,copied:`Скопійовано!`,regenerate:`Перегенерувати`,regenerateResponse:`Перегенерувати відповідь`,edit:`Редагувати`,editSystemMessage:`Редагувати системне повідомлення`,saveChanges:`Зберегти зміни`,cancelEditing:`Скасувати редагування`,saveAndSubmit:`Зберегти й надіслати`,goodResponse:`Гарна відповідь`,badResponse:`Погана відповідь`,delete:`Видалити`,deleteConfirm:`Видалити це повідомлення?`,branch:`Гілка`,speaking:`Озвучення...`,speakMessage:`Озвучити повідомлення`,stopSpeaking:`Зупинити озвучення`,showMore:`Показати більше`,showLess:`Показати менше`,thinking:`Обмірковує`,thoughtFor:`Думав {{duration}}`,hiddenLines:`Приховано рядків: {{count}}`,systemMessagePlaceholder:`Введіть системне повідомлення...`,fullSizeImage:`Повнорозмірне зображення`,startConversation:`Почати розмову`,startConversationDescription:`Надішліть повідомлення, щоб почати спілкування з AI-асистентом. Ставте запитання, отримуйте допомогу з кодом або ведіть звичайну розмову.`,scrollToBottom:`Прокрутити донизу`,newMessages:`Нові повідомлення`},imageGallery:{title:`Галерея зображень`,noImages:`Зображень ще немає`,noImagesHint:`Згенеруйте перше зображення за допомогою панелі праворуч`,delete:`Видалити`,download:`Завантажити`,deleteConfirm:`Ви впевнені, що хочете видалити це зображення?`,deleteSuccess:`Зображення видалено`,deleteFailed:`Не вдалося видалити зображення`,downloadFailed:`Не вдалося завантажити зображення`,loadMore:`Завантажити ще ({{current}} з {{total}})`,loadFailed:`Не вдалося завантажити галерею`},imageGeneration:{title:`Згенерувати зображення`,prompt:`Промпт`,promptPlaceholder:`Опишіть зображення, яке хочете створити...`,model:`Модель`,selectModel:`Виберіть модель`,noModels:`Моделі генерації зображень недоступні`,configurePlugin:`Налаштуйте плагін з підтримкою генерації зображень`,size:`Розмір`,quality:`Якість`,style:`Стиль`,generate:`Згенерувати`,generating:`Генерація...`,success:`Зображення успішно згенеровано`,failed:`Не вдалося згенерувати зображення`,enterPrompt:`Введіть промпт`,promptTooLong:`Промпт перевищує максимальну довжину в {{max}} символів`},mediaGeneration:{title:`Генерувати медіа`,description:`Створюйте відео, звук, музику або мовлення за допомогою активованого медіа-провайдера.`,image:`Зображення`,video:`Відео`,audio:`Аудіо`,sound:`Звук`,speech:`Мовлення`,model:`Модель`,voice:`Голос або ID голосу`,cloneVoice:`Клонувати еталонний голос`,cloneVoiceDescription:`Створити це мовлення на основі еталонного запису замість готового голосу.`,referenceAudio:`Еталонне аудіо`,referenceTranscript:`Точна розшифровка еталонного запису`,referenceTranscriptPlaceholder:`Введіть точно те, що вимовляється в еталонному записі…`,referenceAudioTooLarge:`Розмір еталонного аудіо не повинен перевищувати {{max}}.`,cloneConsent:`Клонуйте голос лише з дозволу мовця. Для цього створення запис надсилається вибраному постачальнику й не зберігається в Libre WebUI.`,saveVoiceProfile:`Зберегти як голос для повторного використання`,saveVoiceProfileDescription:`Надійно збережіть цей еталонний запис і розшифровку. Libre WebUI надсилає їх вибраному постачальнику з кожною мовленнєвою партією, яка використовує цей голос.`,voiceProfileName:`Назва збереженого голосу`,voiceProfileNamePlaceholder:`Наприклад, Мій голос`,voiceStorageConsent:`Я підтверджую, що маю дозвіл мовця клонувати й зберігати цей голос. Еталонний запис зберігатиметься, доки я його не видалю.`,resolution:`Роздільна здатність`,aspectRatio:`Співвідношення сторін`,duration:`Тривалість`,providerDefault:`Типово провайдера`,generateAudio:`Генерувати аудіо разом із відео, якщо підтримується`,prompt:`Запит`,text:`Текст для озвучення`,videoPlaceholder:`Опишіть сцену, рух, камеру та освітлення...`,audioPlaceholder:`Введіть текст, який має озвучити голос...`,soundPlaceholder:`Опишіть звук, музику, атмосферу або потрібну голосову відповідь...`,generate:`Згенерувати`,generating:`Генерування… це може тривати кілька хвилин`,success:`Медіа згенеровано та збережено в Imagine`,successWithSavedVoice:`Медіафайл створено, і голос «{{name}}» тепер доступний у налаштуваннях мовлення`,failed:`Не вдалося згенерувати медіа`,loadFailed:`Не вдалося завантажити медіа-провайдерів`,noModels:`Моделі {{kind}} недоступні. Спочатку активуйте сумісний провайдер і збережіть його облікові дані.`},mediaGallery:{itemCount:`{{count}} елементів`,empty:`Згенерованих медіа ще немає`,emptyHint:`Згенеруйте зображення, відео або голосовий фрагмент, і він з'явиться тут.`,filters:{all:`Усі`,image:`Зображення`,video:`Відео`,audio:`Аудіо`}},errorBoundary:{title:`Щось пішло не так`,description:`Виникла неочікувана помилка. Спробуйте оновити сторінку.`,tryAgain:`Оновити сторінку`,goHome:`На головну`,errorDetails:`Деталі помилки (розробка)`},documents:{title:`Документи`,upload:`Завантажити документ`,uploading:`Завантаження...`,noDocuments:`Документи не завантажено`,uploadHint:`Завантажте документи для використання в розмовах`,delete:`Видалити`,deleteConfirm:`Ви впевнені, що хочете видалити цей документ?`,deleteSuccess:`Документ видалено`,deleteFailed:`Не вдалося видалити документ`,uploadSuccess:`Документ успішно завантажено`,uploadFailed:`Не вдалося завантажити документ`,types:`Підтримується: PDF, TXT, MD, DOCX`,unsupportedFileType:`Підтримуються лише файли PDF та TXT`,fileSizeTooLarge:`Розмір файлу має бути менше 10 МБ`,uploadSuccessWithName:`Документ "{{name}}" успішно завантажено`,removeSuccess:`Документ успішно видалено`,removeFailed:`Не вдалося видалити документ`,removeError:`Сталася помилка при видаленні документа`,clickToUpload:`Натисніть, щоб завантажити`,orDragAndDrop:`або перетягніть`,fileTypesAndSize:`PDF або TXT файли до 10 МБ`,uploadedDocuments:`Завантажені документи`,removeDocument:`Видалити документ`},ttsButton:{speak:`Озвучити`,stop:`Зупинити`,speaking:`Озвучення...`,generateFailed:`Не вдалося згенерувати мовлення`,playbackFailed:`Помилка відтворення аудіо`,stopSpeaking:`Зупинити озвучення`,preparingSpeech:`Підготовка мовлення...`,generatingSpeech:`Генерація мовлення...`,bufferingSpeech:`Буферизація мовлення...`,enableAudio:`Увімкнути звук і прочитати вголос`,enableAudioShort:`Увімкнути звук`,readAloud:`Прочитати вголос`},artifacts:{title:`Артефакти`,code:`Код`,preview:`Попередній перегляд`,copy:`Копіювати код`,copied:`Скопійовано!`,download:`Завантажити`,expand:`Розгорнути`,collapse:`Згорнути`,openInNewTab:`Відкрити в новій вкладці`,invalidSvg:`Недійсний SVG-вміст`,invalidJson:`Недійсний JSON-вміст`,previewMode:`Режим перегляду`,codeMode:`Режим коду`,copyContent:`Копіювати вміст`,openInPanel:`Відкрити в панелі`,openInNewWindow:`Відкрити в новому вікні`,created:`Створено`,closePanelEsc:`Закрити панель (Esc)`,copyButton:`Копіювати`,open:`Відкрити`,dragEdgeToResize:`Перетягніть край для зміни розміру`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Версія {{current}} з {{total}}`,previousVersion:`Попередня версія`,nextVersion:`Наступна версія`},personaImportExport:{title:`Імпорт та експорт персон`,description:`Експортуйте персони, щоб поділитися ними, або імпортуйте персони інших`,exportPersonas:`Експорт персон`,importPersonas:`Імпорт персон`,noPersonasToExport:`Немає персон для експорту`,personasAvailable:`{{count}} персона доступна`,personasAvailable_plural:`{{count}} персон доступно`,exportAll:`Експортувати всі`,uploadJsonFile:`Завантажити JSON-файл`,pasteJsonLabel:`Вставити JSON-дані`,pasteJsonPlaceholder:`Вставте JSON-дані персони сюди...`,importing:`Імпорт...`,importButton:`Імпортувати персону(и)`,expectedFormat:`Очікуваний формат JSON:`,exportSuccess:`Персону "{{name}}" успішно експортовано`,exportFailed:`Не вдалося експортувати персону`,exportAllSuccess:`Усі {{count}} персон успішно експортовано`,exportAllFailed:`Не вдалося експортувати персони`,pasteJsonData:`Вставте JSON-дані персони`,importMultipleSuccess:`Успішно імпортовано {{count}} персон`,importMultipleFailed:`Не вдалося імпортувати {{count}} персон`,importNoneFailed:`Не вдалося імпортувати жодної персони`,importSuccess:`Персону успішно імпортовано`,importFailed:`Не вдалося імпортувати персону`},generationStats:{details:`Деталі`,promptTokens:`Токени промпту:`,generatedTokens:`Згенеровані токени:`,totalTokens:`Всього токенів:`,speed:`Швидкість:`,promptEval:`Оцінка промпту:`,generation:`Генерація:`,modelLoad:`Завантаження моделі:`,totalTime:`Загальний час:`,generatedAt:`Згенеровано о:`},userMenu:{loggedOut:`Вихід виконано успішно`,pictureUpdated:`Фото профілю оновлено`,failedUpdateAvatar:`Не вдалося оновити аватар`,failedUpdatePicture:`Не вдалося оновити фото профілю`,noEmail:`Email не вказано`,changePicture:`Змінити фото`,settings:`Налаштування`,userManagement:`Керування користувачами`,signOut:`Вийти`,changeProfilePicture:`Змінити фото профілю`},pluginManager:{title:`Менеджер плагінів`,upload:`Завантажити`,addJson:`Додати JSON`,browseHF:`Переглянути HF Hub`,confirmDelete:`Ви впевнені, що хочете видалити цей плагін?`,uploading:`Завантаження плагіну...`,pasteJson:`Вставте JSON плагіну тут...`,installPlugin:`Встановити плагін`,loading:`Завантаження плагінів...`,noPlugins:`Немає встановлених плагінів`,noPluginsDescription:`Завантажте файл плагіну або додайте плагін з JSON.`,active:`Активний`,id:`ID`,endpoint:`Ендпоінт`,activate:`Активувати`,deactivate:`Деактивувати`,activePlugin:`Активний плагін`,activePluginDescription:`Усі запити чату будуть спрямовані через цей плагін`,variables:{title:`Змінні`,save:`Зберегти`,saving:`Збереження...`,saved:`Змінні збережені`,saveFailed:`Не вдалося зберегти змінні`,resetDefaults:`Скинути до стандартних`,reset:`Змінні скинуті`,resetFailed:`Не вдалося скинути змінні`,sensitiveSet:`Значення встановлено (введіть нове для зміни)`,showValue:`Показати значення {{label}}`,hideValue:`Приховати значення {{label}}`,connection:`Підключення`,advanced:`Додаткові параметри`,inherited:`Використовувати за замовчуванням провайдера`,inheritedValue:`Використовувати за замовчуванням провайдера ({{value}})`,enabled:`Увімкнено`,disabled:`Вимкнено`,required:`Потрібне значення`,fullApiEndpoint:`Повна URL кінцевої точки API`,endpointHelp:`Введіть повну URL запиту, включаючи шлях операції (наприклад, /v1/chat/completions), а не лише базову URL провайдера.`,invalidUrl:`Введіть дійсну повну URL кінцевої точки API, наприклад https://provider.example/v1/chat/completions`,insecureUrl:`Кінцеві точки API повинні використовувати HTTP або HTTPS.`,httpWarning:`HTTP не шифрує облікові дані чи трафік. Використовуйте його лише в надійній мережі.`,invalidBaseUrl:`Базові URL не можуть містити рядок запиту або фрагмент.`,invalidApiPath:`Має починатися з / і не містити URL, запит, фрагмент або сегмент ..`,tooLong:`Значення задовге`}},huggingface:{title:`Браузер моделей HuggingFace`,subtitle:`Переглядайте та обирайте моделі з Hub`,searchPlaceholder:`Пошук моделей...`,filters:`Фільтри`,task:`Завдання`,sortBy:`Сортувати за`,noModels:`Моделей не знайдено`,adjustSearch:`Спробуйте змінити пошуковий запит або фільтри`,gated:`Обмежений`,selected:`Обрано`,select:`Обрати`,refresh:`Оновити`,modelsFound:`моделей знайдено`},demoMode:{title:`Демо-режим`,github:`GitHub`},libreClaw:{title:`Агенти`,subtitle:`Запуски локального агента, затвердження, графіки, пам’ять, інструменти та використання.`,dashboard:`Панель керування`,connection:{disconnectedTitle:`Демон Libre Claw не підключено`,disconnectedDescription:`Запустіть його локально за допомогою <command>libre-claw start</command> або встановіть <env>LIBRE_CLAW_BASE_URL</env> у серверному середовищі.`},status:{connected:`Підключено`,disconnected:`Відключено`,activeRuns:`{{count}} активний`,activeRuns_plural:`{{count}} активний`},states:{queued:`У черзі`,running:`Виконується`,blocked:`заблоковано`,done:`Готово`,failed:`Не вдалося`,cancelled:`Скасовано`},startRun:{title:`Запустити виконання агента`,placeholder:`Попросіть Libre Claw перевірити репо, виправити помилку, запустити перевірку, запланувати звіт...`,chatRun:`Запуск чату`,goalMode:`Режим цілі`,providerOverride:`Заміна постачальника`,modelOverride:`Перевизначення моделі`,run:`Запустити`},modelRoute:{title:`Модельний маршрут`,providerPlaceholder:`провайдер`,modelPlaceholder:`модель`,persistGlobal:`Зберігайте Libre Claw глобальну конфігурацію`,saveModel:`Зберегти модель`,theme:`Тема Libre Claw`,saveTheme:`Зберегти тему`},runs:{title:`Запуски`,empty:`Запусків Libre Claw ще немає.`},timeline:{title:`Хронологія виконання`,empty:`Виберіть запуск, щоб перевірити його події.`,streaming:`Потокове передавання...`,assistantResponse:`Відповідь помічника`,resultOk:`добре`,resultError:`помилка`,labels:{userMessage:`Повідомлення користувача`,toolCall:`Виклик інструменту`,toolResult:`Результат інструменту`,approvalRequest:`Запит на схвалення`,approvalResponse:`Відповідь схвалення`,runStarted:`Запуск розпочато`,runFinished:`Запуск завершено`,usage:`Використання`,error:`Помилка`}},approvals:{needed:`Потрібне схвалення`,allowOnce:`Дозвольте один раз`,alwaysAllowTool:`Завжди дозволяти інструмент`,deny:`Відхилити`,toolApprovalRequested:`Запит на схвалення інструменту`},automations:{title:`Автоматизації`,namePlaceholder:`Ім'я`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Підказка автоматизації`,create:`Створити`,empty:`Немає запланованих автоматизацій Libre Claw.`,runNow:`Запустити зараз`,pause:`Пауза`,resume:`Відновити`,routes:{report:`звіт`,telegram:`Telegram`},status:{active:`Активний`,paused:`Призупинено`}},usageFallback:{title:`Використання та резервний варіант`,usage:`Використання`,fallbackRoute:`Запасний маршрут`,noUsage:`Записів про використання ще немає.`},metrics:{provider:`Провайдер`,model:`Модель`,input:`Введення`,output:`Вихід`,cached:`Кешовано`,reasoning:`Міркування`,cost:`Вартість`,tool:`Інструмент`,resolution:`роздільна здатність`,state:`Стан`,stopReason:`Причина зупинки`,tokens:`{{formatted}} лексема`,tokens_plural:`{{formatted}} лексеми`},fallbacks:{tool:`інструмент`,unknown:`невідомий`,resolved:`вирішено`,unknownError:`Невідома помилка`},toasts:{loadStatusFailed:`Не вдалося завантажити статус Libre Claw`,enterTask:`Введіть завдання до Libre Claw`,runStarted:`Запуск Libre Claw розпочато`,startRunFailed:`Не вдалося запустити Libre Claw`,runCancelled:`Запуск скасовано`,cancelRunFailed:`Не вдалося скасувати запуск`,approved:`Затверджено`,denied:`Відмовлено`,resolvePermissionFailed:`Не вдалося вирішити дозвіл`,providerModelRequired:`Необхідні постачальник і модель`,modelUpdated:`Модель Libre Claw оновлено`,updateModelFailed:`Не вдалося оновити модель`,themeUpdated:`Тему Libre Claw оновлено`,updateThemeFailed:`Не вдалося оновити тему`,automationRequired:`Потрібні ім’я автоматизації, розклад і підказка`,automationCreated:`Автоматика створена`,createAutomationFailed:`Не вдалося створити автоматизацію`,automationUpdated:`Автоматика оновлена`,updateAutomationFailed:`Не вдалося оновити автоматизацію`}},work:JSON.parse(`{"title":"Робота","subtitle":"Ізольовані робочі простори моделей","tasks":{"title":"Робочі завдання","subtitle":"Постійні локальні робочі простори","new":"Нове завдання","emptyTitle":"Робочих завдань ще немає","empty":"Після надсилання першого повідомлення ваші робочі завдання з’являться тут.","untitled":"Завдання без назви","actions":"Дії із завданням","delete":"Видалити завдання","deleteNamed":"Видалити «{{title}}»","deleteConfirm":"Назавжди видалити «{{title}}» і його робочий простір?","close":"Закрити робочі завдання","open":"Відкрити робочі завдання","rename":"Назва завдання","loading":"Завантаження завдання…","notFound":"Це робоче завдання недоступне","back":"Почати нове завдання","status":"Стан: {{status}}"},"landing":{"title":"Почати нове робоче завдання","description":"Надайте локальній моделі або моделі налаштованого провайдера постійний ізольований робочий простір. Вона зможе переглядати файли, запускати інструменти й продовжити з місця зупинки, коли ви повернетеся.","isolated":"Ізоляція","isolatedBody":"Кожне завдання отримує власний контейнер і власні файли.","durable":"Збереження","durableBody":"Поверніться до розмови й робочого простору пізніше.","controlled":"Контроль","controlledBody":"Середовище виконання та файли завдання залишаються ізольованими від хоста."},"composer":{"placeholder":"Опишіть, що ви хочете створити або змінити…","model":"Робоча модель","noModels":"Немає моделей, сумісних із режимом «Робота»","cancel":"Зупинити","send":"Запустити","hint":"Кожне завдання зберігає власні файли та історію. Перевіряйте результати моделі перед використанням.","remoteTitle":"Віддалений провайдер","remoteHint":"Розмова й результати інструментів надсилаються до налаштованого сервісу. Один автономний запуск може кілька разів звернутися до провайдера, що може спричинити витрати. Файли робочого простору залишаються локальними, якщо інструмент не повертає їхній вміст.","remoteDismiss":"Сховати","remoteDismissLabel":"Сховати повідомлення про віддаленого провайдера","remoteDismissFailed":"Не вдалося зберегти налаштування віддаленого провайдера.","noModelSelected":"Не вибрано модель, сумісну з режимом «Робота»."},"conversation":{"ready":"Робочий простір готовий","empty":"Продовжте завдання нижче. Ця розмова та її файли залишаються прив’язаними до цього робочого простору.","loadOlder":"Завантажити попередні повідомлення"},"status":{"preparing":"Підготовка ізольованого робочого простору…","running":"Робота в локальному робочому просторі…"},"statusLabels":{"idle":"Очікування","thinking":"Думає","complete":"Завершено","needsInput":"Потрібне введення","error":"Помилка"},"live":{"connecting":"Підключення до оновлень у реальному часі…","reconnecting":"Повторне підключення до оновлень у реальному часі…","unavailable":"Оновлення в реальному часі недоступні","newActivity":"Нова активність","skillsLoaded":"Навички робочого простору · {{count}}"},"runtime":{"unavailable":"Середовище виконання недоступне","ready":"Середовище виконання готове","readyOllama":"Docker готовий","readyPlugin":"Docker і плагін готові","readyHybrid":"Docker і моделі готові","reason":"Потрібні Docker і доступний провайдер моделі Ollama або плагіна."},"workspace":{"label":"Режими робочого простору","files":"Файли","activity":"Активність","preview":"Попередній перегляд","resize":"Змінити розміри розмови та робочого простору","resizeHint":"Перетягніть, щоб змінити розмір. Для точного налаштування використовуйте клавіші зі стрілками. Двічі клацніть або натисніть Enter, щоб скинути.","splitSize":"Розмова {{conversation}}%, робочий простір {{workspace}}%","terminal":"Термінал","git":"Git"},"files":{"discard":"Відкинути незбережені зміни файлу?","leaveWithDraft":"Залишити цей файл? Незбережена зміна залишиться в браузері як чернетка.","up":"Батьківська папка","back":"Назад до файлів","empty":"У цій папці ще немає файлів.","select":"Виберіть файл, щоб переглянути й відредагувати його.","editorLabel":"Редактор файлу: {{path}}","format":"Форматувати","formatted":"Код відформатовано.","formatFailed":"Не вдалося відформатувати цей файл.","formatShortcut":"Форматувати (Shift+Alt+F)","formatTooLarge":"Форматування доступне лише для файлів до 100 000 символів і 4 000 рядків.","formatUnsupported":"Форматування недоступне для цього типу файлів.","saveShortcut":"Зберегти (⌘/Ctrl+S)","highlightPaused":"Для великих файлів підсвічування в реальному часі призупинено, щоб редактор працював швидко.","plainTextLarge":"Звичайний текст · великий файл","changes":"Зміни","changesSince":"Що змінилося з останнього ходу","diffLabel":"Зміни з останнього ходу: {{path}}","diffFolded":"{{count}} рядків без змін"},"activity":{"empty":"Тут з’являться команди, операції з файлами та результати інструментів.","toolActivity":"Активність інструментів","details":"Подробиці","kinds":{"message":"Повідомлення","toolCall":"Виклик інструмента","toolResult":"Результат інструмента","error":"Помилка"}},"preview":{"command":"Необов’язкова команда запуску","start":"Запустити попередній перегляд","stop":"Зупинити попередній перегляд","open":"Відкрити","starting":"Запуск попереднього перегляду…","frameTitle":"Попередній перегляд робочого простору","failed":"Не вдалося запустити попередній перегляд. Перевірте Активність і спробуйте іншу команду.","empty":"Запустіть застосунок у цьому робочому просторі, щоб переглянути його тут."},"mobile":{"surface":"Область завдання","conversation":"Розмова","workspace":"Робочий простір"},"toasts":{"runFailed":"Не вдалося запустити робоче завдання.","updateFailed":"Не вдалося оновити це завдання.","renameFailed":"Не вдалося перейменувати це завдання.","cancelled":"Запуск робочого завдання зупинено.","cancelFailed":"Не вдалося зупинити запуск робочого завдання.","deleteFailed":"Не вдалося видалити це робоче завдання.","saveFailed":"Не вдалося зберегти цей файл.","saved":"Файл збережено.","previewFailed":"Не вдалося запустити попередній перегляд.","previewStopFailed":"Не вдалося зупинити попередній перегляд."},"terminal":{"connecting":"Відкривається оболонка в пісочниці…","closed":"Сеанс термінала завершено.","failed":"Не вдалося запустити сеанс термінала.","reconnect":"Перепідключитися","unavailable":"Інтерактивний термінал недоступний у цьому розгортанні.","blockedByRun":"Модель використовує цей контейнер. Термінал відкриється після завершення ходу.","taskRunning":"Триває хід моделі"},"policy":{"label":"Політика середовища","default":"За замовчуванням (глобальні ліміти)"},"git":{"actionFailed":"Дія Git не вдалася.","blockedByPreview":"Зупиніть попередній перегляд перед зміною стану Git.","blockedByRun":"Дії запису Git розблокуються після завершення ходу моделі.","branchCreated":"Створено {{name}}.","branchSwitched":"Перемкнено на {{name}}.","clean":"Робоче дерево чисте.","commit":"Закомітити підготовлені зміни","commitMessage":"Повідомлення коміту","committed":"Коміт створено.","detached":"відокремлений HEAD","diff":"Попередній перегляд диfу","diffFailed":"Не вдалося завантажити цей диф.","history":"Локальна історія","initialize":"Ініціалізувати Git","initializeDescription":"Створіть локальний репозиторій для статусу, дифів, гілок і комітів. Віддалені облікові дані не підключаються.","initialized":"Репозиторій Git ініціалізовано.","loadFailed":"Не вдалося завантажити статус Git.","localOnly":"Лише локальний Git. Push, pull і pull request потребують окремого довіреного брокера облікових даних.","newBranch":"Нова локальна гілка","noCommits":"Комітів ще немає.","noDiff":"Текстового дифу ще немає. Невідстежувані файли з'являться після підготовки.","notInitialized":"Git не ініціалізовано","selectChange":"Виберіть змінений файл, щоб переглянути його диф.","selectPath":"Вибрати {{path}}","stageAll":"Підготувати все","stageSelected":"Підготувати {{count}}","staged":"Зміни підготовлено.","switchBranch":"Перемкнути локальну гілку","changes":"Зміни","createBranch":"Створити","filterFiles":"Фільтрувати змінені файли","noFilterMatches":"Немає змінених файлів, що відповідають цьому фільтру.","allChanges":"Усі зміни","diffTruncated":"Цей diff обрізано.","binaryFile":"Двійковий файл, текстовий diff недоступний."},"hostWorkspace":{"hint":"Залиште порожнім для ізольованого простору або вкажіть завданню теку на цій машині.","label":"Тека робочого простору (необов'язково)","warning":"Завдання може безпосередньо читати й записувати цю теку. Залиште порожнім для ізольованого простору."}}`),personaBackground:{label:`Фонове зображення`,uploadBackgroundImage:`Завантажити фонове зображення`,dragAndDrop:`Перетягніть зображення або натисніть для вибору`,chooseImage:`Вибрати зображення`,uploading:`Завантаження...`,enterImageUrl:`Або введіть URL зображення`,supportedFormats:`Підтримує: JPG, PNG, GIF, WebP (макс. 5МБ). Широкі альбомні зображення працюють найкраще.`,customBackground:`Користувацьке фонове зображення`,clickToChange:`Натисніть для зміни або видалення`,removed:`Фон видалено`,uploaded:`Фон успішно завантажено`,invalidFile:`Будь ласка, виберіть дійсний файл зображення`,fileTooLarge:`Розмір фонового зображення має бути менше 5МБ`,readFailed:`Не вдалося прочитати файл зображення`,uploadFailed:`Не вдалося завантажити фонове зображення`},modelSelector:{searchInstalled:`Пошук встановлених моделей...`,searchOllama:`Пошук у бібліотеці Ollama...`,searchHuggingFace:`Пошук на HuggingFace...`,selectModel:`Вибрати модель`,personas:`Персони`,ollamaModels:`Моделі Ollama`,pluginModels:`Моделі плагінів`,actions:`Дії`,installed:`Встановлено`,use:`Використати`,pull:`Завантажити`,pullRestricted:`Встановлення моделей у цьому екземплярі доступне лише адміністраторам.`,adminOnlyPull:`Лише адміністратори`,legacyProvider:`провайдера не записано`,providerNotRecorded:`Провайдера не записано`,providerUnavailable:`провайдер недоступний`,reselectProvider:`повторно виберіть провайдера, щоб закріпити модель`,unavailable:`недоступно`,unavailableSelections:`Недоступні варіанти`,agentModels:`Агенти`},whatsNew:{title:`Що нового`,releaseNotes:`Нотатки випуску`,cta:`Гаразд, поїхали`},notes:{title:`Нотатки`,new:`Нова нотатка`,untitled:`Без назви`,empty:`Нотаток поки немає`,selectOrCreate:`Виберіть нотатку або створіть нову`,contentPlaceholder:`Пишіть у Markdown…`,saved:`Збережено`,saveFailed:`Не вдалося зберегти нотатку`,createFailed:`Не вдалося створити нотатку`,deleteConfirm:`Видалити цю нотатку?`,deleteFailed:`Не вдалося видалити нотатку`},home:{active:`активно`,continue:`Продовжити`,start:`Почати`,explore:`Огляд`},palette:{empty:`Збігів немає.`,placeholder:`Пошук чатів, Work, дій…`,toggleTheme:`Перемкнути тему`,actions:`Дії`,chats:`Чати`,search:`Пошук`,settings:`Налаштування`,work:`Робота`},tabs:{actions:`Дії вкладки`,close:`Закрити вкладку`,closeAll:`Закрити всі вкладки`,closeOthers:`Закрити інші вкладки`,closeRight:`Закрити вкладки праворуч`,home:`Головна`,label:`Відкриті вкладки`,new:`Нова вкладка`,newWork:`Новий Work`,chat:`Чат`,newChat:`Новий чат`,work:`Робота`}};export{e as default};
@@ -1,2 +0,0 @@
1
- var e={common:{loading:`Đang tải...`,save:`Lưu`,saving:`Đang lưu...`,cancel:`Hủy`,delete:`Xóa`,edit:`Chỉnh sửa`,close:`Đóng`,back:`Quay lại`,next:`Tiếp theo`,confirm:`Xác nhận`,error:`Lỗi`,success:`Thành công`,warning:`Cảnh báo`,or:`hoặc`,optional:`tùy chọn`,enabled:`Đã bật`,disabled:`Đã tắt`,on:`Bật`,off:`Tắt`,yes:`Có`,no:`Không`,search:`Tìm kiếm`,noResults:`Không tìm thấy kết quả`,retry:`Thử lại`,refresh:`Làm mới`,download:`Tải xuống`,upload:`Tải lên`,export:`Xuất`,import:`Nhập`,reset:`Đặt lại`,apply:`Áp dụng`,clear:`Xóa`,all:`Tất cả`,none:`Không có`,default:`Mặc định`,custom:`Tùy chỉnh`,remove:`Xóa`,home:`Trang chủ`,more:`Nhiều`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`Chào mừng trở lại`,subtitle:`Đăng nhập vào tài khoản của bạn để tiếp tục`,username:`Tên người dùng`,usernamePlaceholder:`Nhập tên người dùng`,password:`Mật khẩu`,passwordPlaceholder:`Nhập mật khẩu`,signIn:`Đăng nhập`,signingIn:`Đang đăng nhập...`,noAccount:`Chưa có tài khoản?`,signUpHere:`Đăng ký tại đây`,loginSuccess:`Đăng nhập thành công!`,loginFailed:`Đăng nhập thất bại`,checkCredentials:`Đăng nhập thất bại. Vui lòng kiểm tra thông tin đăng nhập.`,approvalPending:`Tài khoản của bạn đang chờ quản trị viên phê duyệt.`,enterBoth:`Vui lòng nhập cả tên người dùng và mật khẩu`,githubSuccess:`Đăng nhập GitHub thành công!`,githubFailed:`Xác thực GitHub thất bại`,githubVerifyFailed:`Không thể xác minh xác thực GitHub`,verificationFailed:`Xác minh bảo mật thất bại. Hãy tải lại trang và thử lại.`},signup:{title:`Tạo tài khoản`,subtitle:`Đăng ký tài khoản mới`,username:`Tên người dùng`,usernamePlaceholder:`Chọn tên người dùng`,email:`Email`,emailPlaceholder:`email@example.com`,password:`Mật khẩu`,passwordPlaceholder:`Chọn mật khẩu`,confirmPassword:`Xác nhận mật khẩu`,confirmPasswordPlaceholder:`Xác nhận mật khẩu của bạn`,createAccount:`Tạo tài khoản`,creatingAccount:`Đang tạo tài khoản...`,hasAccount:`Đã có tài khoản?`,signInHere:`Đăng nhập tại đây`,signupSuccess:`Tạo tài khoản thành công!`,approvalPending:`Đã nhận đăng ký. Quản trị viên phải phê duyệt tài khoản của bạn.`,awaitingApproval:`Đang chờ phê duyệt`,awaitingApprovalDescription:`Tài khoản của bạn đã được tạo, nhưng quản trị viên phải kích hoạt nó trước khi bạn có thể đăng nhập.`,backToSignIn:`Quay lại đăng nhập`,signupFailed:`Đăng ký thất bại`,tryAgain:`Đăng ký thất bại. Vui lòng thử lại.`,usernameRequired:`Tên người dùng và mật khẩu là bắt buộc`,passwordMismatch:`Mật khẩu không khớp`,passwordTooShort:`Mật khẩu phải có ít nhất 6 ký tự`},logout:{button:`Đăng xuất`,success:`Đăng xuất thành công`},oauth:{continueWith:`Tiếp tục với {{provider}}`,connectingTo:`Đang kết nối đến {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Đang kiểm tra xác thực...`,welcome:`Chào mừng`,noEmail:`Chưa cung cấp email`,role:`Vai trò`,id:`ID`,userId:`ID người dùng`,signInDescription:`Đăng nhập bằng tài khoản GitHub để tiếp tục`,signInWithGitHub:`Đăng nhập bằng GitHub`,jwtActive:`Xác thực JWT đang hoạt động`,jwtDescription:`Xác thực dựa trên JWT với GitHub OAuth`,github:`GitHub`,provider:`Nhà cung cấp`,tagline:`Ngăn xếp AI của bạn nên trả lời bạn.`,selfHosted:`Tự lưu trữ · Apache 2.0`,highlights:{local:{title:`Ưu tiên cục bộ`,body:`Các cuộc trò chuyện và tệp của bạn vẫn nằm trên máy bạn đang chạy ứng dụng này.`},providers:{title:`Bất kỳ nhà cung cấp nào`,body:`Mô hình cục bộ thông qua Ollama, cộng với các nhà cung cấp từ xa mà bạn chọn thêm.`},work:{title:`Công việc cô lập`,body:`Cấp cho mô hình một không gian làm việc sandbox với tệp, terminal và bản xem trước.`}},oidc:{defaultProviderName:`Đăng nhập một lần`}},setup:{welcome:{title:`Chào mừng đến với Libre WebUI`,subtitle:`Hãy bắt đầu`,description:`Thiết lập phiên bản Libre WebUI của bạn chỉ trong vài bước`,createAdmin:`Tạo tài khoản quản trị`,features:{secure:{title:`An toàn & Riêng tư`,description:`Cuộc trò chuyện của bạn được lưu trên thiết bị của bạn`},fast:{title:`Nhanh & Phản hồi tốt`,description:`Tối ưu hóa cho tốc độ và hiệu suất`},openSource:{title:`Mã nguồn mở`,description:`Phần mềm miễn phí và mã nguồn mở`}}},admin:{title:`Tạo tài khoản quản trị`,subtitle:`Thiết lập quản trị viên`,description:`Tạo tài khoản quản trị đầu tiên cho phiên bản Libre WebUI của bạn`,usernamePlaceholder:`Nhập tên người dùng quản trị`,passwordPlaceholder:`Nhập mật khẩu (tối thiểu 6 ký tự)`,confirmPlaceholder:`Xác nhận mật khẩu của bạn`,creating:`Đang tạo...`,createAdmin:`Tạo quản trị viên`,success:`Tạo tài khoản quản trị thành công!`,failed:`Không thể tạo tài khoản quản trị`,approvalUnexpected:`Không thể kích hoạt quản trị viên ban đầu. Vui lòng thử lại.`,fillAllFields:`Vui lòng điền tất cả các trường`,note:`Đây sẽ là tài khoản quản trị chính cho phiên bản Libre WebUI của bạn`},encryptionKey:{title:`Lưu khóa mã hóa của bạn`,subtitle:`Quan trọng: Lưu khóa này`,description:`Khóa mã hóa này bảo vệ dữ liệu nhạy cảm của bạn. Lưu trữ nó một cách an toàn - bạn sẽ cần nó nếu bạn cần khôi phục cơ sở dữ liệu.`,warning:`Cảnh báo`,warningText:`Nếu bạn mất khóa này và cần khôi phục cơ sở dữ liệu, dữ liệu được mã hóa của bạn (khóa API, tùy chọn) sẽ không thể khôi phục.`,label:`Khóa mã hóa của bạn`,loading:`Đang tải...`,copyToClipboard:`Sao chép vào clipboard`,copied:`Đã sao chép khóa mã hóa vào clipboard!`,copyFailed:`Không thể sao chép khóa vào clipboard`,envNote:`Khóa này cũng được lưu trong tệp backend/.env của bạn dưới dạng ENCRYPTION_KEY`,acknowledgment:`Tôi đã lưu khóa mã hóa của tôi ở nơi an toàn và hiểu rằng việc mất nó có thể dẫn đến mất dữ liệu.`,confirmRequired:`Vui lòng xác nhận rằng bạn đã lưu khóa mã hóa`,continue:`Tiếp tục đến Libre WebUI`}},chat:{greeting:{morning:`Chào buổi sáng`,afternoon:`Chào buổi chiều`,evening:`Chào buổi tối`,night:`Chúc ngủ ngon`},followUp:`Tiếp tục`,welcome:{helpToday:`Tôi có thể giúp gì cho bạn hôm nay?`,helpTonight:`Tôi có thể giúp gì cho bạn tối nay?`,variety:{create:{title:`Chúng ta sẽ tạo gì đây?`,subtitle:`Bắt đầu từ một ý nghĩ, bản phác thảo hay bài toán mãi chưa gỡ được.`},explore:{title:`Ta nên bắt đầu từ đâu?`,subtitle:`Hãy mang đến câu hỏi bạn vẫn luôn trăn trở.`},imagine:{title:`Bạn đang hình dung điều gì?`,subtitle:`Chúng ta có thể cùng nhau tạo hình cho nó.`},focus:{title:`Điều gì đáng để bạn tập trung?`,subtitle:`Hãy làm rõ bước tiếp theo.`},untangle:{title:`Điều gì đang rối?`,subtitle:`Cứ cho tôi xem phiên bản lộn xộn trước.`},momentum:{title:`Khi bạn sẵn sàng, ta bắt đầu.`,subtitle:`Tiếp tục một ý tưởng, kế hoạch hay mạch suy nghĩ còn dang dở.`},open:{title:`Bạn đang nghĩ gì?`,subtitle:`Một ý nghĩ nhỏ hay dự án đầy tham vọng đều được.`},challenge:{title:`Chúng ta cần giải quyết gì?`,subtitle:`Hãy cho tôi biết điều gì vẫn chưa ổn.`},draft:{title:`Hãy bắt đầu từ đâu đó.`,subtitle:`Chưa cần phải trau chuốt.`},possibility:{title:`Điều này có thể trở thành gì?`,subtitle:`Cho tôi xem những nguyên liệu thô.`},unexpected:{title:`Hãy tạo một điều bất ngờ.`,subtitle:`Cho tôi một giới hạn, một tâm trạng hay ý tưởng còn dang dở.`}}},input:{placeholder:`Gửi tin nhắn`,messagePlaceholder:`Tin nhắn...`,attachImages:`Đính kèm hình ảnh`,attachments:`Tệp đính kèm và tính năng nâng cao`,sendMessage:`Gửi tin nhắn`,stopGeneration:`Dừng tạo`,menu:{uploadImages:`Tải ảnh lên`,attachDocument:`Đính kèm tài liệu`,attachWebpage:`Đính kèm trang web`,structuredOutput:`Đầu ra có cấu trúc`,attach:`Đính kèm`,documentAttached:`Đã đính kèm tài liệu`,webpageAttached:`Đã đính kèm trang web`,attachFailed:`Không thể đính kèm`,attachKnowledge:`Đính kèm kiến thức`,noCollections:`Chưa có bộ sưu tập nào — tạo trong Cài đặt → Tài liệu`},voiceInput:`Nhập bằng giọng nói`,voiceStop:`Dừng nghe`,transcriptionSource:`Nguồn nhận dạng giọng nói`,browserSpeech:`Dịch vụ nhận dạng giọng nói của trình duyệt`,providerTranscriptionDisclosure:`Ghi âm và gửi âm thanh đến {{provider}} để chuyển thành văn bản`,webSearchOn:`Tìm kiếm web đang bật — trả lời dùng kết quả trực tiếp`,webSearchOff:`Tìm trên web cho tin nhắn này`,thinkingOn:`Suy luận đang bật ({{level}})`,thinkingOff:`Suy luận trước khi trả lời`},session:{new:`Cuộc trò chuyện mới`,work:`Công việc`,chat:`Trò chuyện`,private:`Riêng tư`,incognito:`Trò chuyện ẩn danh`,privateMode:`Chế độ riêng tư`,privateDescription:`Cuộc trò chuyện này sẽ không được lưu`,privateTooltip:`Bắt đầu cuộc trò chuyện riêng tư sẽ không được lưu`,deleteConfirm:`Bạn có chắc chắn muốn xóa cuộc trò chuyện này?`,generatingTitle:`Đang tạo tiêu đề`,noChats:`Chưa có cuộc trò chuyện nào`,createFirst:`Tạo cuộc trò chuyện đầu tiên của bạn ở trên`,chats:`Cuộc trò chuyện`,renameChat:`Đổi tên cuộc trò chuyện`,openNewTab:`Mở trong thẻ mới`,pinChat:`Ghim`,unpinChat:`Bỏ ghim`,deleteChat:`Xóa cuộc trò chuyện`,archiveChat:`Lưu trữ cuộc trò chuyện`,groups:{pinned:`Đã ghim`,today:`Hôm nay`,yesterday:`Hôm qua`,previous7Days:`7 ngày qua`,previous30Days:`30 ngày qua`,older:`Cũ hơn`},folder:{new:`Thư mục mới`,namePlaceholder:`Tên thư mục`,move:`Chuyển vào thư mục`,remove:`Gỡ khỏi thư mục`,delete:`Xóa thư mục`,deleteConfirm:`Xóa thư mục này? Các cuộc trò chuyện bên trong vẫn giữ nguyên.`}},persona:{applied:`Đã áp dụng persona`,label:`Persona`,loadFailed:`Không tải được chi tiết persona`,removeFailed:`Không thể xóa persona`},model:{updated:`Đã cập nhật mô hình`,noModels:`Không có mô hình nào`,noModelsDescription:`Không có mô hình nào. Hãy đảm bảo Ollama đang chạy và đã cài đặt các mô hình.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`Không có mô hình nào. Vui lòng đảm bảo Ollama đang chạy và các mô hình đã được cài đặt.`,selectBeforePrivateChat:`Chọn một mô hình khả dụng trước khi bắt đầu trò chuyện riêng tư`,selectBeforeSending:`Chọn một mô hình khả dụng trước khi gửi`},footer:{disclaimer:`LLM có thể mắc lỗi - hãy xác minh thông tin quan trọng`,images:`{{count}} hình ảnh`,images_plural:`{{count}} hình ảnh`,structuredOutput:`Đầu ra có cấu trúc`},mediaUpload:{dropImagesHere:`Thả hình ảnh vào đây hoặc`,supportedFormats:`Hỗ trợ: JPG, PNG, GIF, WebP (tối đa 10MB mỗi file)`,browse:`duyệt`},structuredOutput:{title:`Định dạng phản hồi`,none:`Không có (Ngôn ngữ tự nhiên)`,noneDescription:`Phản hồi ngôn ngữ tự nhiên mặc định`,json:`JSON`,jsonDescription:`Định dạng JSON có cấu trúc`,list:`Danh sách`,listDescription:`Mảng các mục`,summary:`Tóm tắt`,summaryDescription:`Tóm tắt tài liệu với các điểm chính`,analysis:`Phân tích`,analysisDescription:`Phân tích có cấu trúc với ưu/nhược điểm`,custom:`Schema tùy chỉnh`,customDescription:`Định nghĩa JSON schema của riêng bạn`,customSchema:`JSON schema tùy chỉnh`,schemaPreview:`Xem trước Schema`,applySchema:`Áp dụng Schema`,cancel:`Hủy`,enabled:`Đã bật đầu ra có cấu trúc`},controls:{title:`Điều khiển trò chuyện`,systemPrompt:`Prompt hệ thống`,systemPromptPlaceholder:`Hướng dẫn chỉ áp dụng cho cuộc trò chuyện này…`,advancedParams:`Tham số nâng cao`,advancedParamsDescription:`Ghi đè cho cuộc trò chuyện này. Ô trống dùng giá trị mặc định chung.`,fromModel:`từ mô hình`,fromModelHint:`Giá trị này đến từ cài đặt do chính mô hình đề xuất.`,contextCapped:`Ngữ cảnh giới hạn ở {{context}} trong {{trained}} mà mô hình được huấn luyện, để vẫn tải được.`,saved:`Đã lưu điều khiển`,saveFailed:`Không thể lưu điều khiển`,params:{temperature:`Nhiệt độ`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`Số token tối đa`,repeatPenalty:`Phạt lặp lại`,seed:`Seed`,contextLength:`Độ dài ngữ cảnh`},thinking:`Suy luận`,thinkingDescription:`Mức độ mô hình suy luận trước khi trả lời. Mô hình không suy luận sẽ bỏ qua.`,compaction:`Nén ngữ cảnh`,compactionDescription:`Khi máy chủ nén các cuộc trò chuyện dài, cuộc trò chuyện này có thể đứng ngoài và giữ toàn bộ lịch sử.`,compactionDefault:`Mặc định của máy chủ`,compactionOff:`Tắt cho cuộc trò chuyện này`},message:{sources:`Nguồn`},toasts:{chatCreated:`Đã tạo cuộc trò chuyện mới`,createFailed:`Không tạo được phiên`,loadFailed:`Không tải được phiên`,chatDeleted:`Đã xóa cuộc trò chuyện`,deleteFailed:`Không xóa được cuộc trò chuyện`,deleteSessionFailed:`Không xóa được phiên`,historyCleared:`Đã xóa toàn bộ lịch sử trò chuyện`,historyClearFailed:`Không xóa được lịch sử trò chuyện`,titleUpdated:`Đã cập nhật tiêu đề cuộc trò chuyện`,updateFailed:`Không cập nhật được phiên`,noValidSession:`Không có phiên trò chuyện hợp lệ. Vui lòng tạo hoặc chọn cuộc trò chuyện.`,sessionNotFound:`Không tìm thấy phiên hoặc phiên không hợp lệ. Vui lòng chọn hoặc tạo phiên trò chuyện hợp lệ.`,noModelProvider:`Không có nhà cung cấp mô hình nào khả dụng`,modelUnavailable:`Mô hình đã chọn "{{model}}" không khả dụng từ {{provider}}. Hãy kích hoạt lại nhà cung cấp đó hoặc chọn mô hình khác.`,modelSwitched:`Đã chuyển sang {{model}} (mô hình trước không còn khả dụng)`,modelsLoadFailed:`Không tải được mô hình`,modelUpdated:`Đã cập nhật mô hình cho cuộc trò chuyện hiện tại`,modelUpdateFailed:`Không cập nhật được mô hình của phiên`},documents:{title:`Tài liệu trong ngữ cảnh`},context:{title:`Cửa sổ ngữ cảnh:`,full:`đầy {{percent}}%`,tokensUsed:`đã dùng {{used}} / {{budget}} token`,tokensUsedNoBudget:`đã dùng {{used}} token`,capped:`giới hạn từ {{trained}}`}},sidebar:{navigation:{chat:`Trò chuyện`,models:`Mô hình`,personas:`Personas`,imagine:`Tưởng tượng`,agents:`Tác nhân`,work:`Công việc`,settings:`Cài đặt`,usageAnalytics:`Mức sử dụng nhà cung cấp`,system:`Hệ thống`,userManagement:`Quản lý người dùng`,signOut:`Đăng xuất`,exploreLabel:`Khám phá`,notes:`Ghi chú`},toggleSize:`Chuyển đổi kích thước thanh bên`,expandSidebar:`Mở rộng thanh bên`},user:{menu:{changePicture:`Đổi ảnh đại diện`,settings:`Cài đặt`,usageAnalytics:`Mức sử dụng nhà cung cấp`,system:`Hệ thống`,userManagement:`Quản lý người dùng`,logout:`Đăng xuất`},avatar:{title:`Đổi ảnh hồ sơ`,updated:`Đã cập nhật ảnh hồ sơ`,updateFailed:`Không thể cập nhật ảnh hồ sơ`,saving:`Đang lưu...`,label:`Ảnh đại diện`,uploadAvatarImage:`Tải lên ảnh đại diện`,dragAndDrop:`Kéo và thả ảnh hoặc nhấp để duyệt`,chooseImage:`Chọn ảnh`,uploading:`Đang tải lên...`,enterImageUrl:`Hoặc nhập URL ảnh`,supportedFormats:`Hỗ trợ: JPG, PNG, GIF, WebP (tối đa 2MB). Ảnh vuông hoạt động tốt nhất.`,customAvatar:`Ảnh đại diện tùy chỉnh`,clickToChange:`Nhấp để thay đổi hoặc xóa`,removed:`Đã xóa ảnh đại diện`,uploaded:`Tải lên ảnh đại diện thành công`,invalidFile:`Vui lòng chọn tệp ảnh hợp lệ`,fileTooLarge:`Kích thước ảnh đại diện phải nhỏ hơn 2MB`,readFailed:`Không thể đọc tệp ảnh`,uploadFailed:`Không thể tải lên ảnh đại diện`},profile:{noEmail:`Chưa cung cấp email`}},settings:JSON.parse(`{"title":"Cài đặt","tabs":{"appearance":"Giao diện","model":"Mô hình","systemMessage":"Tin nhắn hệ thống","plugins":"Plugin","search":"Tìm kiếm","generation":"Tạo nội dung","documents":"Tài liệu","tts":"Giọng nói","imageGen":"Hình ảnh","data":"Dữ liệu","shortcuts":"Phím tắt","about":"Giới thiệu","sessions":"Phiên đăng nhập","apiKeys":"Khóa API"},"appearance":{"title":"Giao diện","language":{"title":"Ngôn ngữ","description":"Chọn ngôn ngữ ưa thích của bạn"},"theme":{"title":"Chủ đề","light":"Sáng","dark":"Tối","amoled":"Đen Thuần","system":"Hệ thống"},"accent":{"title":"Màu nhấn","custom":"Màu tùy chỉnh","useColor":"Dùng {{color}} làm màu nhấn","behaviorTitle":"Bảng màu giao diện","behaviorDescription":"Chọn chỉ dùng màu nhấn cho các điều khiển hoặc áp dụng cho toàn bộ giao diện sáng hay tối.","defaultStyle":"Mặc định","defaultStyleDescription":"Giữ các bề mặt trung tính của giao diện sáng và tối.","adaptedStyle":"Thích ứng với màu nhấn","adaptedStyleDescription":"Nhuộm bề mặt, đường viền và văn bản bằng màu nhấn."},"chatInterface":{"title":"Giao diện trò chuyện","showUsername":"Hiển thị tên người dùng","showUsernameDescription":"Hiển thị tên người dùng trong tin nhắn trò chuyện","followUpSuggestions":"Gợi ý tiếp theo","followUpSuggestionsDescription":"Gợi ý câu trả lời nhanh sau mỗi phản hồi","hapticFeedback":"Phản hồi xúc giác (Android)","hapticFeedbackDescription":"Dùng rung nhẹ cho các thao tác quan trọng trên thiết bị di động"},"background":{"title":"Hình nền","enable":"Bật hình nền","enableDescription":"Hiển thị hình nền tùy chỉnh với hiệu ứng mờ","blur":"Độ mờ","opacity":"Độ trong suốt","upload":"Tải lên hình nền","dragDrop":"Kéo và thả hình ảnh hoặc nhấp để duyệt","chooseImage":"Chọn hình ảnh"}},"saveSettings":"Lưu cài đặt","model":{"title":"Cài đặt mô hình","defaultModel":"Mô hình mặc định","defaultModelDescription":"Mô hình này sẽ được sử dụng mặc định cho các cuộc trò chuyện mới","selectModel":"Chọn mô hình","specializedModels":"Mô hình chuyên biệt","visionModel":"Mô hình thị giác","selectVisionModel":"Sử dụng mô hình trò chuyện hiện tại","visionModelDescription":"Được sử dụng tự động bất cứ khi nào ngữ cảnh trò chuyện gửi đi có chứa hình ảnh. Chọn một mô hình hỗ trợ đầu vào hình ảnh.","visionModelUpdateFailed":"Không thể cập nhật mô hình thị giác: {{error}}","visionModelNoProvider":"Mô hình thị giác này không có thông tin nhà cung cấp. Hãy chọn một mô hình khả dụng.","persona":"Persona","updateAll":"Cập nhật tất cả mô hình","updateAllDescription":"Kiểm tra cập nhật và tải phiên bản mới nhất của tất cả mô hình đã cài đặt","updateAllButton":"Cập nhật tất cả","updating":"Đang cập nhật mô hình...","currentModelInfo":"Thông tin mô hình hiện tại","name":"Tên","size":"Kích thước","family":"Họ","format":"Định dạng","status":"Trạng thái","statusStarting":"Đang khởi động...","statusComplete":"Hoàn tất","statusError":"Lỗi","bulkOperations":"Thao tác hàng loạt","autoTitle":{"title":"Tự động tạo tiêu đề","enable":"Bật tự động tạo tiêu đề","enableDescription":"Tự động tạo tiêu đề cho các cuộc trò chuyện mới","taskModel":"Mô hình tác vụ","selectTaskModel":"Chọn mô hình tác vụ","taskModelDescription":"Mô hình được sử dụng để tạo tiêu đề cuộc trò chuyện"},"updatingModel":"Đang cập nhật {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} trong {{total}} mô hình"},"systemMessage":{"title":"Tin nhắn hệ thống","description":"Đặt tin nhắn hệ thống tùy chỉnh sẽ được sử dụng cho tất cả cuộc trò chuyện mới.","placeholder":"Nhập tin nhắn hệ thống...","saved":"Đã lưu tin nhắn hệ thống","saveFailed":"Không thể lưu tin nhắn hệ thống"},"plugins":{"title":"Plugin","description":"Quản lý các plugin đã cài đặt của bạn","providerConnections":"Kết nối nhà cung cấp","providerConnectionsDescription":"Kết nối, cấu hình và kiểm tra các nhà cung cấp mô hình thông qua plugin.","providers":"Nhà cung cấp","searchProviders":"Tìm kiếm nhà cung cấp","noProvidersFound":"Không có nhà cung cấp nào khớp với tìm kiếm của bạn.","selectProvider":"Chọn một nhà cung cấp","selectProviderDescription":"Chọn một nhà cung cấp để kiểm tra kết nối và danh mục mô hình của nó.","addNew":"Thêm plugin mới","upload":"Tải lên plugin","addJson":"Thêm JSON","uploading":"Đang tải lên...","jsonPlaceholder":"Dán cấu hình JSON của plugin...","install":"Cài đặt plugin","noPlugins":"Chưa có plugin nào được cài đặt","noPluginsDescription":"Thêm plugin để mở rộng chức năng","loading":"Đang tải plugin...","installed":"Plugin đã cài đặt","active":"Plugin đang hoạt động","activeLabel":"Đang hoạt động","inactive":"Không hoạt động","activate":"Kích hoạt","deactivate":"Vô hiệu hóa","models":"mô hình","apiKeySet":"Đã đặt khóa API","apiKeyConfiguration":"Cấu hình khóa API","apiKeyDescription":"Lưu trữ khóa API cá nhân cho {{name}}.","apiKeyEnvAlternative":"Hoặc, đặt biến","environmentVariable":"biến môi trường","apiKeyConfigured":"Đã cấu hình khóa API","apiKeyPlaceholder":"Nhập khóa API của bạn...","saveApiKey":"Lưu khóa API","showApiKey":"Hiển thị khóa API","hideApiKey":"Ẩn khóa API","configure":"Cấu hình","providerSettings":"Cài đặt nhà cung cấp","status":"Trạng thái","defaultEndpoint":"Điểm cuối mặc định","modelCatalog":"Danh mục mô hình","modelCatalogDescription":"Các mô hình đã phát hiện và cấu hình cho nhà cung cấp này cùng khả năng của chúng.","refreshModels":"Làm mới mô hình","noModelsConfigured":"Không có mô hình nào được cấu hình cho nhà cung cấp này.","modelId":"ID mô hình","capabilities":"Khả năng","modelCatalogUpdated":"Danh mục mô hình đã cập nhật: {{count}} mô hình.","modelCatalogUnchanged":"Danh mục mô hình đã được cập nhật.","modelCatalogNeedsApiKey":"Thêm API key hợp lệ cho nhà cung cấp này để tải danh sách mô hình trực tiếp của nó.","modelCatalogUnavailable":"Không thể tải danh sách mô hình của nhà cung cấp.","modelCatalogRefreshFailed":"Không thể làm mới danh mục mô hình","capability":{"chat":"Trò chuyện","embedding":"Embedding","image":"Hình ảnh","speech":"Giọng nói","transcription":"Chuyển ngữ"},"exportPlugin":"Xuất plugin","deletePlugin":"Xóa plugin","apiKey":{"title":"Khóa API","placeholder":"Nhập khóa API","save":"Lưu khóa","remove":"Xóa khóa","configured":"Đã cấu hình khóa API","notConfigured":"Cần khóa API","saved":"Đã lưu khóa API thành công","removed":"Đã xóa khóa API","saveFailed":"Không thể lưu khóa API","removeFailed":"Không thể xóa khóa API","enterKey":"Vui lòng nhập khóa API"},"variables":"Variables"},"generation":{"title":"Tùy chọn tạo nội dung","description":"Cấu hình cách AI tạo phản hồi","scopeLabel":"Áp dụng cho","scopeAll":"Tất cả mô hình","scopeModel":"Chỉ {{model}}","scopeAllHint":"Các giá trị mọi mô hình dùng, trừ khi mô hình đó có giá trị riêng.","scopeModelHint":"Chỉ lưu cho mô hình này và được ưu tiên hơn giá trị chung.","advancedSettings":"Cài đặt tạo nâng cao","advancedSettingsDescription":"Lấy mẫu, giới hạn token, ngữ cảnh, hình phạt và chuỗi dừng","coreParameters":"Tham số cốt lõi","temperature":"Nhiệt độ","temperatureDescription":"Kiểm soát tính ngẫu nhiên. Giá trị thấp hơn tập trung hơn, giá trị cao hơn sáng tạo hơn.","topP":"Top P","topPDescription":"Kiểm soát sự đa dạng thông qua lấy mẫu hạt nhân. Giá trị thấp hơn tập trung vào các token có khả năng cao.","topK":"Top K","topKDescription":"Giới hạn lựa chọn token ở K token có khả năng cao nhất. Đặt 0 để vô hiệu hóa.","minP":"Min P","minPDescription":"Ngưỡng xác suất tối thiểu để lựa chọn token.","generationControl":"Kiểm soát tạo nội dung","maxTokens":"Số token tối đa","maxTokensDescription":"Số token tối đa để tạo trong phản hồi.","repeatPenalty":"Hình phạt lặp lại","repeatPenaltyDescription":"Phạt các token lặp lại. Giá trị cao hơn giảm sự lặp lại.","contextLength":"Độ dài ngữ cảnh","contextLengthDescription":"Kích thước cửa sổ ngữ cảnh tối đa cho cuộc trò chuyện.","seed":"Seed","optional":"tùy chọn","random":"Ngẫu nhiên","seedDescription":"Đặt seed cụ thể cho đầu ra có thể tái tạo.","advancedOptions":"Tùy chọn nâng cao","presencePenalty":"Hình phạt hiện diện","presencePenaltyDescription":"Phạt các token xuất hiện trong ngữ cảnh.","frequencyPenalty":"Hình phạt tần suất","frequencyPenaltyDescription":"Phạt các token được sử dụng thường xuyên.","stopSequences":"Chuỗi dừng","commaSeparated":"phân cách bằng dấu phẩy","stopSequencesDescription":"Các token tùy chỉnh sẽ dừng tạo khi gặp phải.","resetDefaults":"Đặt lại mặc định","saveOptions":"Lưu tùy chọn","embeddingSettings":"Cài đặt nhúng","enableEmbeddings":"Bật nhúng tài liệu","thinking":"Suy luận","thinkingDescription":"Mức suy luận mặc định cho câu trả lời. Mỗi cuộc trò chuyện có thể thay đổi.","thinkingLevels":{"default":"Mặc định của mô hình","defaultWith":"Mặc định của mô hình ({{level}})","off":"Tắt","on":"Bật","low":"Thấp","medium":"Trung bình","high":"Cao"}},"documents":{"title":"Cài đặt tài liệu","embeddings":{"title":"Nhúng","enable":"Bật nhúng tài liệu","model":"Mô hình nhúng","modelDescription":"Chọn mô hình được sử dụng để nhúng tài liệu","chunkSize":"Kích thước đoạn","chunkSizeInTokens":"(tính bằng token)","chunkSizeDescription":"Kích thước các đoạn văn bản để nhúng","chunkOverlap":"Độ chồng chéo đoạn","chunkOverlapInTokens":"(tính bằng token)","chunkOverlapDescription":"Độ chồng chéo giữa các đoạn liên tiếp","similarityThreshold":"Ngưỡng tương đồng","similarityDescription":"Điểm tương đồng tối thiểu để bao gồm kết quả","status":"Trạng thái nhúng","statusLabel":"Trạng thái","available":"Khả dụng","unavailable":"Không khả dụng","chunksWithEmbeddings":"Đoạn có nhúng","coverage":"Độ phủ","regenerate":"Tạo lại nhúng","regenerating":"Đang tạo lại..."},"collections":{"title":"Bộ sưu tập kiến thức","description":"Nhóm tài liệu thành bộ sưu tập và đính kèm vào bất kỳ cuộc trò chuyện nào.","namePlaceholder":"Tên bộ sưu tập","create":"Tạo","none":"Không có bộ sưu tập","deleteConfirm":"Xóa bộ sưu tập này? Tài liệu bên trong vẫn giữ nguyên.","createFailed":"Không thể tạo bộ sưu tập","deleteFailed":"Không thể xóa bộ sưu tập","assignFailed":"Không thể di chuyển tài liệu"},"library":{"title":"Tài liệu đã tải lên","description":"Tài liệu có thể dùng làm ngữ cảnh trò chuyện. Tài liệu tải lên trong một cuộc trò chuyện chỉ ở lại cuộc đó; tài liệu không thuộc cuộc trò chuyện hay bộ sưu tập nào sẽ tham gia mọi cuộc trò chuyện.","empty":"Chưa có tài liệu nào được tải lên.","chatScope":"Một cuộc trò chuyện","everyChatScope":"Mọi cuộc trò chuyện","deleteConfirm":"Xóa \\"{{name}}\\"? Tài liệu sẽ biến mất khỏi mọi cuộc trò chuyện.","deleteFailed":"Không thể xóa tài liệu"}},"tts":{"title":"Chuyển văn bản thành giọng nói","description":"Cấu hình cài đặt chuyển văn bản thành giọng nói để đọc to tin nhắn","loadingProviders":"Đang tải nhà cung cấp TTS...","noProviders":"Không có nhà cung cấp TTS","noProvidersDescription":"Cấu hình plugin hỗ trợ TTS để bật chuyển văn bản thành giọng nói","enable":"Bật TTS","enableDescription":"Cho phép chuyển văn bản thành giọng nói cho tin nhắn trợ lý","autoPlay":"Tự động phát phản hồi","autoPlayDescription":"Tự động đọc to các tin nhắn trợ lý mới","streamSentences":"Phát tự nhiên theo lô","streamSentencesDescription":"Tạo trước nhiều lô theo cụm từ rồi phát dưới dạng một câu trả lời liền mạch.","voiceConfiguration":"Cấu hình giọng nói","model":"Mô hình TTS","modelDescription":"Chọn mô hình để chuyển văn bản thành giọng nói","voice":"Giọng nói","selectVoice":"Chọn giọng nói","voiceDescription":"Chọn giọng nói để chuyển văn bản thành giọng nói","providerDefaultVoice":"Mô hình này dùng giọng mặc định, trừ khi bạn cung cấp bản ghi tham chiếu khi tạo lời nói.","voiceCloningAvailable":"Có thể sao chép giọng nói","voiceCloningAvailableDescription":"Dùng Hình dung → Âm thanh để tạo lời nói từ bản ghi tham chiếu đã được cho phép và bản chép lời chính xác. Bạn có thể lưu bản tham chiếu làm giọng nói có thể tái sử dụng.","savedVoiceOption":"{{name}} (giọng đã lưu)","savedVoices":"Giọng đã lưu","loadingSavedVoices":"Đang tải giọng đã lưu…","deleteSavedVoice":"Xóa giọng đã lưu {{name}}","deleteSavedVoiceConfirm":"Xóa giọng đã lưu “{{name}}”? Bản ghi tham chiếu và bản chép lời sẽ bị xóa.","savedVoiceDeleted":"Đã xóa giọng lưu","savedVoicePreferenceCleanupFailed":"Đã xóa giọng lưu nhưng không thể đặt lại cài đặt Giọng nói","savedVoiceDeleteFailed":"Không thể xóa giọng đã lưu","speed":"Tốc độ","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Nhà cung cấp khả dụng","models":"mô hình","test":"Kiểm tra","testing":"Đang kiểm tra...","stop":"Dừng"},"imageGen":{"title":"Tạo hình ảnh","description":"Cấu hình cài đặt và nhà cung cấp tạo hình ảnh","loadingProviders":"Đang tải nhà cung cấp tạo hình ảnh...","noProviders":"Không có nhà cung cấp tạo hình ảnh","noProvidersDescription":"Cấu hình plugin hỗ trợ tạo hình ảnh","enable":"Bật tạo hình ảnh","enableDescription":"Cho phép tạo hình ảnh AI trong cuộc trò chuyện","configuration":"Cấu hình","model":"Mô hình","modelDescription":"Chọn mô hình để tạo hình ảnh","size":"Kích thước","sizeDescription":"Độ phân giải của hình ảnh được tạo","quality":"Chất lượng","qualityDescription":"Mức chất lượng của hình ảnh được tạo","style":"Phong cách","styleDescription":"Preset phong cách cho hình ảnh được tạo","availableProviders":"Nhà cung cấp khả dụng","models":"mô hình"},"data":{"title":"Quản lý dữ liệu","export":"Xuất dữ liệu","exportDescription":"Tải xuống một tệp lưu trữ di động gồm tùy chọn, thư mục trò chuyện, phiên và tin nhắn, ghi chú, bộ sưu tập kiến thức và văn bản trích xuất từ tài liệu.","archiveScopeV3":"Bao gồm tùy chọn, cuộc trò chuyện, thư mục, ghi chú, bộ sưu tập kiến thức và văn bản trích xuất từ tài liệu. Không bao gồm tài khoản và bí mật, giọng nói nhân bản sinh trắc học, nội dung đa phương tiện đã tạo, persona và bộ nhớ, cũng như dữ liệu hoặc ổ đĩa Work.","exportAll":"Xuất tất cả dữ liệu","import":"Nhập dữ liệu","importDescription":"Nhập dữ liệu từ bản xuất trước đó.","importData":"Nhập dữ liệu","importing":"Đang nhập...","clearSessions":"Xóa phiên","clearSessionsDescription":"Xóa tất cả phiên trò chuyện. Hành động này không thể hoàn tác.","clearAll":"Xóa tất cả","clearing":"Đang xóa...","importOptions":"Tùy chọn nhập","importOptionsDescription":"Chọn cách xử lý dữ liệu hiện có","validatingArchive":"Đang xác thực tệp lưu trữ và tính toán thay đổi…","archiveValidationFailed":"Xác thực tệp lưu trữ thất bại","preflightReport":"Xem trước nội dung nhập","preflightIncoming":"{{folders}} thư mục · {{sessions}} cuộc trò chuyện · {{messages}} tin nhắn · {{notes}} ghi chú · {{collections}} bộ sưu tập · {{documents}} tài liệu · {{chunks}} đoạn","preflightRemappedIds":"{{count}} ID sẽ được ánh xạ lại để bảo vệ dữ liệu của tài khoản khác.","skipDuplicates":"Bỏ qua bản sao","overwrite":"Ghi đè hiện có","importResults":"Kết quả nhập","preferences":"Tùy chọn","imported":"Đã nhập","failed":"Thất bại","sessions":"Phiên","sessionFolders":"Thư mục phiên","notes":"Ghi chú","knowledgeCollections":"Bộ sưu tập kiến thức","importedLabel":"đã nhập","overwrittenLabel":"đã ghi đè","skipped":"đã bỏ qua","toCreate":"sẽ tạo","toOverwrite":"sẽ ghi đè","toSkip":"sẽ bỏ qua","documents":"Tài liệu","warnings":"Cảnh báo","refreshAfterImportFailed":"Dữ liệu đã được nhập, nhưng không thể làm mới một số chế độ xem. Hãy tải lại Libre WebUI để xem mọi thay đổi.","errors":"Lỗi","archivedChats":{"title":"Cuộc trò chuyện đã lưu trữ","empty":"Không có cuộc trò chuyện nào được lưu trữ","unarchive":"Bỏ lưu trữ"}},"about":{"title":"Giới thiệu","versionLabel":"Phiên bản","ollama":{"title":"Trạng thái Ollama","version":"Phiên bản","healthy":"Khỏe mạnh","unhealthy":"Không khỏe mạnh"},"stats":{"models":"Mô hình","sessions":"Phiên"},"features":{"privacy":{"title":"Ưu tiên quyền riêng tư","description":"Dữ liệu của bạn được lưu trên thiết bị của bạn"},"openSource":{"title":"Mã nguồn mở","description":"Phần mềm miễn phí và mã nguồn mở"},"localInference":{"title":"Suy luận cục bộ","description":"Chạy mô hình AI cục bộ với Ollama"}},"openSourceBy":"Mã nguồn mở bởi {{company}}","links":{"title":"Liên kết","github":"GitHub","githubDescription":"Xem mã nguồn và đóng góp","website":"Website","websiteDescription":"Truy cập website của chúng tôi","documentation":"Tài liệu","reportIssue":"Báo cáo vấn đề","reportIssueDescription":"Báo lỗi & yêu cầu tính năng","documentationDescription":"Hướng dẫn, bài học và tham khảo API","forgejo":"Bản sao Forgejo","forgejoDescription":"Kho Forgejo tự lưu trữ","sponsor":"Tài trợ","sponsorDescription":"Giúp tài trợ cho dự án"},"version":"Phiên bản {{version}}"},"groups":{"general":"Chung","chat":"Trò chuyện","media":"Giọng nói & hình ảnh","connections":"Kết nối"},"search":{"title":"Tìm kiếm web","description":"Tìm kiếm trên web qua một phiên bản SearXNG tự lưu trữ. Khi bật, khung soạn chat có nút tìm kiếm và các tác vụ Work có mạng có thể tìm kiếm.","enableLabel":"Bật tìm kiếm web","enableDescription":"Cung cấp tìm kiếm web cho chat và tác vụ Work. Tìm kiếm chạy phía máy chủ trên phiên bản đã cấu hình.","urlLabel":"URL SearXNG","urlDescription":"URL gốc của phiên bản SearXNG mà máy chủ truy cập được. Bộ triển khai riêng đi kèm cung cấp http://searxng:8080.","maxResultsLabel":"Kết quả mỗi lần tìm","maxResultsDescription":"Bao nhiêu kết quả được đưa vào trả lời hoặc lệnh gọi công cụ, 1-10.","maxResultsInvalid":"Kết quả mỗi lần tìm phải từ 1 đến 10.","safeSearchLabel":"Tìm kiếm an toàn","safeSearchDescription":"Yêu cầu công cụ lọc kết quả nhạy cảm.","test":"Kiểm tra kết nối","testing":"Đang kiểm tra…","testOk":"Tìm kiếm hoạt động — trả về {{results}} kết quả","testFailed":"Kiểm tra tìm kiếm thất bại","save":"Lưu","saved":"Đã lưu cài đặt tìm kiếm","saveFailed":"Không thể lưu cài đặt tìm kiếm"},"compaction":{"title":"Nén ngữ cảnh","description":"Khi một cuộc trò chuyện vượt quá ngưỡng token, máy chủ sẽ tóm tắt các tin nhắn cũ và chỉ giữ nguyên văn những tin nhắn mới nhất. Áp dụng cho mọi người dùng trên máy chủ này.","thresholdLabel":"Ngưỡng token","thresholdDescription":"Số token ngữ cảnh ước tính mà khi vượt quá, lịch sử cũ sẽ được tóm tắt, 500-1.000.000.","thresholdInvalid":"Ngưỡng token phải từ 500 đến 1.000.000.","keepRecentLabel":"Số tin nhắn gần đây được giữ","keepRecentDescription":"Bao nhiêu tin nhắn mới nhất luôn được giữ nguyên văn, 2-200.","keepRecentInvalid":"Số tin nhắn gần đây được giữ phải từ 2 đến 200.","modelLabel":"Mô hình nén","modelDescription":"Mô hình viết các bản tóm tắt. Khi không chọn, mô hình của chính phiên sẽ được dùng.","sessionModelOption":"Dùng mô hình của phiên","promptLabel":"Prompt tóm tắt tùy chỉnh","promptPlaceholder":"Để trống để dùng prompt tích hợp","promptDescription":"Các biến mẫu {{previousSummaryVariable}} và {{messagesVariable}} được thay bằng bản tóm tắt trước đó và các tin nhắn đang được tóm tắt.","saved":"Đã lưu cài đặt nén","saveFailed":"Không thể lưu cài đặt nén","loadFailed":"Không thể tải cài đặt nén"},"sessions":{"title":"Phiên đăng nhập","description":"Tất cả những nơi tài khoản này đang đăng nhập. Đăng xuất một phiên có hiệu lực ngay lập tức; đăng nhập lại sẽ khôi phục quyền truy cập.","signOutOthers":"Đăng xuất các phiên khác","signingOutOthers":"Đang đăng xuất…","signOut":"Đăng xuất","signingOut":"Đang đăng xuất…","revoked":"Đã đăng xuất phiên.","revokeFailed":"Không thể đăng xuất phiên.","othersRevoked":"Số phiên khác đã đăng xuất: {{count}}","loadFailed":"Không tải được danh sách phiên.","empty":"Không tìm thấy phiên nào.","current":"Phiên này","revokedBadge":"Đã đăng xuất","unknownDevice":"Thiết bị không xác định","createdAt":"Đăng nhập lúc","lastSeenAt":"Hoạt động gần nhất","expiresAt":"Hết hạn"},"apiKeys":{"title":"Khóa API","description":"Token có phạm vi giới hạn dành cho tập lệnh và tích hợp. Mỗi khóa chỉ có quyền truy cập vào các phạm vi bạn chọn.","newKeyTitle":"Khóa API mới của bạn","copy":"Sao chép","copied":"Đã sao chép vào bộ nhớ tạm.","copyFailed":"Sao chép thất bại.","showOnceWarning":"Hãy sao chép ngay, khóa sẽ không được hiển thị lại.","dismiss":"Xong","createTitle":"Tạo khóa","nameLabel":"Tên","namePlaceholder":"ví dụ: CI pipeline","nameRequired":"Hãy đặt tên cho khóa.","expiryLabel":"Hết hạn sau (số ngày, tùy chọn)","expiryPlaceholder":"Không bao giờ","expiryInvalid":"Thời hạn phải là số ngày nguyên.","scopesLabel":"Phạm vi","scopesRequired":"Chọn ít nhất một phạm vi.","create":"Tạo khóa","creating":"Đang tạo…","created":"Đã tạo khóa API.","createFailed":"Không thể tạo khóa API.","revoke":"Thu hồi","revoking":"Đang thu hồi…","revoked":"Đã thu hồi khóa API.","revokeFailed":"Không thể thu hồi khóa API.","revokedBadge":"Đã thu hồi","loadFailed":"Không tải được danh sách khóa API.","empty":"Chưa có khóa API nào.","createdAt":"Đã tạo","lastUsedAt":"Dùng lần cuối","expiresAt":"Hết hạn","neverExpires":"Không bao giờ"}}`),models:{title:`Mô hình`,subtitle:`Tải, quản lý và giám sát mô hình Ollama của bạn`,installed:`Mô hình đã cài đặt`,available:`Mô hình khả dụng`,pull:`Tải mô hình`,pulling:`Đang tải...`,delete:`Xóa mô hình`,deleting:`Đang xóa...`,size:`Kích thước`,modified:`Đã sửa đổi`,family:`Họ`,parameters:`Tham số`,quantization:`Lượng tử hóa`,noModels:`Chưa có mô hình nào được cài đặt`,pullFirst:`Tải mô hình để bắt đầu`,noModelsFound:`Không tìm thấy mô hình`},personas:{title:`Personas`,create:`Tạo Persona`,edit:`Chỉnh sửa Persona`,delete:`Xóa Persona`,name:`Tên`,description:`Mô tả`,systemPrompt:`Prompt hệ thống`,model:`Mô hình`,avatar:`Ảnh đại diện`,background:`Hình nền`,noPersonas:`Chưa có persona nào được tạo`,createFirst:`Tạo persona đầu tiên của bạn để tùy chỉnh trải nghiệm trò chuyện`},gallery:{title:`Thư viện`,subtitle:`Thư viện hình ảnh do AI tạo của bạn`,imageCount:`{{count}} hình ảnh`,generate:`Tạo hình ảnh`,generateDescription:`Tạo hình ảnh với AI`,generating:`Đang tạo...`,prompt:`Prompt`,promptPlaceholder:`Mô tả hình ảnh bạn muốn tạo...`,noImages:`Chưa có hình ảnh nào được tạo`,download:`Tải xuống`,delete:`Xóa`,regenerate:`Tạo lại`,model:`Mô hình`,size:`Kích thước`,quality:`Chất lượng`,created:`Đã tạo`},errors:{generic:`Đã xảy ra lỗi`,network:`Lỗi mạng. Vui lòng kiểm tra kết nối của bạn.`,unauthorized:`Bạn không được phép thực hiện hành động này.`,notFound:`Không tìm thấy tài nguyên được yêu cầu.`,serverError:`Lỗi máy chủ. Vui lòng thử lại sau.`,validation:`Vui lòng kiểm tra đầu vào của bạn và thử lại.`},keyboard:{title:`Phím tắt`,toggleSidebar:`Chuyển đổi thanh bên`,openSettings:`Mở cài đặt`,toggleDarkMode:`Chuyển đổi chế độ tối`,showShortcuts:`Hiển thị phím tắt`,closeModals:`Đóng hộp thoại`,groups:{navigation:`Điều hướng`,general:`Chung`,chat:`Trò chuyện`,workspace:`Không gian làm việc`},actions:{sendMessage:`Gửi tin nhắn`,newLine:`Dòng mới trong tin nhắn`,saveEdit:`Lưu tin nhắn đã chỉnh sửa`,cancelEdit:`Hủy chỉnh sửa`,saveFile:`Lưu tệp`,formatCode:`Định dạng mã`},description:`Tất cả phím tắt có trong Libre WebUI.`,newChat:`Trò chuyện mới`,newWork:`Phiên Work mới`,openPalette:`Mở bảng lệnh`},modelManager:{title:`Mô hình`,loading:`Đang tải mô hình...`,systemStatus:{online:`Ollama trực tuyến`,offline:`Ollama ngoại tuyến`,models:`mô hình`,models_plural:`mô hình`,running:`đang chạy`,vram:`VRAM`},sections:{pull:`Tải mô hình mới`,library:`Duyệt thư viện`,huggingface:`HuggingFace Hub`,running:`Mô hình đang chạy`,local:`Mô hình cục bộ`,advanced:`Hành động nâng cao`,catalog:`Danh mục mô hình`},catalog:{searchPlaceholder:`Tìm mô hình theo tên hoặc nhà cung cấp...`,noModels:`Chưa có mô hình nào khả dụng.`,empty:`Không có mô hình nào khớp với tìm kiếm của bạn.`,providerOllama:`Ollama`,hidden:`Đã ẩn`,visibilityFailed:`Không thể cập nhật hiển thị của mô hình.`,filterAll:`Tất cả mô hình`,filterLocal:`Cục bộ`,filterProviders:`Nhà cung cấp`,filterHidden:`Đã ẩn`,enableAll:`Bật các mục đang hiện`,disableAll:`Tắt các mục đang hiện`,rename:`Sửa tên và ảnh`,setPicture:`Đặt ảnh`,clearPicture:`Xóa ảnh`,pictureInvalid:`Hãy chọn một tệp ảnh.`,pictureTooLarge:`Ảnh phải nhỏ hơn 192 KB.`,saving:`Đang lưu…`,hide:`Ẩn với người dùng`,show:`Hiện với người dùng`},pull:{placeholder:`Nhập tên mô hình (vd: llama3.2:3b, deepseek-r1:14b)`,button:`Tải`,cancel:`Hủy`,popular:`Mô hình phổ biến:`,browseAll:`Duyệt tất cả mô hình trên ollama.com`,success:`Đã tải mô hình {{name}} thành công`,cancelled:`Đã hủy tải mô hình`,failed:`Không thể tải mô hình`,enterName:`Vui lòng nhập tên mô hình`,restricted:`Việc cài đặt mô hình trên phiên bản này chỉ dành cho quản trị viên.`},progress:{starting:`Đang khởi tạo...`,pulling:`Đang tải mô hình...`,pullingLayer:`đang tải`,verifying:`Đang xác minh tính toàn vẹn...`,verifyingDigest:`đang xác minh digest sha256`,writing:`Đang ghi manifest...`,cleaning:`Đang dọn dẹp...`},library:{available:`khả dụng`,search:`Tìm kiếm mô hình...`,noResults:`Không tìm thấy mô hình nào phù hợp với tiêu chí của bạn`,installed:`Đã cài đặt`,more:`+{{count}} thêm`,refresh:`Làm mới thư viện`},huggingface:{browseAll:`Xem tất cả trên HuggingFace`,checkingGguf:`Đang tìm tệp GGUF...`,noGgufAvailable:`Không có tệp GGUF để tải trực tiếp vào Ollama`,ggufFilesCount:`Tệp GGUF ({{count}}) - Tải trực tiếp vào Ollama`,noModelsFound:`Không tìm thấy mô hình`,noResults:`Không tìm thấy mô hình. Thử điều chỉnh tìm kiếm hoặc bộ lọc.`,browseAllLink:`Xem tất cả`,search:`Tìm kiếm mô hình HuggingFace...`,by:`bởi`,gated:`Truy cập hạn chế`,viewOnHF:`Xem trên HuggingFace`,sortDownloads:`Lượt tải`,sortLikes:`Lượt thích`,sortRecent:`Gần đây`,taskTextGeneration:`Tạo văn bản`,taskTextToSpeech:`Văn bản thành giọng nói`,taskTextToImage:`Văn bản thành hình ảnh`,taskSpeechRecognition:`Nhận dạng giọng nói`,tasks:{textGen:`Tạo văn bản`,tts:`Văn bản thành giọng nói`,image:`Văn bản thành hình ảnh`,stt:`Nhận dạng giọng nói`},sort:{downloads:`Tải nhiều nhất`,likes:`Được thích nhiều nhất`,recent:`Cập nhật gần đây`}},local:{noModels:`Chưa có mô hình nào được cài đặt`,pullToStart:`Tải mô hình ở trên để bắt đầu`,installed:`đã cài đặt`,running:`Đang chạy`,info:`Thông tin`,copy:`Sao chép`,delete:`Xóa`,deleteConfirm:`Bạn có chắc chắn muốn xóa mô hình "{{name}}"?`,deleteSuccess:`Đã xóa mô hình {{name}} thành công`,deleteFailed:`Không thể xóa mô hình`},advanced:{createModel:`Tạo mô hình`,fromModelfile:`Từ Modelfile`,copyModel:`Sao chép mô hình`,duplicateExisting:`Nhân đôi hiện có`,testEmbeddings:`Kiểm tra nhúng`,generateVectors:`Tạo vector`,healthCheck:`Kiểm tra sức khỏe`,testConnection:`Kiểm tra kết nối`,healthy:`Ollama đang hoạt động tốt!`},modals:{details:{title:`Chi tiết mô hình`,info:`Thông tin mô hình`,family:`Họ`,parameters:`Tham số`,quantization:`Lượng tử hóa`,format:`Định dạng`,systemPrompt:`Prompt hệ thống`,template:`Mẫu`,license:`Giấy phép`,modelfile:`Modelfile`,noDetails:`Không có chi tiết`},copy:{title:`Sao chép mô hình`,source:`Mô hình nguồn`,selectModel:`Chọn mô hình...`,newName:`Tên mô hình mới`,placeholder:`vd: my-custom-model`,copying:`Đang sao chép...`,button:`Sao chép mô hình`,success:`Đã sao chép mô hình sang {{name}}`,failed:`Không thể sao chép mô hình`,enterBoth:`Vui lòng nhập cả tên nguồn và tên đích`},create:{title:`Tạo mô hình tùy chỉnh`,name:`Tên mô hình`,namePlaceholder:`vd: my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
- SYSTEM You are a helpful assistant.`,see:`Xem`,docs:`Tài liệu Modelfile`,docsLink:`để tham khảo cú pháp`,creating:`Đang tạo...`,button:`Tạo mô hình`,success:`Đã tạo mô hình {{name}} thành công`,failed:`Không thể tạo mô hình`,enterBoth:`Vui lòng nhập tên mô hình và nội dung Modelfile`},embeddings:{title:`Kiểm tra nhúng`,model:`Mô hình nhúng`,selectModel:`Chọn mô hình...`,recommended:`Khuyến nghị: nomic-embed-text, mxbai-embed-large`,input:`Văn bản đầu vào`,placeholder:`Nhập văn bản để tạo nhúng cho...`,generating:`Đang tạo...`,button:`Tạo nhúng`,result:`Kết quả ({{count}} chiều)`,success:`Đã tạo vector nhúng {{count}} chiều`,failed:`Không thể tạo nhúng`,enterBoth:`Vui lòng chọn mô hình và nhập văn bản`}}},personaManager:{title:`Personas`,subtitle:`Tạo và quản lý các persona AI với tính cách, bộ nhớ và hành vi tùy chỉnh`,loading:`Đang tải personas...`,createButton:`Tạo Persona`,importExport:`Nhập/Xuất`,stats:{title:`Personas của bạn`,count:`{{count}} persona đã tạo`,count_plural:`{{count}} personas đã tạo`},empty:{title:`Chưa có persona nào`,description:`Tạo persona đầu tiên của bạn để bắt đầu với tương tác AI được cá nhân hóa`,button:`Tạo Persona đầu tiên của bạn`},deleteConfirm:`Bạn có chắc chắn muốn xóa "{{name}}"?`,deleteSuccess:`Đã xóa persona "{{name}}" thành công`,downloadSuccess:`Đã tải xuống persona "{{name}}" thành công`,failed:`Không thể {{action}} persona`},personaForm:{title:{create:`Tạo Persona mới`,edit:`Chỉnh sửa Persona`},subtitle:{create:`Tạo một persona AI mới với tính cách tùy chỉnh, hệ thống bộ nhớ và khả năng học thích ứng`,edit:`Tùy chỉnh persona AI của bạn với bộ nhớ nâng cao, học thích ứng và tham số thông minh`},loading:`Đang tải form...`,saved:`Đã lưu`,tabs:{basic:`Cơ bản`,parameters:`Tham số`,memory:`Bộ nhớ & Học tập`,advanced:`Nâng cao`},basic:{name:`Tên`,namePlaceholder:`Nhập tên persona`,model:`Mô hình`,selectModel:`Chọn mô hình`,description:`Mô tả`,descriptionPlaceholder:`Mô tả persona của bạn...`,systemPrompt:`Prompt hệ thống`,systemPromptPlaceholder:`Nhập prompt hệ thống định nghĩa hành vi persona của bạn...`,systemPromptHint:`Prompt hệ thống định nghĩa cách persona của bạn sẽ hành xử và phản hồi.`},parameters:{temperature:`Nhiệt độ`,temperatureHint:`Kiểm soát sự sáng tạo vs nhất quán`,topP:`Top-P`,topPHint:`Kiểm soát sự đa dạng phản hồi`,topK:`Top-K`,topKHint:`Giới hạn từ vựng ở top-k token`,contextWindow:`Cửa sổ ngữ cảnh`,contextWindowHint:`Độ dài lịch sử hội thoại tối đa`,maxTokens:`Số token tối đa`,maxTokensHint:`Độ dài phản hồi tối đa`,repeatPenalty:`Hình phạt lặp lại`,repeatPenaltyHint:`Giảm phản hồi lặp lại`},memory:{title:`Hệ thống bộ nhớ`,subtitle:`Persona ghi nhớ các cuộc trò chuyện theo thời gian`,enableHint:`Bật hệ thống bộ nhớ để cho phép persona của bạn ghi nhớ các cuộc trò chuyện và xây dựng ngữ cảnh theo thời gian.`,loading:`Đang tải trạng thái bộ nhớ...`,noData:`Chưa có dữ liệu bộ nhớ`,memories:`Ký ức`,mbUsed:`MB đã dùng`,lastBackup:`Sao lưu lần cuối`,never:`Chưa bao giờ`,maxMemories:`Số ký ức tối đa`,maxMemoriesHint:`Số lượng ký ức persona này có thể lưu trữ`,retention:`Thời gian giữ ký ức`,retentionHint:`Số ngày giữ ký ức trước khi dọn dẹp`,autoCleanup:`Tự động dọn dẹp ký ức cũ`,wipeAll:`Xóa tất cả ký ức`,wipeCannot:`Không thể hoàn tác`,wipeButton:`Xóa`,wiping:`Đang xóa...`,wipeConfirm:`Bạn có chắc chắn muốn xóa tất cả ký ức? Không thể hoàn tác.`,wipeSuccess:`Đã xóa {{count}} ký ức`},learning:{title:`Học thích ứng`,subtitle:`Persona phát triển dựa trên tương tác`,enableHint:`Bật học thích ứng để cho phép persona của bạn phát triển và cá nhân hóa phản hồi dựa trên tương tác của bạn.`,speed:`Tốc độ học`,slow:`Chậm`,slowDesc:`Thay đổi dần dần`,balanced:`Cân bằng`,balancedDesc:`Tốc độ vừa phải`,fast:`Nhanh`,fastDesc:`Thích ứng nhanh`,autoAdapt:`Tự động thích ứng với sở thích người dùng`,whatLearns:`Những gì persona học:`,conversationTone:`Giọng điệu hội thoại`,responseStyle:`Phong cách phản hồi`,userPreferences:`Sở thích người dùng`,topicInterests:`Chủ đề quan tâm`},advanced:{embeddingModel:`Mô hình nhúng`,embeddingHint:`Chọn mô hình được sử dụng để mã hóa bộ nhớ và tìm kiếm ngữ nghĩa. Các mô hình nhúng được hiển thị trước, sau đó là các mô hình khả dụng khác.`,noModels:`Không tìm thấy mô hình`,embeddingModels:`Mô hình nhúng`,otherModels:`Mô hình khác`,installHint:`Cài đặt mô hình nhúng:`,recommended:`Khuyến nghị: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`Về cài đặt nâng cao`,aboutDescription:`Mô hình nhúng được sử dụng bởi hệ thống bộ nhớ để hiểu ý nghĩa ngữ nghĩa và tìm các ký ức liên quan trong cuộc trò chuyện. Chọn mô hình phù hợp với trường hợp sử dụng và tài nguyên khả dụng của bạn.`},actions:{cancel:`Hủy`,save:`Lưu`,saving:`Đang lưu...`,saveClose:`Lưu & Đóng`,create:`Tạo`},success:{created:`Đã tạo persona`,updated:`Đã cập nhật persona`},error:{saveFailed:`Không thể lưu`}},personaCard:{enhanced:`Nâng cao`,systemPrompt:`Prompt hệ thống`,memories:`ký ức`,use:`Sử dụng`,editTooltip:`Chỉnh sửa persona`,downloadTooltip:`Tải xuống persona`,backup:`Sao lưu`,exportDNA:`Xuất DNA`,wipeMemories:`Xóa ký ức`,wipeConfirm:`Bạn có chắc chắn muốn xóa tất cả ký ức của persona này? Hành động này không thể hoàn tác.`,wipeSuccess:`Đã xóa {{count}} ký ức`,backupSuccess:`Đã tải xuống bản sao lưu persona thành công`,dnaSuccess:`Đã xuất DNA persona thành công`,failed:`Không thể {{action}}`},userManager:{title:`Quản lý người dùng`,subtitle:`Quản lý tài khoản và quyền hạn người dùng`,pageDescription:`Quản lý tài khoản người dùng, quyền và kiểm soát truy cập cho phiên bản Libre WebUI của bạn.`,loading:`Đang tải người dùng...`,createUser:`Tạo người dùng`,search:`Tìm kiếm người dùng...`,noUsers:`Không tìm thấy người dùng`,noUsersMatching:`Không có người dùng nào khớp với tìm kiếm của bạn`,columns:{user:`Người dùng`,email:`Email`,role:`Vai trò`,created:`Đã tạo`,actions:`Hành động`},roles:{admin:`Quản trị viên`,user:`Người dùng`},noEmail:`Không có email`,deleteConfirm:`Bạn có chắc chắn muốn xóa người dùng "{{name}}"?`,deleteSuccess:`Đã xóa người dùng thành công`,deleteFailed:`Không thể xóa người dùng`,cannotDeleteSelf:`Bạn không thể xóa tài khoản của chính mình`,approval:{title:`Phê duyệt đang chờ xử lý`,description:`Xem xét các đăng ký mới trước khi cho phép họ vào phiên bản này.`,registered:`Đã đăng ký`,activate:`Kích hoạt tài khoản`,reject:`Từ chối đăng ký`,approved:`{{name}} hiện có thể đăng nhập.`,failed:`Không thể phê duyệt tài khoản.`,notification:`{{count}} đăng ký đang chờ bạn phê duyệt.`,notificationBadge:`{{count}} phê duyệt người dùng đang chờ xử lý`},form:{title:{create:`Tạo người dùng`,edit:`Chỉnh sửa người dùng`},username:`Tên người dùng`,usernamePlaceholder:`Nhập tên người dùng`,email:`Email`,emailPlaceholder:`Nhập email (tùy chọn)`,password:`Mật khẩu`,passwordPlaceholder:`Nhập mật khẩu`,passwordHint:`Để trống để giữ mật khẩu hiện tại`,role:`Vai trò`,creating:`Đang tạo...`,updating:`Đang cập nhật...`,createButton:`Tạo người dùng`,updateButton:`Cập nhật người dùng`,createSuccess:`Đã tạo người dùng thành công`,updateSuccess:`Đã cập nhật người dùng thành công`,createFailed:`Không thể tạo người dùng`,updateFailed:`Không thể cập nhật người dùng`},workAccess:{title:`Quyền truy cập Work`,description:`Cho phép mọi người dùng đang hoạt động tạo và chạy tác vụ Work trong các sandbox cô lập. Quản trị viên luôn có quyền truy cập; không gian làm việc thư mục máy chủ vẫn chỉ dành cho quản trị viên.`,saved:`Đã cập nhật quyền truy cập Work`,saveFailed:`Không thể cập nhật quyền truy cập Work`},workPolicies:{title:`Chính sách Work`,description:`Các preset runtime có tên (image, giới hạn, dừng khi rảnh) để tạo tác vụ. Trường trống kế thừa mặc định toàn cục.`,add:`Thêm chính sách`,name:`Tên`,image:`Image`,memory:`Bộ nhớ`,cpu:`CPU`,pids:`Giới hạn PID`,workspaceSize:`Kích thước không gian làm việc`,idleMinutes:`Dừng khi rảnh (phút)`,networkDefault:`Mạng mặc định`,networkInherit:`Kế thừa mặc định`,networkOn:`Bật`,networkOff:`Tắt`,save:`Lưu`,cancel:`Hủy`,edit:`Sửa chính sách`,delete:`Xóa chính sách`,deleteConfirm:`Xóa chính sách này? Các tác vụ đang dùng sẽ quay về mặc định toàn cục.`,empty:`Chưa có chính sách nào. Tác vụ dùng mặc định runtime toàn cục.`,saved:`Đã lưu chính sách Work`,deleted:`Đã xóa chính sách Work`,failed:`Không thể lưu chính sách Work`,invalidNumber:`Giới hạn PID và dừng khi rảnh phải là số.`},modelAccess:{title:`Tải mô hình`,description:`Cho phép tất cả người dùng đang hoạt động tải mô hình từ Ollama và trình duyệt Hugging Face. Quản trị viên luôn có thể tải mô hình.`,saved:`Đã cập nhật quyền tải mô hình`,saveFailed:`Không thể cập nhật quyền tải mô hình`},webSearchAccess:{title:`Tìm kiếm web`,description:`Cho phép tất cả người dùng đang hoạt động dùng tìm kiếm web trong chat và tác vụ Work. Quản trị viên luôn dùng được. Cấu hình công cụ trong Cài đặt > Tìm kiếm.`,saved:`Đã cập nhật quyền tìm kiếm web`,saveFailed:`Không thể cập nhật quyền tìm kiếm web`},agentAccess:{title:`Tác nhân`,description:`Cung cấp mục Tác nhân (Libre Claw) cho quản trị viên. CLI tác nhân chạy trên máy chủ với tư cách người dùng máy chủ, bên ngoài sandbox Work.`,saved:`Đã cập nhật quyền truy cập tác nhân`,saveFailed:`Không thể cập nhật quyền truy cập tác nhân`,lockedByEnv:`Bị khóa bởi biến môi trường AGENT_CLI_MODELS_ENABLED.`},groups:{title:`Nhóm`,description:`Gom các tài khoản thành nhóm để quản lý quyền truy cập chung và kiểm tra những gì một tài khoản thực sự có thể làm.`,newGroup:`Nhóm mới`,nameLabel:`Tên`,nameRequired:`Hãy đặt tên cho nhóm.`,descriptionLabel:`Mô tả (tùy chọn)`,create:`Tạo nhóm`,creating:`Đang tạo…`,created:`Đã tạo nhóm.`,createFailed:`Không thể tạo nhóm.`,deleted:`Đã xóa nhóm.`,deleteFailed:`Không thể xóa nhóm.`,deleteGroup:`Xóa nhóm`,loadFailed:`Không tải được danh sách nhóm.`,empty:`Chưa có nhóm nào.`,memberCount:`Thành viên: {{count}}`,noMembers:`Chưa có thành viên nào.`,addedAt:`Đã thêm`,addMember:`Thêm thành viên`,add:`Thêm`,selectUser:`Chọn người dùng…`,memberAdded:`Đã thêm thành viên.`,memberAddFailed:`Không thể thêm thành viên.`,removeMember:`Xóa thành viên`,memberRemoved:`Đã xóa thành viên.`,memberRemoveFailed:`Không thể xóa thành viên.`,effectiveTitle:`Quyền truy cập thực tế`,effectiveDescription:`Chọn một tài khoản để xem quyền truy cập cuối cùng mà nó có được từ vai trò, nhóm và các quyền được cấp.`,accessLookupFailed:`Không tải được quyền truy cập thực tế.`,roleLabel:`Vai trò`,statusLabel:`Trạng thái`,memberOf:`Nhóm`,featuresLabel:`Quyền truy cập tính năng`,grantsLabel:`Quyền được cấp`,grantVia:`qua`},audit:{title:`Nhật ký kiểm tra bảo mật`,description:`Các lần đăng nhập, kiểm tra quyền và thay đổi quản trị gần đây trên phiên bản này.`,actionFilter:`Hành động`,actionPlaceholder:`ví dụ: auth.login`,resultFilter:`Kết quả`,resultSuccess:`Thành công`,resultDenied:`Bị từ chối`,resultFailure:`Thất bại`,limitFilter:`Giới hạn`,loadFailed:`Không tải được nhật ký kiểm tra.`,empty:`Chưa có sự kiện kiểm tra nào được ghi lại.`,actor:`Người thực hiện`,target:`Đối tượng`}},usageAnalytics:{eyebrow:`Quản trị`,title:`Mức sử dụng nhà cung cấp`,description:`Theo dõi các cuộc gọi API gửi đi và mức tiêu thụ mô hình trên các plugin đã bật trong phiên bản này.`,days:`{{count}} ngày`,refresh:`Làm mới mức sử dụng`,loadFailed:`Không thể tải mức sử dụng của nhà cung cấp.`,metrics:{calls:`Cuộc gọi`,tokens:`Token`},cards:{calls:`Cuộc gọi API`,callsDetail:`Trên {{count}} người dùng đang hoạt động`,tokens:`Token đã báo cáo`,tokensDetail:`Mức sử dụng được báo cáo trên {{count}} cuộc gọi`,success:`Tỷ lệ thành công`,successDetail:`{{count}} cuộc gọi thất bại`,latency:`Độ trễ trung bình`,latencyDetail:`Thời gian nhà cung cấp từ đầu đến cuối`},activity:{title:`Mức sử dụng theo thời gian`,callsDescription:`Yêu cầu gửi đi hàng ngày tới các plugin đã bật`,tokensDescription:`Tổng token hàng ngày được báo cáo bởi nhà cung cấp`,chartLabel:`Biểu đồ {{metric}} nhà cung cấp hàng ngày`},models:{title:`Mức sử dụng theo mô hình`,description:`Các mô hình có lượng truy cập cao nhất trong giai đoạn này.`,model:`Mô hình`,success:`Thành công`,latency:`Độ trễ`},providers:{title:`Lưu lượng plugin đã bật`},capabilities:{title:`Phân bổ khả năng`,characters:`{{count}} ký tự`,bytes:`{{count}} byte`,images:`{{count}} hình ảnh`,jobs:`{{count}} tác vụ video`,inputs:`{{count}} đầu vào`,reportedTokens:`{{count}} token đã báo cáo`},empty:{title:`Chưa có lệnh gọi nhà cung cấp`,description:`Các lệnh gọi sẽ hiển thị tại đây sau khi một plugin đã bật xử lý yêu cầu trò chuyện, Work, nhúng, hình ảnh, giọng nói, âm thanh hoặc video.`},privacyNote:`Mức sử dụng được đo trên máy chủ tại ranh giới plugin gửi đi. Libre WebUI lưu trữ nhà cung cấp, mô hình, thời gian, trạng thái và bộ đếm đã báo cáo—không bao gồm lời nhắc, phản hồi, điểm cuối, thông tin xác thực hoặc nội dung lỗi của nhà cung cấp. Tổng token chỉ bao gồm các lệnh gọi mà nhà cung cấp trả về siêu dữ liệu sử dụng.`,heatmap:{title:`Một năm hoạt động`,description:`Lượt gọi nhà cung cấp hằng ngày trong năm qua, tô màu theo mô hình được dùng nhiều nhất mỗi ngày.`,calls:`lượt gọi`,noCalls:`Không có lượt gọi`,other:`Mô hình khác`,less:`Ít`,more:`Nhiều`,yearTotal:`{{formatted}} lượt gọi trong năm qua`}},systemPage:{eyebrow:`Quản trị`,title:`Hệ thống`,description:`Giám sát máy và môi trường chạy lưu trữ phiên bản Libre WebUI này.`,updated:`Đã cập nhật {{date}}`,refresh:`Làm mới thông tin hệ thống`,loadFailed:`Không thể tải thông tin hệ thống.`,cards:{uptime:`Thời gian hoạt động máy chủ`,uptimeDetail:`Hoạt động từ {{date}}`,memory:`Bộ nhớ đã dùng`,memoryDetail:`{{used}} trên {{total}}`,freeSpace:`Không gian trống`,freeSpaceDetail:`{{label}} · {{total}} tổng`,containers:`Container đang chạy`,containersDetail:`{{total}} container được Docker nhận biết`,dockerUnavailable:`Docker không khả dụng`,unavailable:`Không khả dụng`},host:{title:`Máy chủ & môi trường chạy`,description:`Hệ điều hành, bộ xử lý và chi tiết tiến trình Libre WebUI.`,container:`Môi trường chạy container`,native:`Runtime gốc`,hostname:`Tên máy chủ`,operatingSystem:`Hệ điều hành`,processor:`Bộ xử lý`,logicalCpus:`CPU logic`,loadAverage:`Tải trung bình · 1 / 5 / 15 phút`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Tiến trình`,workingDirectory:`Thư mục làm việc`},memory:{title:`Bộ nhớ`,description:`Bộ nhớ hệ thống hiển thị trong runtime và mức sử dụng tiến trình ứng dụng.`,usedOf:`Đã dùng {{used}} trên {{total}}`,free:`{{value}} trống`,processRss:`RSS tiến trình`,heapUsed:`V8 heap đã dùng`,heapTotal:`Tổng V8 heap`,external:`Bộ nhớ ngoài`},storage:{title:`Lưu trữ`,description:`Dung lượng khả dụng cho hệ thống tệp runtime và dữ liệu ứng dụng cố định.`,used:`Đã dùng {{value}}`,free:`{{value}} trống`,empty:`Thông tin hệ thống tệp không có sẵn trong runtime này.`},docker:{title:`Docker`,description:`Trạng thái Docker Engine chỉ đọc và danh sách rút gọn các container.`,connected:`Đã kết nối`,unavailable:`Không khả dụng`,unavailableDetail:`Không thể chẩn đoán Docker Engine.`,socketStatus:`Socket cục bộ: {{status}}`,mounted:`đã gắn`,notMounted:`chưa gắn`,running:`Đang chạy`,stopped:`Đã dừng`,paused:`Đã tạm dừng`,total:`Tổng`,version:`Phiên bản`,host:`Máy chủ`,architecture:`Kiến trúc`,cpus:`CPU`,memory:`Bộ nhớ`,container:`Container`,image:`Image`,state:`Trạng thái`,created:`Đã tạo`,empty:`Docker đã được kết nối và hiện không có container nào được liệt kê.`},network:{title:`Mạng`,description:`Các giao diện, địa chỉ hiển thị trong thời gian chạy và bộ đếm lưu lượng Linux.`,internal:`nội bộ`,empty:`Không có giao diện mạng nào hiển thị với thời gian chạy của ứng dụng.`},securityNote:`Trang này chỉ dành cho quản trị viên. Máy chủ chỉ trả về tóm tắt hoạt động: nó không tiết lộ biến môi trường, thông tin xác thực, nhãn Docker, điểm gắn kết, lệnh container hoặc payload kiểm tra. Khi Libre WebUI chạy trong container, chi tiết CPU và bộ nhớ cấp máy chủ đến từ Docker Engine khi socket cục bộ của nó khả dụng; các giá trị khác mô tả thời gian chạy của ứng dụng.`,work:{title:`Work`,description:`Sandbox của mọi người dùng`,access:`Quyền truy cập`,accessAdmins:`Chỉ quản trị viên`,accessAllUsers:`Tất cả người dùng`,runtimeAvailable:`Khả dụng`,runtimeUnavailable:`Không khả dụng`,activeRuntimes:`Môi trường đang hoạt động`,pendingCleanups:`Dọn dẹp đang chờ`,orphans:`Container mồ côi`,owner:`Chủ sở hữu`,task:`Tác vụ`,state:`Trạng thái`,preview:`Xem trước`,terminals:`Terminal`,updated:`Đã cập nhật`,stateRunning:`Đang chạy`,stateStopped:`Đã dừng`,stateStarting:`Đang khởi động`,stateUnknown:`Không rõ`,noTasks:`Chưa có tác vụ Work nào.`}},chatHistory:{label:`Lịch sử cuộc trò chuyện`,jumpToTurn:`Chuyển đến lượt {{index}} / {{total}}`},chatMessage:{you:`Bạn`,assistant:`Trợ lý`,system:`Hệ thống`,conversationSummary:`Tóm tắt cuộc trò chuyện`,restoreCompacted:`Khôi phục các tin nhắn đã tóm tắt`,restoreFailed:`Không thể khôi phục các tin nhắn đã tóm tắt`,copy:`Sao chép`,copyMessage:`Sao chép tin nhắn`,copied:`Đã sao chép!`,regenerate:`Tạo lại`,regenerateResponse:`Tạo lại phản hồi`,edit:`Chỉnh sửa`,editSystemMessage:`Chỉnh sửa tin nhắn hệ thống`,saveChanges:`Lưu thay đổi`,cancelEditing:`Hủy chỉnh sửa`,saveAndSubmit:`Lưu & gửi`,goodResponse:`Phản hồi tốt`,badResponse:`Phản hồi kém`,delete:`Xóa`,deleteConfirm:`Xóa tin nhắn này?`,branch:`Nhánh`,speaking:`Đang nói...`,speakMessage:`Đọc tin nhắn`,stopSpeaking:`Dừng đọc`,showMore:`Hiển thị thêm`,showLess:`Hiển thị ít hơn`,thinking:`Đang suy nghĩ`,thoughtFor:`Đã suy nghĩ trong {{duration}}`,hiddenLines:`{{count}} dòng bị ẩn`,systemMessagePlaceholder:`Nhập tin nhắn hệ thống của bạn...`,fullSizeImage:`Hình ảnh kích thước đầy đủ`,startConversation:`Bắt đầu cuộc trò chuyện`,startConversationDescription:`Gửi tin nhắn để bắt đầu trò chuyện với trợ lý AI của bạn. Đặt câu hỏi, nhờ giúp đỡ về code, hoặc có một cuộc trò chuyện tự nhiên.`,scrollToBottom:`Cuộn xuống dưới`,newMessages:`Tin nhắn mới`},imageGallery:{title:`Thư viện hình ảnh`,noImages:`Chưa có hình ảnh nào`,noImagesHint:`Tạo hình ảnh đầu tiên của bạn bằng bảng điều khiển bên phải`,delete:`Xóa`,download:`Tải xuống`,deleteConfirm:`Bạn có chắc chắn muốn xóa hình ảnh này?`,deleteSuccess:`Đã xóa hình ảnh`,deleteFailed:`Không thể xóa hình ảnh`,downloadFailed:`Không thể tải xuống hình ảnh`,loadMore:`Tải thêm ({{current}} trong số {{total}})`,loadFailed:`Không thể tải thư viện`},imageGeneration:{title:`Tạo hình ảnh`,prompt:`Prompt`,promptPlaceholder:`Mô tả hình ảnh bạn muốn tạo...`,model:`Mô hình`,selectModel:`Chọn mô hình`,noModels:`Không có mô hình tạo hình ảnh nào khả dụng`,configurePlugin:`Cấu hình plugin hỗ trợ tạo hình ảnh`,size:`Kích thước`,quality:`Chất lượng`,style:`Phong cách`,generate:`Tạo`,generating:`Đang tạo...`,success:`Đã tạo hình ảnh thành công`,failed:`Không thể tạo hình ảnh`,enterPrompt:`Vui lòng nhập prompt`,promptTooLong:`Prompt vượt quá độ dài tối đa {{max}} ký tự`},mediaGeneration:{title:`Tạo phương tiện`,description:`Tạo video, âm thanh, nhạc hoặc giọng nói với nhà cung cấp phương tiện đã kích hoạt.`,image:`Hình ảnh`,video:`Video`,audio:`Âm thanh`,sound:`Âm thanh`,speech:`Giọng nói`,model:`Mô hình`,voice:`Giọng nói hoặc ID giọng nói`,cloneVoice:`Sao chép giọng tham chiếu`,cloneVoiceDescription:`Tạo lời nói này dựa trên bản ghi tham chiếu thay vì giọng đặt sẵn.`,referenceAudio:`Âm thanh tham chiếu`,referenceTranscript:`Bản chép lời tham chiếu chính xác`,referenceTranscriptPlaceholder:`Nhập chính xác nội dung được nói trong bản ghi tham chiếu…`,referenceAudioTooLarge:`Âm thanh tham chiếu phải có dung lượng {{max}} trở xuống.`,cloneConsent:`Chỉ sao chép giọng khi bạn có sự cho phép của người nói. Bản ghi được gửi đến nhà cung cấp đã chọn cho lần tạo này và Libre WebUI không lưu bản ghi.`,saveVoiceProfile:`Lưu làm giọng có thể tái sử dụng`,saveVoiceProfileDescription:`Lưu an toàn bản ghi tham chiếu và bản chép lời này. Libre WebUI gửi chúng đến nhà cung cấp đã chọn cho mỗi lô Giọng nói sử dụng giọng này.`,voiceProfileName:`Tên giọng đã lưu`,voiceProfileNamePlaceholder:`Ví dụ: Giọng của tôi`,voiceStorageConsent:`Tôi xác nhận đã được người nói cho phép sao chép và lưu giọng này. Bản tham chiếu sẽ được lưu cho đến khi tôi xóa.`,resolution:`Độ phân giải`,aspectRatio:`Tỷ lệ khung hình`,duration:`Thời lượng`,providerDefault:`Mặc định của nhà cung cấp`,generateAudio:`Tạo âm thanh cùng với video khi được hỗ trợ`,prompt:`Lời nhắc`,text:`Văn bản để đọc`,videoPlaceholder:`Mô tả cảnh, chuyển động, góc máy và ánh sáng...`,audioPlaceholder:`Nhập văn bản bạn muốn giọng nói đọc...`,soundPlaceholder:`Mô tả âm thanh, nhạc, bầu không khí hoặc phản hồi bằng giọng nói mà bạn muốn...`,generate:`Tạo`,generating:`Đang tạo… việc này có thể mất vài phút`,success:`Đã tạo phương tiện và lưu vào Imagine`,successWithSavedVoice:`Đã tạo nội dung và “{{name}}” hiện có trong cài đặt Giọng nói`,failed:`Không thể tạo phương tiện`,loadFailed:`Không thể tải nhà cung cấp phương tiện`,noModels:`Không có mô hình {{kind}} nào khả dụng. Kích hoạt nhà cung cấp tương thích và lưu thông tin xác thực của nó trước.`},mediaGallery:{itemCount:`{{count}} mục`,empty:`Chưa có phương tiện nào được tạo`,emptyHint:`Tạo hình ảnh, video hoặc đoạn giọng nói và nó sẽ hiển thị tại đây.`,filters:{all:`Tất cả`,image:`Hình ảnh`,video:`Video`,audio:`Âm thanh`}},errorBoundary:{title:`Đã xảy ra lỗi`,description:`Chúng tôi gặp phải lỗi không mong muốn. Vui lòng thử làm mới trang.`,tryAgain:`Làm mới trang`,goHome:`Về trang chủ`,errorDetails:`Chi tiết lỗi (Phát triển)`},documents:{title:`Tài liệu`,upload:`Tải lên tài liệu`,uploading:`Đang tải lên...`,noDocuments:`Chưa có tài liệu nào được tải lên`,uploadHint:`Tải lên tài liệu để sử dụng trong cuộc trò chuyện của bạn`,delete:`Xóa`,deleteConfirm:`Bạn có chắc chắn muốn xóa tài liệu này?`,deleteSuccess:`Đã xóa tài liệu`,deleteFailed:`Không thể xóa tài liệu`,uploadSuccess:`Đã tải lên tài liệu thành công`,uploadFailed:`Không thể tải lên tài liệu`,types:`Hỗ trợ: PDF, TXT, MD, DOCX`,unsupportedFileType:`Chỉ hỗ trợ file PDF và TXT`,fileSizeTooLarge:`Kích thước file phải nhỏ hơn 10MB`,uploadSuccessWithName:`Đã tải lên tài liệu "{{name}}" thành công`,removeSuccess:`Đã xóa tài liệu thành công`,removeFailed:`Không thể xóa tài liệu`,removeError:`Đã xảy ra lỗi khi xóa tài liệu`,clickToUpload:`Nhấp để tải lên`,orDragAndDrop:`hoặc kéo và thả`,fileTypesAndSize:`File PDF hoặc TXT tối đa 10MB`,uploadedDocuments:`Tài liệu đã tải lên`,removeDocument:`Xóa tài liệu`},ttsButton:{speak:`Đọc`,stop:`Dừng`,speaking:`Đang đọc...`,generateFailed:`Không thể tạo giọng nói`,playbackFailed:`Phát lại âm thanh thất bại`,stopSpeaking:`Dừng đọc`,preparingSpeech:`Đang chuẩn bị giọng nói...`,generatingSpeech:`Đang tạo giọng nói...`,bufferingSpeech:`Đang tải giọng nói...`,enableAudio:`Bật âm thanh và đọc to`,enableAudioShort:`Bật âm thanh`,readAloud:`Đọc to`},artifacts:{title:`Artifact`,code:`Code`,preview:`Xem trước`,copy:`Sao chép code`,copied:`Đã sao chép!`,download:`Tải xuống`,expand:`Mở rộng`,collapse:`Thu gọn`,openInNewTab:`Mở trong tab mới`,invalidSvg:`Nội dung SVG không hợp lệ`,invalidJson:`Nội dung JSON không hợp lệ`,previewMode:`Chế độ xem trước`,codeMode:`Chế độ code`,copyContent:`Sao chép nội dung`,openInPanel:`Mở trong bảng điều khiển`,openInNewWindow:`Mở trong cửa sổ mới`,created:`Đã tạo`,closePanelEsc:`Đóng bảng điều khiển (Esc)`,copyButton:`Sao chép`,open:`Mở`,dragEdgeToResize:`Kéo cạnh để thay đổi kích thước`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Phiên bản {{current}} / {{total}}`,previousVersion:`Phiên bản trước`,nextVersion:`Phiên bản sau`},personaImportExport:{title:`Nhập & Xuất Personas`,description:`Xuất personas của bạn để chia sẻ hoặc nhập personas từ người khác`,exportPersonas:`Xuất Personas`,importPersonas:`Nhập Personas`,noPersonasToExport:`Không có personas để xuất`,personasAvailable:`{{count}} persona khả dụng`,personasAvailable_plural:`{{count}} personas khả dụng`,exportAll:`Xuất tất cả`,uploadJsonFile:`Tải lên file JSON`,pasteJsonLabel:`Dán dữ liệu JSON`,pasteJsonPlaceholder:`Dán dữ liệu JSON persona vào đây...`,importing:`Đang nhập...`,importButton:`Nhập Persona(s)`,expectedFormat:`Định dạng JSON mong đợi:`,exportSuccess:`Đã xuất persona "{{name}}" thành công`,exportFailed:`Không thể xuất persona`,exportAllSuccess:`Đã xuất tất cả {{count}} personas thành công`,exportAllFailed:`Không thể xuất personas`,pasteJsonData:`Vui lòng dán dữ liệu JSON persona`,importMultipleSuccess:`Đã nhập thành công {{count}} personas`,importMultipleFailed:`Không thể nhập {{count}} personas`,importNoneFailed:`Không thể nhập bất kỳ personas nào`,importSuccess:`Đã nhập persona thành công`,importFailed:`Không thể nhập persona`},generationStats:{details:`Chi tiết`,promptTokens:`Token prompt:`,generatedTokens:`Token đã tạo:`,totalTokens:`Tổng token:`,speed:`Tốc độ:`,promptEval:`Đánh giá prompt:`,generation:`Tạo:`,modelLoad:`Tải mô hình:`,totalTime:`Tổng thời gian:`,generatedAt:`Tạo lúc:`},userMenu:{loggedOut:`Đăng xuất thành công`,pictureUpdated:`Ảnh đại diện đã cập nhật`,failedUpdateAvatar:`Cập nhật ảnh đại diện thất bại`,failedUpdatePicture:`Cập nhật ảnh đại diện thất bại`,noEmail:`Chưa cung cấp email`,changePicture:`Đổi ảnh`,settings:`Cài đặt`,userManagement:`Quản lý người dùng`,signOut:`Đăng xuất`,changeProfilePicture:`Đổi ảnh đại diện`},pluginManager:{title:`Quản lý plugin`,upload:`Tải lên`,addJson:`Thêm JSON`,browseHF:`Duyệt HF Hub`,confirmDelete:`Bạn có chắc chắn muốn xóa plugin này?`,uploading:`Đang tải plugin lên...`,pasteJson:`Dán JSON plugin vào đây...`,installPlugin:`Cài đặt plugin`,loading:`Đang tải plugin...`,noPlugins:`Chưa cài đặt plugin nào`,noPluginsDescription:`Tải lên tệp plugin hoặc thêm plugin từ JSON để bắt đầu.`,active:`Hoạt động`,id:`ID`,endpoint:`Endpoint`,activate:`Kích hoạt`,deactivate:`Vô hiệu hóa`,activePlugin:`Plugin đang hoạt động`,activePluginDescription:`Tất cả yêu cầu chat sẽ được chuyển qua plugin này`,variables:{title:`Biến`,save:`Lưu`,saving:`Đang lưu...`,saved:`Đã lưu biến`,saveFailed:`Không thể lưu biến`,resetDefaults:`Đặt lại mặc định`,reset:`Đã đặt lại biến`,resetFailed:`Không thể đặt lại biến`,sensitiveSet:`Giá trị đã được đặt (nhập giá trị mới để thay đổi)`,showValue:`Hiển thị giá trị {{label}}`,hideValue:`Ẩn giá trị {{label}}`,connection:`Kết nối`,advanced:`Tham số nâng cao`,inherited:`Sử dụng mặc định của nhà cung cấp`,inheritedValue:`Sử dụng mặc định của nhà cung cấp ({{value}})`,enabled:`Đã bật`,disabled:`Đã tắt`,required:`Yêu cầu một giá trị`,fullApiEndpoint:`URL điểm cuối API đầy đủ`,endpointHelp:`Nhập URL yêu cầu hoàn chỉnh, bao gồm đường dẫn hoạt động của nó (ví dụ: /v1/chat/completions), không chỉ URL cơ sở của nhà cung cấp.`,invalidUrl:`Nhập URL điểm cuối API đầy đủ hợp lệ, ví dụ https://provider.example/v1/chat/completions`,insecureUrl:`Các điểm cuối API phải sử dụng HTTP hoặc HTTPS.`,httpWarning:`HTTP không mã hóa thông tin xác thực hoặc lưu lượng truy cập. Chỉ sử dụng trên mạng đáng tin cậy.`,invalidBaseUrl:`URL cơ sở không được chứa chuỗi truy vấn hoặc phân đoạn.`,invalidApiPath:`Phải bắt đầu bằng / và không chứa URL, truy vấn, phân đoạn hoặc phân đoạn ..`,tooLong:`Giá trị quá dài`}},huggingface:{title:`Trình duyệt mô hình HuggingFace`,subtitle:`Duyệt và chọn mô hình từ Hub`,searchPlaceholder:`Tìm mô hình...`,filters:`Bộ lọc`,task:`Nhiệm vụ`,sortBy:`Sắp xếp theo`,noModels:`Không tìm thấy mô hình`,adjustSearch:`Thử điều chỉnh tìm kiếm hoặc bộ lọc`,gated:`Hạn chế`,selected:`Đã chọn`,select:`Chọn`,refresh:`Làm mới`,modelsFound:`mô hình được tìm thấy`},demoMode:{title:`Chế độ demo`,github:`GitHub`},libreClaw:{title:`Tác nhân`,subtitle:`Tác nhân cục bộ chạy, phê duyệt, lịch trình, bộ nhớ, công cụ và cách sử dụng.`,dashboard:`Bảng điều khiển`,connection:{disconnectedTitle:`Daemon Libre Claw chưa được kết nối`,disconnectedDescription:`Bắt đầu cục bộ với <command>libre-claw start</command> hoặc đặt <env>LIBRE_CLAW_BASE_URL</env> trong môi trường phụ trợ.`},status:{connected:`Đã kết nối`,disconnected:`Đã ngắt kết nối`,activeRuns:`{{count}} hoạt động`,activeRuns_plural:`{{count}} hoạt động`},states:{queued:`Đã xếp hàng`,running:`Đang chạy`,blocked:`Bị chặn`,done:`Xong`,failed:`thất bại`,cancelled:`Đã hủy`},startRun:{title:`Bắt đầu phiên chạy tác tử`,placeholder:`Yêu cầu Libre Claw kiểm tra kho lưu trữ, sửa lỗi, chạy đánh giá, lên lịch báo cáo...`,chatRun:`Chạy trò chuyện`,goalMode:`Chế độ mục tiêu`,providerOverride:`Ghi đè nhà cung cấp`,modelOverride:`Ghi đè mô hình`,run:`Chạy`},modelRoute:{title:`Tuyến đường mẫu`,providerPlaceholder:`nhà cung cấp`,modelPlaceholder:`người mẫu`,persistGlobal:`Kiên trì với cấu hình chung Libre Claw`,saveModel:`Lưu mô hình`,theme:`Chủ đề Libre Claw`,saveTheme:`Lưu chủ đề`},runs:{title:`Phiên chạy`,empty:`Chưa có phiên chạy Libre Claw nào.`},timeline:{title:`Dòng thời gian phiên chạy`,empty:`Chọn một lần chạy để kiểm tra các sự kiện của nó.`,streaming:`Đang truyền phát...`,assistantResponse:`Phản hồi của trợ lý`,resultOk:`được`,resultError:`lỗi`,labels:{userMessage:`Tin nhắn người dùng`,toolCall:`Cuộc gọi công cụ`,toolResult:`Kết quả công cụ`,approvalRequest:`Yêu cầu phê duyệt`,approvalResponse:`Phản hồi phê duyệt`,runStarted:`Phiên chạy đã bắt đầu`,runFinished:`Phiên chạy đã hoàn tất`,usage:`Cách sử dụng`,error:`Lỗi`}},approvals:{needed:`Cần phê duyệt`,allowOnce:`Cho phép một lần`,alwaysAllowTool:`Luôn cho phép công cụ`,deny:`Từ chối`,toolApprovalRequested:`Đã yêu cầu phê duyệt công cụ`},automations:{title:`Tự động hóa`,namePlaceholder:`Tên`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Lời nhắc tự động hóa`,create:`Tạo`,empty:`Không có tự động hóa Libre Claw theo lịch trình.`,runNow:`Chạy ngay`,pause:`Tạm dừng`,resume:`Tiếp tục`,routes:{report:`Báo cáo`,telegram:`Telegram`},status:{active:`Đang hoạt động`,paused:`Đã tạm dừng`}},usageFallback:{title:`Cách sử dụng và dự phòng`,usage:`Cách sử dụng`,fallbackRoute:`Tuyến đường dự phòng`,noUsage:`Chưa có hồ sơ sử dụng.`},metrics:{provider:`nhà cung cấp`,model:`người mẫu`,input:`đầu vào`,output:`đầu ra`,cached:`Đã lưu vào bộ nhớ đệm`,reasoning:`Lý luận`,cost:`Chi phí`,tool:`Công cụ`,resolution:`Độ phân giải`,state:`Trạng thái`,stopReason:`Lý do dừng`,tokens:`{{formatted}} mã thông báo`,tokens_plural:`{{formatted}} mã thông báo`},fallbacks:{tool:`công cụ`,unknown:`không rõ`,resolved:`đã giải quyết`,unknownError:`Lỗi không xác định`},toasts:{loadStatusFailed:`Không thể tải trạng thái Libre Claw`,enterTask:`Nhập nhiệm vụ cho Libre Claw`,runStarted:`Phiên chạy Libre Claw đã bắt đầu`,startRunFailed:`Không thể bắt đầu phiên chạy Libre Claw`,runCancelled:`Phiên chạy đã bị hủy`,cancelRunFailed:`Không thể hủy phiên chạy`,approved:`Đã được phê duyệt`,denied:`Bị từ chối`,resolvePermissionFailed:`Không thể giải quyết quyền`,providerModelRequired:`Nhà cung cấp và mô hình là bắt buộc`,modelUpdated:`Đã cập nhật mô hình Libre Claw`,updateModelFailed:`Không thể cập nhật mô hình`,themeUpdated:`Đã cập nhật chủ đề Libre Claw`,updateThemeFailed:`Không thể cập nhật chủ đề`,automationRequired:`Bắt buộc phải có tên, lịch trình và lời nhắc tự động hóa`,automationCreated:`Đã tạo tự động hóa`,createAutomationFailed:`Không thể tạo tự động hóa`,automationUpdated:`Đã cập nhật tự động hóa`,updateAutomationFailed:`Không thể cập nhật tự động hóa`}},work:{title:`Công việc`,subtitle:`Không gian làm việc mô hình biệt lập`,tasks:{title:`Tác vụ công việc`,subtitle:`Không gian làm việc cục bộ lâu dài`,new:`Tác vụ mới`,emptyTitle:`Chưa có tác vụ công việc`,empty:`Tác vụ công việc của bạn sẽ xuất hiện ở đây sau khi bạn gửi tin nhắn đầu tiên.`,untitled:`Tác vụ chưa đặt tên`,actions:`Thao tác tác vụ`,delete:`Xóa tác vụ`,deleteNamed:`Xóa {{title}}`,deleteConfirm:`Xóa vĩnh viễn “{{title}}” và không gian làm việc của tác vụ này?`,close:`Đóng tác vụ công việc`,open:`Mở tác vụ công việc`,rename:`Tên tác vụ`,loading:`Đang tải tác vụ…`,notFound:`Tác vụ công việc này không khả dụng`,back:`Bắt đầu tác vụ mới`,status:`Trạng thái: {{status}}`},landing:{title:`Bắt đầu tác vụ công việc mới`,description:`Cung cấp cho mô hình cục bộ hoặc mô hình của nhà cung cấp đã cấu hình một không gian làm việc lâu dài và biệt lập. Mô hình có thể kiểm tra tệp, chạy công cụ và tiếp tục từ vị trí cũ khi bạn quay lại.`,isolated:`Biệt lập`,isolatedBody:`Mỗi tác vụ có vùng chứa và tệp riêng.`,durable:`Lâu dài`,durableBody:`Quay lại cuộc trò chuyện và không gian làm việc sau.`,controlled:`Được kiểm soát`,controlledBody:`Môi trường chạy và tệp tác vụ được biệt lập khỏi máy chủ.`},composer:{placeholder:`Mô tả nội dung bạn muốn tạo hoặc thay đổi…`,model:`Mô hình công việc`,noModels:`Không có mô hình tương thích với chế độ Công việc`,cancel:`Dừng`,send:`Chạy`,hint:`Mỗi tác vụ lưu tệp và lịch sử riêng. Hãy xem lại đầu ra của mô hình trước khi sử dụng.`,remoteTitle:`Nhà cung cấp từ xa`,remoteHint:`Cuộc trò chuyện và đầu ra công cụ được gửi đến dịch vụ đã cấu hình. Một lượt chạy tự động có thể gọi nhà cung cấp nhiều lần và phát sinh chi phí. Tệp trong không gian làm việc vẫn ở cục bộ trừ khi công cụ trả về nội dung của tệp.`,remoteDismiss:`Đóng`,remoteDismissLabel:`Đóng thông báo về nhà cung cấp từ xa`,remoteDismissFailed:`Không thể lưu tùy chọn nhà cung cấp từ xa.`,noModelSelected:`Chưa chọn mô hình tương thích với chế độ Công việc.`},conversation:{ready:`Không gian làm việc đã sẵn sàng`,empty:`Tiếp tục tác vụ bên dưới. Cuộc trò chuyện và các tệp vẫn được gắn với không gian làm việc này.`,loadOlder:`Tải tin nhắn cũ hơn`},status:{preparing:`Đang chuẩn bị không gian làm việc biệt lập…`,running:`Đang làm việc trong không gian cục bộ…`},statusLabels:{idle:`Đang chờ`,thinking:`Đang suy nghĩ`,complete:`Hoàn tất`,needsInput:`Cần nhập liệu`,error:`Lỗi`},live:{connecting:`Đang kết nối với cập nhật trực tiếp…`,reconnecting:`Đang kết nối lại với cập nhật trực tiếp…`,unavailable:`Cập nhật trực tiếp không khả dụng`,newActivity:`Hoạt động mới`,skillsLoaded:`Kỹ năng không gian làm việc · {{count}}`},runtime:{unavailable:`Môi trường chạy không khả dụng`,ready:`Môi trường chạy đã sẵn sàng`,readyOllama:`Docker đã sẵn sàng`,readyPlugin:`Docker + plugin đã sẵn sàng`,readyHybrid:`Docker + mô hình đã sẵn sàng`,reason:`Cần có Docker và nhà cung cấp mô hình Ollama hoặc plugin khả dụng.`},workspace:{label:`Chế độ xem không gian làm việc`,files:`Tệp`,activity:`Hoạt động`,preview:`Xem trước`,resize:`Đổi kích thước cuộc trò chuyện và không gian làm việc`,resizeHint:`Kéo để đổi kích thước. Dùng phím mũi tên để điều chỉnh chính xác. Nhấp đúp hoặc nhấn Enter để đặt lại.`,splitSize:`Cuộc trò chuyện {{conversation}}%, không gian làm việc {{workspace}}%`,terminal:`Terminal`,git:`Git`},files:{discard:`Bỏ các thay đổi tệp chưa lưu?`,leaveWithDraft:`Rời khỏi tệp này? Nội dung chỉnh sửa chưa lưu sẽ được giữ dưới dạng bản nháp trong trình duyệt.`,up:`Thư mục mẹ`,back:`Quay lại tệp`,empty:`Thư mục này chưa có tệp.`,select:`Chọn một tệp để kiểm tra và chỉnh sửa.`,editorLabel:`Trình sửa tệp: {{path}}`,format:`Định dạng`,formatted:`Đã định dạng mã.`,formatFailed:`Không thể định dạng tệp này.`,formatShortcut:`Định dạng (Shift+Alt+F)`,formatTooLarge:`Chỉ có thể định dạng tệp dưới 100.000 ký tự và 4.000 dòng.`,formatUnsupported:`Không hỗ trợ định dạng loại tệp này.`,saveShortcut:`Lưu (⌘/Ctrl+S)`,highlightPaused:`Tính năng tô sáng trực tiếp bị tạm dừng với tệp lớn để duy trì tốc độ chỉnh sửa.`,plainTextLarge:`Văn bản thuần · tệp lớn`,changes:`Thay đổi`,changesSince:`Những gì đã thay đổi kể từ lượt trước`,diffLabel:`Thay đổi kể từ lượt trước: {{path}}`,diffFolded:`{{count}} dòng không thay đổi`},activity:{empty:`Lệnh, thao tác tệp và kết quả công cụ sẽ xuất hiện ở đây.`,toolActivity:`Hoạt động công cụ`,details:`Chi tiết`,kinds:{message:`Tin nhắn`,toolCall:`Lệnh gọi công cụ`,toolResult:`Kết quả công cụ`,error:`Lỗi`}},preview:{command:`Lệnh khởi động không bắt buộc`,start:`Bắt đầu xem trước`,stop:`Dừng xem trước`,open:`Mở`,starting:`Đang bắt đầu xem trước…`,frameTitle:`Xem trước không gian làm việc`,failed:`Không thể bắt đầu bản xem trước. Hãy kiểm tra Hoạt động rồi thử một lệnh khác.`,empty:`Khởi động ứng dụng trong không gian làm việc này để kiểm tra tại đây.`},mobile:{surface:`Chế độ xem tác vụ`,conversation:`Cuộc trò chuyện`,workspace:`Không gian làm việc`},toasts:{runFailed:`Không thể bắt đầu tác vụ công việc.`,updateFailed:`Không thể cập nhật tác vụ này.`,renameFailed:`Không thể đổi tên tác vụ này.`,cancelled:`Đã dừng lượt chạy công việc.`,cancelFailed:`Không thể dừng lượt chạy công việc.`,deleteFailed:`Không thể xóa tác vụ công việc này.`,saveFailed:`Không thể lưu tệp này.`,saved:`Đã lưu tệp.`,previewFailed:`Không thể bắt đầu bản xem trước.`,previewStopFailed:`Không thể dừng bản xem trước.`},terminal:{connecting:`Đang mở shell trong hộp cát…`,closed:`Phiên terminal đã kết thúc.`,failed:`Không thể bắt đầu phiên terminal.`,reconnect:`Kết nối lại`,unavailable:`Terminal tương tác không khả dụng trong bản triển khai này.`,blockedByRun:`Mô hình đang dùng vùng chứa này. Terminal sẽ mở khi lượt kết thúc.`,taskRunning:`Lượt của mô hình đang chạy`},policy:{label:`Chính sách runtime`,default:`Mặc định (giới hạn toàn cục)`},git:{actionFailed:`Hành động Git thất bại.`,blockedByPreview:`Dừng bản xem trước trước khi thay đổi trạng thái Git.`,blockedByRun:`Hành động ghi Git sẽ mở khóa khi lượt của mô hình kết thúc.`,branchCreated:`Đã tạo {{name}}.`,branchSwitched:`Đã chuyển sang {{name}}.`,clean:`Cây làm việc sạch.`,commit:`Commit các thay đổi đã stage`,commitMessage:`Thông điệp commit`,committed:`Đã tạo commit.`,detached:`HEAD tách rời`,diff:`Xem trước diff`,diffFailed:`Không thể tải diff này.`,history:`Lịch sử cục bộ`,initialize:`Khởi tạo Git`,initializeDescription:`Tạo kho cục bộ cho trạng thái, diff, nhánh và commit. Không kết nối thông tin xác thực từ xa.`,initialized:`Đã khởi tạo kho Git.`,loadFailed:`Không thể tải trạng thái Git.`,localOnly:`Chỉ Git cục bộ. Push, pull và pull request cần một trung gian thông tin xác thực đáng tin cậy riêng.`,newBranch:`Nhánh cục bộ mới`,noCommits:`Chưa có commit.`,noDiff:`Chưa có diff văn bản. Tệp chưa theo dõi sẽ hiện sau khi stage.`,notInitialized:`Git chưa được khởi tạo`,selectChange:`Chọn một tệp đã thay đổi để xem diff.`,selectPath:`Chọn {{path}}`,stageAll:`Stage tất cả`,stageSelected:`Stage {{count}}`,staged:`Đã stage thay đổi.`,switchBranch:`Chuyển nhánh cục bộ`,changes:`Thay đổi`,createBranch:`Tạo`,filterFiles:`Lọc các tệp đã thay đổi`,noFilterMatches:`Không có tệp thay đổi nào khớp với bộ lọc này.`,allChanges:`Tất cả thay đổi`,diffTruncated:`Diff này đã bị cắt bớt.`,binaryFile:`Tệp nhị phân, không có diff văn bản.`},hostWorkspace:{hint:`Để trống cho không gian làm việc cô lập, hoặc trỏ tác vụ tới một thư mục trên máy này.`,label:`Thư mục không gian làm việc (tùy chọn)`,warning:`Tác vụ có thể đọc và ghi thư mục này trực tiếp. Để trống để dùng không gian cô lập.`}},personaBackground:{label:`Hình nền`,uploadBackgroundImage:`Tải lên hình nền`,dragAndDrop:`Kéo và thả hình ảnh hoặc nhấp để duyệt`,chooseImage:`Chọn hình ảnh`,uploading:`Đang tải lên...`,enterImageUrl:`Hoặc nhập URL hình ảnh`,supportedFormats:`Hỗ trợ: JPG, PNG, GIF, WebP (tối đa 5MB). Hình ảnh ngang rộng hoạt động tốt nhất.`,customBackground:`Hình nền tùy chỉnh`,clickToChange:`Nhấp để thay đổi hoặc xóa`,removed:`Đã xóa hình nền`,uploaded:`Tải lên hình nền thành công`,invalidFile:`Vui lòng chọn tệp hình ảnh hợp lệ`,fileTooLarge:`Kích thước hình nền phải nhỏ hơn 5MB`,readFailed:`Không thể đọc tệp hình ảnh`,uploadFailed:`Không thể tải lên hình nền`},modelSelector:{searchInstalled:`Tìm kiếm mô hình đã cài...`,searchOllama:`Tìm trong thư viện Ollama...`,searchHuggingFace:`Tìm trên HuggingFace...`,selectModel:`Chọn mô hình`,personas:`Nhân vật`,ollamaModels:`Mô hình Ollama`,pluginModels:`Mô hình plugin`,actions:`Hành động`,installed:`Đã cài`,use:`Dùng`,pull:`Tải`,pullRestricted:`Việc cài đặt mô hình trên phiên bản này chỉ dành cho quản trị viên.`,adminOnlyPull:`Chỉ quản trị viên`,legacyProvider:`nhà cung cấp chưa được ghi`,providerNotRecorded:`Nhà cung cấp chưa được ghi`,providerUnavailable:`nhà cung cấp không khả dụng`,reselectProvider:`chọn lại nhà cung cấp để ghim mô hình này`,unavailable:`không khả dụng`,unavailableSelections:`Lựa chọn không khả dụng`,agentModels:`Tác nhân`},whatsNew:{title:`Có gì mới`,releaseNotes:`Ghi chú phát hành`,cta:`Được rồi, bắt đầu thôi`},notes:{title:`Ghi chú`,new:`Ghi chú mới`,untitled:`Không có tiêu đề`,empty:`Chưa có ghi chú nào`,selectOrCreate:`Chọn một ghi chú hoặc tạo mới`,contentPlaceholder:`Viết bằng Markdown…`,saved:`Đã lưu`,saveFailed:`Không thể lưu ghi chú`,createFailed:`Không thể tạo ghi chú`,deleteConfirm:`Xóa ghi chú này?`,deleteFailed:`Không thể xóa ghi chú`},home:{active:`đang hoạt động`,continue:`Tiếp tục`,start:`Bắt đầu`,explore:`Khám phá`},palette:{empty:`Không có kết quả.`,placeholder:`Tìm chat, Work, hành động…`,toggleTheme:`Đổi giao diện`,actions:`Hành động`,chats:`Cuộc trò chuyện`,search:`Tìm kiếm`,settings:`Cài đặt`,work:`Công việc`},tabs:{actions:`Hành động thẻ`,close:`Đóng thẻ`,closeAll:`Đóng tất cả thẻ`,closeOthers:`Đóng các thẻ khác`,closeRight:`Đóng các thẻ bên phải`,home:`Trang chủ`,label:`Thẻ đang mở`,new:`Thẻ mới`,newWork:`Work mới`,chat:`Trò chuyện`,newChat:`Cuộc trò chuyện mới`,work:`Công việc`}};export{e as default};