浏览代码

Merge pull request #16810 from open-webui/dev

0.6.24
Tim Jaeryang Baek 1 月之前
父节点
当前提交
2777bab148

+ 13 - 0
CHANGELOG.md

@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.6.24] - 2025-08-21
+
+### Added
+
+- ♿ **High Contrast Mode in Chat Messages**: Implemented enhanced High Contrast Mode support for chat messages, making text and important details easier to read and improving accessibility for users with visual preferences or requirements.
+- 🌎 **Localization & Internationalization Improvements**: Enhanced and expanded translations for a more natural and professional user experience for speakers of these languages across the entire interface.
+
+### Fixed
+
+- 🖼️ **ComfyUI Image Generation Restored**: Fixed a critical bug where ComfyUI-based image generation was not functioning, ensuring users can once again effortlessly create and interact with AI-generated visuals in their workflows.
+- 🛠️ **Tool Server Loading and Visibility Restored**: Resolved an issue where connected tool servers were not loading or visible, restoring seamless integration and uninterrupted access to all external and custom tools directly within the platform.
+- 🛡️ **Redis User Session Reliability**: Fixed a problem affecting the saving of user sessions in Redis, ensuring reliable login sessions, stable authentication, and secure multi-user environments.
+
 ## [0.6.23] - 2025-08-21
 
 ### Added

+ 5 - 2
backend/open_webui/routers/images.py

@@ -487,10 +487,13 @@ async def image_generations(
     # image model other than gpt-image-1, which is warned about on settings save
 
     size = "512x512"
-    if "x" in request.app.state.config.IMAGE_SIZE:
+    if (
+        request.app.state.config.IMAGE_SIZE
+        and "x" in request.app.state.config.IMAGE_SIZE
+    ):
         size = request.app.state.config.IMAGE_SIZE
 
-    if "x" in form_data.size:
+    if form_data.size and "x" in form_data.size:
         size = form_data.size
 
     width, height = tuple(map(int, size.split("x")))

+ 4 - 2
backend/open_webui/socket/main.py

@@ -266,7 +266,9 @@ async def connect(sid, environ, auth):
             user = Users.get_user_by_id(data["id"])
 
         if user:
-            SESSION_POOL[sid] = user.model_dump()
+            SESSION_POOL[sid] = user.model_dump(
+                exclude=["date_of_birth", "bio", "gender"]
+            )
             if user.id in USER_POOL:
                 USER_POOL[user.id] = USER_POOL[user.id] + [sid]
             else:
@@ -288,7 +290,7 @@ async def user_join(sid, data):
     if not user:
         return
 
-    SESSION_POOL[sid] = user.model_dump()
+    SESSION_POOL[sid] = user.model_dump(exclude=["date_of_birth", "bio", "gender"])
     if user.id in USER_POOL:
         USER_POOL[user.id] = USER_POOL[user.id] + [sid]
     else:

+ 6 - 3
backend/open_webui/utils/middleware.py

@@ -740,9 +740,12 @@ async def process_chat_payload(request, form_data, user, metadata, model):
 
     system_message = get_system_message(form_data.get("messages", []))
     if system_message:
-        form_data = apply_system_prompt_to_body(
-            system_message.get("content"), form_data, metadata, user
-        )
+        try:
+            form_data = apply_system_prompt_to_body(
+                system_message.get("content"), form_data, metadata, user
+            )
+        except:
+            pass
 
     event_emitter = get_event_emitter(metadata)
     event_call = get_event_call(metadata)

+ 3 - 3
backend/open_webui/utils/tools.py

@@ -489,14 +489,14 @@ async def get_tool_servers(request: Request):
     if request.app.state.redis is not None:
         try:
             tool_servers = json.loads(await request.app.state.redis.get("tool_servers"))
+            request.app.state.TOOL_SERVERS = tool_servers
         except Exception as e:
             log.error(f"Error fetching tool_servers from Redis: {e}")
 
     if not tool_servers:
-        await set_tool_servers(request)
+        tool_servers = await set_tool_servers(request)
 
-    request.app.state.TOOL_SERVERS = tool_servers
-    return request.app.state.TOOL_SERVERS
+    return tool_servers
 
 
 async def get_tool_server_data(token: str, url: str) -> Dict[str, Any]:

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
 	"name": "open-webui",
-	"version": "0.6.23",
+	"version": "0.6.24",
 	"lockfileVersion": 3,
 	"requires": true,
 	"packages": {
 		"": {
 			"name": "open-webui",
-			"version": "0.6.23",
+			"version": "0.6.24",
 			"dependencies": {
 				"@azure/msal-browser": "^4.5.0",
 				"@codemirror/lang-javascript": "^6.2.2",

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 	"name": "open-webui",
-	"version": "0.6.23",
+	"version": "0.6.24",
 	"private": true,
 	"scripts": {
 		"dev": "npm run pyodide:fetch && vite dev --host",

+ 4 - 1
src/lib/components/chat/Artifacts.svelte

@@ -204,7 +204,10 @@
 	});
 </script>
 
-<div class=" w-full h-full relative flex flex-col bg-gray-50 dark:bg-gray-850">
+<div
+	class=" w-full h-full relative flex flex-col bg-gray-50 dark:bg-gray-850"
+	id="artifacts-container"
+>
 	<div class="w-full h-full flex flex-col flex-1 relative">
 		{#if contents.length > 0}
 			<div

+ 4 - 1
src/lib/components/chat/ChatControls.svelte

@@ -193,7 +193,10 @@
 		<!-- if $showControls -->
 
 		{#if $showControls}
-			<PaneResizer class="relative flex w-2 items-center justify-center bg-background group">
+			<PaneResizer
+				class="relative flex w-2 items-center justify-center bg-background group"
+				id="controls-resizer"
+			>
 				<div class="z-10 flex h-7 w-5 items-center justify-center rounded-xs">
 					<EllipsisVertical className="size-4 invisible group-hover:visible" />
 				</div>

+ 14 - 11
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -626,7 +626,10 @@
 
 				{#if message.timestamp}
 					<div
-						class=" self-center text-xs invisible group-hover:visible text-gray-400 font-medium first-letter:capitalize ml-0.5 translate-y-[1px]"
+						class="self-center text-xs font-medium first-letter:capitalize ml-0.5 translate-y-[1px] {($settings?.highContrastMode ??
+						false)
+							? 'dark:text-gray-100 text-gray-900'
+							: 'invisible group-hover:visible transition text-gray-400'}"
 					>
 						<Tooltip content={dayjs(message.timestamp * 1000).format('LLLL')}>
 							<span class="line-clamp-1">{formatDate(message.timestamp * 1000)}</span>
@@ -968,7 +971,7 @@
 										<Tooltip content={$i18n.t('Edit')} placement="bottom">
 											<button
 												aria-label={$i18n.t('Edit')}
-												class="{isLastMessage
+												class="{isLastMessage || ($settings?.highContrastMode ?? false)
 													? 'visible'
 													: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
 												on:click={() => {
@@ -998,7 +1001,7 @@
 								<Tooltip content={$i18n.t('Copy')} placement="bottom">
 									<button
 										aria-label={$i18n.t('Copy')}
-										class="{isLastMessage
+										class="{isLastMessage || ($settings?.highContrastMode ?? false)
 											? 'visible'
 											: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition copy-response-button"
 										on:click={() => {
@@ -1028,7 +1031,7 @@
 										<button
 											aria-label={$i18n.t('Read Aloud')}
 											id="speak-button-{message.id}"
-											class="{isLastMessage
+											class="{isLastMessage || ($settings?.highContrastMode ?? false)
 												? 'visible'
 												: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
 											on:click={() => {
@@ -1111,7 +1114,7 @@
 									<Tooltip content={$i18n.t('Generate Image')} placement="bottom">
 										<button
 											aria-label={$i18n.t('Generate Image')}
-											class="{isLastMessage
+											class="{isLastMessage || ($settings?.highContrastMode ?? false)
 												? 'visible'
 												: 'invisible group-hover:visible'}  p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
 											on:click={() => {
@@ -1191,7 +1194,7 @@
 									>
 										<button
 											aria-hidden="true"
-											class=" {isLastMessage
+											class=" {isLastMessage || ($settings?.highContrastMode ?? false)
 												? 'visible'
 												: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition whitespace-pre-wrap"
 											on:click={() => {
@@ -1223,7 +1226,7 @@
 										<Tooltip content={$i18n.t('Good Response')} placement="bottom">
 											<button
 												aria-label={$i18n.t('Good Response')}
-												class="{isLastMessage
+												class="{isLastMessage || ($settings?.highContrastMode ?? false)
 													? 'visible'
 													: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg {(
 													message?.annotation?.rating ?? ''
@@ -1261,7 +1264,7 @@
 										<Tooltip content={$i18n.t('Bad Response')} placement="bottom">
 											<button
 												aria-label={$i18n.t('Bad Response')}
-												class="{isLastMessage
+												class="{isLastMessage || ($settings?.highContrastMode ?? false)
 													? 'visible'
 													: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg {(
 													message?.annotation?.rating ?? ''
@@ -1303,7 +1306,7 @@
 												aria-label={$i18n.t('Continue Response')}
 												type="button"
 												id="continue-response-button"
-												class="{isLastMessage
+												class="{isLastMessage || ($settings?.highContrastMode ?? false)
 													? 'visible'
 													: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
 												on:click={() => {
@@ -1449,7 +1452,7 @@
 												type="button"
 												aria-label={$i18n.t('Delete')}
 												id="delete-response-button"
-												class="{isLastMessage
+												class="{isLastMessage || ($settings?.highContrastMode ?? false)
 													? 'visible'
 													: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
 												on:click={() => {
@@ -1481,7 +1484,7 @@
 												<button
 													type="button"
 													aria-label={action.name}
-													class="{isLastMessage
+													class="{isLastMessage || ($settings?.highContrastMode ?? false)
 														? 'visible'
 														: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
 													on:click={() => {

+ 21 - 6
src/lib/components/chat/Messages/UserMessage.svelte

@@ -146,7 +146,10 @@
 
 					{#if message.timestamp}
 						<div
-							class=" self-center text-xs invisible group-hover:visible text-gray-400 font-medium first-letter:capitalize ml-0.5 translate-y-[1px]"
+							class="self-center text-xs font-medium first-letter:capitalize ml-0.5 translate-y-[1px] {($settings?.highContrastMode ??
+							false)
+								? 'dark:text-gray-900 text-gray-100'
+								: 'invisible group-hover:visible transition'}"
 						>
 							<Tooltip content={dayjs(message.timestamp * 1000).format('LLLL')}>
 								<span class="line-clamp-1">{formatDate(message.timestamp * 1000)}</span>
@@ -158,7 +161,10 @@
 		{:else if message.timestamp}
 			<div class="flex justify-end pr-2 text-xs">
 				<div
-					class="text-[0.65rem] invisible group-hover:visible text-gray-400 font-medium first-letter:capitalize mb-0.5"
+					class="text-[0.65rem] font-medium first-letter:capitalize mb-0.5 {($settings?.highContrastMode ??
+					false)
+						? 'dark:text-gray-100 text-gray-900'
+						: 'invisible group-hover:visible transition text-gray-400'}"
 				>
 					<Tooltip content={dayjs(message.timestamp * 1000).format('LLLL')}>
 						<span class="line-clamp-1">{formatDate(message.timestamp * 1000)}</span>
@@ -207,7 +213,10 @@
 										</div>
 										<div class=" absolute -top-1 -right-1">
 											<button
-												class=" bg-white text-black border border-white rounded-full group-hover:visible invisible transition"
+												class=" bg-white text-black border border-white rounded-full {($settings?.highContrastMode ??
+												false)
+													? ''
+													: 'group-hover:visible invisible transition'}"
 												type="button"
 												on:click={() => {
 													editedFiles.splice(fileIdx, 1);
@@ -433,7 +442,9 @@
 					{#if !readOnly}
 						<Tooltip content={$i18n.t('Edit')} placement="bottom">
 							<button
-								class="invisible group-hover:visible p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition edit-user-message-button"
+								class="{($settings?.highContrastMode ?? false)
+									? ''
+									: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition edit-user-message-button"
 								on:click={() => {
 									editMessageHandler();
 								}}
@@ -459,7 +470,9 @@
 					{#if message?.content}
 						<Tooltip content={$i18n.t('Copy')} placement="bottom">
 							<button
-								class="invisible group-hover:visible p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
+								class="{($settings?.highContrastMode ?? false)
+									? ''
+									: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
 								on:click={() => {
 									copyToClipboard(message.content);
 								}}
@@ -485,7 +498,9 @@
 					{#if !readOnly && (!isFirstMessage || siblings.length > 1)}
 						<Tooltip content={$i18n.t('Delete')} placement="bottom">
 							<button
-								class="invisible group-hover:visible p-1 rounded-sm dark:hover:text-white hover:text-black transition"
+								class="{($settings?.highContrastMode ?? false)
+									? ''
+									: 'invisible group-hover:visible'} p-1 rounded-sm dark:hover:text-white hover:text-black transition"
 								on:click={() => {
 									showDeleteConfirm = true;
 								}}

+ 85 - 85
src/lib/i18n/locales/ca-ES/translation.json

@@ -14,7 +14,7 @@
 	"{{COUNT}} hidden lines": "{{COUNT}} línies ocultes",
 	"{{COUNT}} Replies": "{{COUNT}} respostes",
 	"{{COUNT}} words": "{{COUNT}} paraules",
-	"{{model}} download has been canceled": "",
+	"{{model}} download has been canceled": "La descàrrega del model {{model}} s'ha cancel·lat",
 	"{{user}}'s Chats": "Els xats de {{user}}",
 	"{{webUIName}} Backend Required": "El Backend de {{webUIName}} és necessari",
 	"*Prompt node ID(s) are required for image generation": "*Els identificadors de nodes d'indicacions són necessaris per a la generació d'imatges",
@@ -30,7 +30,7 @@
 	"Account Activation Pending": "Activació del compte pendent",
 	"Accurate information": "Informació precisa",
 	"Action": "Acció",
-	"Action not found": "",
+	"Action not found": "Acció no trobada",
 	"Action Required for Chat Log Storage": "Cal una acció per desar el registre del xat",
 	"Actions": "Accions",
 	"Activate": "Activar",
@@ -101,7 +101,7 @@
 	"Always Play Notification Sound": "Reproduir sempre un so de notificació",
 	"Amazing": "Al·lucinant",
 	"an assistant": "un assistent",
-	"An error occurred while fetching the explanation": "",
+	"An error occurred while fetching the explanation": "S'ha produït un error mentre s'obtenia l'explicació",
 	"Analytics": "Analítica",
 	"Analyzed": "Analitzat",
 	"Analyzing...": "Analitzant...",
@@ -118,7 +118,7 @@
 	"API Key Endpoint Restrictions": "Restriccions del punt d'accés de la Clau API",
 	"API keys": "Claus de l'API",
 	"API Version": "Versió de l'API",
-	"API Version is required": "",
+	"API Version is required": "Versió API requerida",
 	"Application DN": "DN d'aplicació",
 	"Application DN Password": "Contrasenya del DN d'aplicació",
 	"applies to all users with the \"user\" role": "s'aplica a tots els usuaris amb el rol \"usuari\"",
@@ -169,14 +169,14 @@
 	"Banners": "Banners",
 	"Base Model (From)": "Model base (des de)",
 	"Base Model List Cache speeds up access by fetching base models only at startup or on settings save—faster, but may not show recent base model changes.": "La memòria cau de la llista de models base accelera l'accés obtenint els models base només a l'inici o en desar la configuració; és més ràpid, però és possible que no mostri els canvis recents del model base.",
-	"Bearer": "",
+	"Bearer": "Bearer",
 	"before": "abans",
 	"Being lazy": "Essent mandrós",
 	"Beta": "Beta",
 	"Bing Search V7 Endpoint": "Punt de connexió a Bing Search V7",
 	"Bing Search V7 Subscription Key": "Clau de subscripció a Bing Search V7",
-	"Bio": "",
-	"Birth Date": "",
+	"Bio": "Bio",
+	"Birth Date": "Data de naixement",
 	"BM25 Weight": "Pes BM25",
 	"Bocha Search API Key": "Clau API de Bocha Search",
 	"Bold": "Negreta",
@@ -201,9 +201,9 @@
 	"Capture Audio": "Capturar àudio",
 	"Certificate Path": "Camí del certificat",
 	"Change Password": "Canviar la contrasenya",
-	"Channel deleted successfully": "",
+	"Channel deleted successfully": "Canal suprimit correctament",
 	"Channel Name": "Nom del canal",
-	"Channel updated successfully": "",
+	"Channel updated successfully": "Canal actualitzat correctament",
 	"Channels": "Canals",
 	"Character": "Personatge",
 	"Character limit for autocomplete generation input": "Límit de caràcters per a l'entrada de generació automàtica",
@@ -212,10 +212,10 @@
 	"Chat Background Image": "Imatge de fons del xat",
 	"Chat Bubble UI": "Chat Bubble UI",
 	"Chat Controls": "Controls de xat",
-	"Chat Conversation": "",
+	"Chat Conversation": "Conversa de xat",
 	"Chat direction": "Direcció del xat",
 	"Chat ID": "ID del xat",
-	"Chat moved successfully": "",
+	"Chat moved successfully": "El xat s'ha mogut correctament",
 	"Chat Overview": "Vista general del xat",
 	"Chat Permissions": "Permisos del xat",
 	"Chat Tags Auto-Generation": "Generació automàtica d'etiquetes del xat",
@@ -254,7 +254,7 @@
 	"Close modal": "Tancar el modal",
 	"Close settings modal": "Tancar el modal de configuració",
 	"Close Sidebar": "Tancar la barra lateral",
-	"CMU ARCTIC speaker embedding name": "",
+	"CMU ARCTIC speaker embedding name": "Nom de l'altaveu d'incrustació CMU ARCTIC",
 	"Code Block": "Bloc de codi",
 	"Code execution": "Execució de codi",
 	"Code Execution": "Execució de Codi",
@@ -273,13 +273,13 @@
 	"ComfyUI Base URL is required.": "L'URL base de ComfyUI és obligatòria.",
 	"ComfyUI Workflow": "Flux de treball de ComfyUI",
 	"ComfyUI Workflow Nodes": "Nodes del flux de treball de ComfyUI",
-	"Comma separated Node Ids (e.g. 1 or 1,2)": "",
+	"Comma separated Node Ids (e.g. 1 or 1,2)": "Identificadors de node separats per comes (p. ex. 1 o 1,2)",
 	"Command": "Comanda",
 	"Comment": "Comentari",
 	"Completions": "Completaments",
 	"Compress Images in Channels": "Comprimir imatges en els canals",
 	"Concurrent Requests": "Peticions simultànies",
-	"Config imported successfully": "",
+	"Config imported successfully": "Configuració importada correctament",
 	"Configure": "Configurar",
 	"Confirm": "Confirmar",
 	"Confirm Password": "Confirmar la contrasenya",
@@ -306,7 +306,7 @@
 	"Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "Controlar la repetició de seqüències de tokens en el text generat. Un valor més alt (p. ex., 1,5) penalitzarà les repeticions amb més força, mentre que un valor més baix (p. ex., 1,1) serà més indulgent. A l'1, està desactivat.",
 	"Controls": "Controls",
 	"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "Controla l'equilibri entre la coherència i la diversitat de la sortida. Un valor més baix donarà lloc a un text més enfocat i coherent.",
-	"Conversation saved successfully": "",
+	"Conversation saved successfully": "Conversa desada correctament",
 	"Copied": "Copiat",
 	"Copied link to clipboard": "Enllaç copiat al portaretalls",
 	"Copied shared chat URL to clipboard!": "S'ha copiat l'URL compartida al porta-retalls!",
@@ -351,7 +351,7 @@
 	"Datalab Marker API Key required.": "API de Datalab Marker requereix clau.",
 	"DD/MM/YYYY": "DD/MM/YYYY",
 	"December": "Desembre",
-	"Deepgram": "",
+	"Deepgram": "Deepgram",
 	"Default": "Per defecte",
 	"Default (Open AI)": "Per defecte (Open AI)",
 	"Default (SentenceTransformers)": "Per defecte (SentenceTransformers)",
@@ -398,7 +398,7 @@
 	"Direct Connections": "Connexions directes",
 	"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Les connexions directes permeten als usuaris connectar-se als seus propis endpoints d'API compatibles amb OpenAI.",
 	"Direct Tool Servers": "Servidors d'eines directes",
-	"Directory selection was cancelled": "",
+	"Directory selection was cancelled": "La selecció de directori s'ha cancel·lat",
 	"Disable Code Interpreter": "Deshabilitar l'interpret de codi",
 	"Disable Image Extraction": "Deshabilitar l'extracció d'imatges",
 	"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "Desactiva l'extracció d'imatges del PDF. Si Utilitza LLM està habilitat, les imatges es descriuran automàticament. Per defecte és Fals.",
@@ -512,7 +512,7 @@
 	"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Introdueix parelles de \"token:valor de biaix\" separats per comes (exemple: 5432:100, 413:-100)",
 	"Enter Config in JSON format": "Introdueix la configuració en format JSON",
 	"Enter content for the pending user info overlay. Leave empty for default.": "Introdueix el contingut per a la finestra de dades d'usuari pendent. Deixa-ho buit per a valor per defecte.",
-	"Enter coordinates (e.g. 51.505, -0.09)": "",
+	"Enter coordinates (e.g. 51.505, -0.09)": "Entra les coordenades (p. ex. 51.505, -0.09)",
 	"Enter Datalab Marker API Base URL": "Introdueix l'URL de base de l'API Datalab Marker",
 	"Enter Datalab Marker API Key": "Introdueix la clau API de Datalab Marker",
 	"Enter description": "Introdueix la descripció",
@@ -535,8 +535,8 @@
 	"Enter Github Raw URL": "Introdueix l'URL en brut de Github",
 	"Enter Google PSE API Key": "Introdueix la clau API de Google PSE",
 	"Enter Google PSE Engine Id": "Introdueix l'identificador del motor PSE de Google",
-	"Enter hex color (e.g. #FF0000)": "",
-	"Enter ID": "",
+	"Enter hex color (e.g. #FF0000)": "Introdueix el codi hexadecimal del color (p. ex. #FF0000)",
+	"Enter ID": "Introdueix l'ID",
 	"Enter Image Size (e.g. 512x512)": "Introdueix la mida de la imatge (p. ex. 512x512)",
 	"Enter Jina API Key": "Introdueix la clau API de Jina",
 	"Enter JSON config (e.g., {\"disable_links\": true})": "Introdueix la configuració JSON (per exemple, {\"disable_links\": true})",
@@ -590,8 +590,8 @@
 	"Enter Top K Reranker": "Introdueix el Top K Reranker",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Introdueix l'URL (p. ex. http://127.0.0.1:7860/)",
 	"Enter URL (e.g. http://localhost:11434)": "Introdueix l'URL (p. ex. http://localhost:11434)",
-	"Enter value": "",
-	"Enter value (true/false)": "",
+	"Enter value": "Introdueix el valor",
+	"Enter value (true/false)": "Introdueix el valor (cert/fals)",
 	"Enter Yacy Password": "Introdueix la contrassenya de Yacy",
 	"Enter Yacy URL (e.g. http://yacy.example.com:8090)": "Introdueix la URL de Yacy (p. ex. http://yacy.example.com:8090)",
 	"Enter Yacy Username": "Introdueix l'usuari de Yacy",
@@ -599,7 +599,7 @@
 	"Enter your current password": "Introdueix la teva contrasenya actual",
 	"Enter Your Email": "Introdueix el teu correu electrònic",
 	"Enter Your Full Name": "Introdueix el teu nom complet",
-	"Enter your gender": "",
+	"Enter your gender": "Introdueix el teu gènere",
 	"Enter your message": "Introdueix el teu missatge",
 	"Enter your name": "Entra el teu nom",
 	"Enter Your Name": "Entra el teu nom",
@@ -610,14 +610,14 @@
 	"Enter your webhook URL": "Entra la URL del webhook",
 	"Error": "Error",
 	"ERROR": "ERROR",
-	"Error accessing directory": "",
+	"Error accessing directory": "Error en accedir al directori",
 	"Error accessing Google Drive: {{error}}": "Error en accedir a Google Drive: {{error}}",
 	"Error accessing media devices.": "Error en accedir als dispositius multimèdia",
 	"Error starting recording.": "Error en començar a enregistrar",
 	"Error unloading model: {{error}}": "Error en descarregar el model: {{error}}",
 	"Error uploading file: {{error}}": "Error en pujar l'arxiu: {{error}}",
-	"Error: A model with the ID '{{modelId}}' already exists. Please select a different ID to proceed.": "",
-	"Error: Model ID cannot be empty. Please enter a valid ID to proceed.": "",
+	"Error: A model with the ID '{{modelId}}' already exists. Please select a different ID to proceed.": "Error: Ja existeix un model amb l'ID '{{modelId}}'. Selecciona un ID diferent per continuar.",
+	"Error: Model ID cannot be empty. Please enter a valid ID to proceed.": "Error: ID de model no pot ser buit. Entra un ID de model vàlid per continuar.",
 	"Evaluations": "Avaluacions",
 	"Everyone": "Tothom",
 	"Exa API Key": "Clau API d'EXA",
@@ -667,7 +667,7 @@
 	"Failed to generate title": "No s'ha pogut generar el títol",
 	"Failed to load chat preview": "No s'ha pogut carregar la previsualització del xat",
 	"Failed to load file content.": "No s'ha pogut carregar el contingut del fitxer",
-	"Failed to move chat": "",
+	"Failed to move chat": "No s'ha pogut moure el xat",
 	"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
 	"Failed to save connections": "No s'han pogut desar les connexions",
 	"Failed to save conversation": "No s'ha pogut desar la conversa",
@@ -681,7 +681,7 @@
 	"Feedback History": "Històric de comentaris",
 	"Feedbacks": "Comentaris",
 	"Feel free to add specific details": "Sent-te lliure d'afegir detalls específics",
-	"Female": "",
+	"Female": "Dona",
 	"File": "Arxiu",
 	"File added successfully.": "L'arxiu s'ha afegit correctament.",
 	"File content updated successfully.": "El contingut de l'arxiu s'ha actualitzat correctament.",
@@ -737,7 +737,7 @@
 	"Gemini": "Gemini",
 	"Gemini API Config": "Configuració de Gemini API",
 	"Gemini API Key is required.": "La clau API de Gemini és necessària",
-	"Gender": "",
+	"Gender": "Gènere",
 	"General": "General",
 	"Generate": "Generar",
 	"Generate an image": "Generar una imatge",
@@ -753,7 +753,7 @@
 	"Google Drive": "Google Drive",
 	"Google PSE API Key": "Clau API PSE de Google",
 	"Google PSE Engine Id": "Identificador del motor PSE de Google",
-	"Gravatar": "",
+	"Gravatar": "Gravatar",
 	"Group": "Grup",
 	"Group created successfully": "El grup s'ha creat correctament",
 	"Group deleted successfully": "El grup s'ha eliminat correctament",
@@ -765,7 +765,7 @@
 	"H2": "H2",
 	"H3": "H3",
 	"Haptic Feedback": "Retorn hàptic",
-	"Height": "",
+	"Height": "Alçada",
 	"Hello, {{name}}": "Hola, {{name}}",
 	"Help": "Ajuda",
 	"Help us create the best community leaderboard by sharing your feedback history!": "Ajuda'ns a crear la millor taula de classificació de la comunitat compartint el teu historial de comentaris!",
@@ -774,7 +774,7 @@
 	"Hide": "Amaga",
 	"Hide from Sidebar": "Amagar de la barra lateral",
 	"Hide Model": "Amagar el model",
-	"High": "",
+	"High": "Alt",
 	"High Contrast Mode": "Mode d'alt contrast",
 	"Home": "Inici",
 	"Host": "Servidor",
@@ -819,11 +819,11 @@
 	"Includes SharePoint": "Inclou SharePoint",
 	"Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "Influeix amb la rapidesa amb què l'algoritme respon als comentaris del text generat. Una taxa d'aprenentatge més baixa donarà lloc a ajustos més lents, mentre que una taxa d'aprenentatge més alta farà que l'algorisme sigui més sensible.",
 	"Info": "Informació",
-	"Initials": "",
+	"Initials": "Inicials",
 	"Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "Injectar tot el contingut com a context per a un processament complet, això es recomana per a consultes complexes.",
 	"Input": "Entrada",
 	"Input commands": "Entra comandes",
-	"Input Key (e.g. text, unet_name, steps)": "",
+	"Input Key (e.g. text, unet_name, steps)": "Entra la clau (p. ex. text, unet_name, steps)",
 	"Input Variables": "Variables d'entrada",
 	"Insert": "Inserir",
 	"Insert Follow-Up Prompt to Input": "Inserir un missatge de seguiment per a l'entrada",
@@ -835,7 +835,7 @@
 	"Invalid file content": "Continguts del fitxer no vàlids",
 	"Invalid file format.": "Format d'arxiu no vàlid.",
 	"Invalid JSON file": "Arxiu JSON no vàlid",
-	"Invalid JSON format for ComfyUI Workflow.": "",
+	"Invalid JSON format for ComfyUI Workflow.": "Arxiu JSON de Workflow ComfyUI no vàlid.",
 	"Invalid JSON format in Additional Config": "Format JSON no vàlid a la configuració addicional",
 	"Invalid Tag": "Etiqueta no vàlida",
 	"is typing...": "està escrivint...",
@@ -855,15 +855,15 @@
 	"Keep Follow-Up Prompts in Chat": "Mantenir els missatges de seguiment en el xat",
 	"Keep in Sidebar": "Mantenir a la barra lateral",
 	"Key": "Clau",
-	"Key is required": "",
+	"Key is required": "La clau és necessària",
 	"Keyboard shortcuts": "Dreceres de teclat",
 	"Knowledge": "Coneixement",
 	"Knowledge Access": "Accés al coneixement",
 	"Knowledge Base": "Base de coneixement",
 	"Knowledge created successfully.": "Coneixement creat correctament.",
 	"Knowledge deleted successfully.": "Coneixement eliminat correctament.",
-	"Knowledge Description": "",
-	"Knowledge Name": "",
+	"Knowledge Description": "Descripció del coneixement",
+	"Knowledge Name": "Nom del coneixement",
 	"Knowledge Public Sharing": "Compartir públicament el Coneixement",
 	"Knowledge reset successfully.": "Coneixement restablert correctament.",
 	"Knowledge updated successfully": "Coneixement actualitzat correctament.",
@@ -903,13 +903,13 @@
 	"Local Task Model": "Model local de tasques",
 	"Location access not allowed": "Accés a la ubicació no permesa",
 	"Lost": "Perdut",
-	"Low": "",
+	"Low": "Baix",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "Creat per la Comunitat OpenWebUI",
 	"Make password visible in the user interface": "Fer que la contrasenya sigui visible a la interficie d'usuari",
 	"Make sure to enclose them with": "Assegura't d'envoltar-los amb",
 	"Make sure to export a workflow.json file as API format from ComfyUI.": "Assegura't d'exportar un fitxer workflow.json com a format API des de ComfyUI.",
-	"Male": "",
+	"Male": "Home",
 	"Manage": "Gestionar",
 	"Manage Direct Connections": "Gestionar les connexions directes",
 	"Manage Models": "Gestionar els models",
@@ -918,7 +918,7 @@
 	"Manage OpenAI API Connections": "Gestionar les connexions a l'API d'OpenAI",
 	"Manage Pipelines": "Gestionar les Pipelines",
 	"Manage Tool Servers": "Gestionar els servidors d'eines",
-	"Manage your account information.": "",
+	"Manage your account information.": "Gestionar la informació del teu compte.",
 	"March": "Març",
 	"Markdown": "Markdown",
 	"Markdown (Header)": "Markdown (encapçalament)",
@@ -927,7 +927,7 @@
 	"Max Upload Size": "Mida màxima de càrrega",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Es poden descarregar un màxim de 3 models simultàniament. Si us plau, prova-ho més tard.",
 	"May": "Maig",
-	"Medium": "",
+	"Medium": "Mig",
 	"Memories accessible by LLMs will be shown here.": "Les memòries accessibles pels models de llenguatge es mostraran aquí.",
 	"Memory": "Memòria",
 	"Memory added successfully": "Memòria afegida correctament",
@@ -963,7 +963,7 @@
 	"Model ID is required.": "L'ID del model és necessari",
 	"Model IDs": "Identificadors del model",
 	"Model Name": "Nom del model",
-	"Model name already exists, please choose a different one": "",
+	"Model name already exists, please choose a different one": "Aquest nom de model ja existeix, si us plau, tria'n un altre",
 	"Model Name is required.": "El nom del model és necessari",
 	"Model not selected": "Model no seleccionat",
 	"Model Params": "Paràmetres del model",
@@ -981,9 +981,9 @@
 	"More": "Més",
 	"More Concise": "Més precís",
 	"More Options": "Més opcions",
-	"Move": "",
+	"Move": "Moure",
 	"Name": "Nom",
-	"Name and ID are required, please fill them out": "",
+	"Name and ID are required, please fill them out": "El nom i l'ID són necessaris, emplena'ls, si us plau",
 	"Name your knowledge base": "Anomena la teva base de coneixement",
 	"Native": "Natiu",
 	"New Button": "Botó nou",
@@ -1002,7 +1002,7 @@
 	"No content found": "No s'ha trobat contingut",
 	"No content found in file.": "No s'ha trobat contingut en el fitxer.",
 	"No content to speak": "No hi ha contingut per parlar",
-	"No conversation to save": "",
+	"No conversation to save": "No hi ha cap conversa a desar",
 	"No distance available": "No hi ha distància disponible",
 	"No feedbacks found": "No s'han trobat comentaris",
 	"No file selected": "No s'ha escollit cap fitxer",
@@ -1021,9 +1021,9 @@
 	"No source available": "Sense font disponible",
 	"No suggestion prompts": "Cap prompt suggerit",
 	"No users were found.": "No s'han trobat usuaris",
-	"No valves": "",
+	"No valves": "No hi ha valves",
 	"No valves to update": "No hi ha cap Valve per actualitzar",
-	"Node Ids": "",
+	"Node Ids": "Id de nodes",
 	"None": "Cap",
 	"Not factually correct": "No és clarament correcte",
 	"Not helpful": "No ajuda",
@@ -1074,7 +1074,7 @@
 	"OpenAI API settings updated": "Configuració de l'API d'OpenAI actualitzada",
 	"OpenAI URL/Key required.": "URL/Clau d'OpenAI requerides.",
 	"openapi.json URL or Path": "Camí o URL a openapi.json",
-	"Optional": "",
+	"Optional": "Opcional",
 	"Options for running a local vision-language model in the picture description. The parameters refer to a model hosted on Hugging Face. This parameter is mutually exclusive with picture_description_api.": "Opcions per executar un model de llenguatge amb visió local a la descripció de la imatge. Els paràmetres fan referència a un model allotjat a HuggingFace. Aquest paràmetre és mutuament excloent amb picture_description_api.",
 	"or": "o",
 	"Ordered List": "Llista ordenada",
@@ -1124,7 +1124,7 @@
 	"Playwright WebSocket URL": "URL del WebSocket de Playwright",
 	"Please carefully review the following warnings:": "Si us plau, revisa els següents avisos amb cura:",
 	"Please do not close the settings page while loading the model.": "No tanquis la pàgina de configuració mentre carregues el model.",
-	"Please enter a message or attach a file.": "",
+	"Please enter a message or attach a file.": "Introdueix un missatge o adjunta un arxiu",
 	"Please enter a prompt": "Si us plau, entra una indicació",
 	"Please enter a valid path": "Si us plau, entra un camí vàlid",
 	"Please enter a valid URL": "Si us plau, entra una URL vàlida",
@@ -1135,7 +1135,7 @@
 	"Please wait until all files are uploaded.": "Si us plau, espera fins que s'hagin carregat tots els fitxers.",
 	"Port": "Port",
 	"Positive attitude": "Actitud positiva",
-	"Prefer not to say": "",
+	"Prefer not to say": "Prefereixo no dir-ho",
 	"Prefix ID": "Identificador del prefix",
 	"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "L'identificador de prefix s'utilitza per evitar conflictes amb altres connexions afegint un prefix als ID de model; deixa'l en blanc per desactivar-lo.",
 	"Prevent file creation": "Impedir la creació d'arxius",
@@ -1175,7 +1175,7 @@
 	"References from": "Referències de",
 	"Refused when it shouldn't have": "Refusat quan no hauria d'haver estat",
 	"Regenerate": "Regenerar",
-	"Regenerate Menu": "",
+	"Regenerate Menu": "Regenerar el menú",
 	"Reindex": "Reindexar",
 	"Reindex Knowledge Base Vectors": "Reindexar els vector base del Coneixement",
 	"Release Notes": "Notes de la versió",
@@ -1222,14 +1222,14 @@
 	"Save & Create": "Desar i crear",
 	"Save & Update": "Desar i actualitzar",
 	"Save As Copy": "Desar com a còpia",
-	"Save Chat": "",
+	"Save Chat": "Dear el xat",
 	"Save Tag": "Desar l'etiqueta",
 	"Saved": "Desat",
 	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Desar els registres de xat directament a l'emmagatzematge del teu navegador ja no està suportat. Si us plau, descarregr i elimina els registres de xat fent clic al botó de sota. No et preocupis, pots tornar a importar fàcilment els teus registres de xat al backend a través de",
 	"Scroll On Branch Change": "Fer scroll en canviar de branca",
 	"Search": "Cercar",
 	"Search a model": "Cercar un model",
-	"Search all emojis": "",
+	"Search all emojis": "Cercar tots els emojis",
 	"Search Base": "Base de cerca",
 	"Search Chats": "Cercar xats",
 	"Search Collection": "Cercar col·leccions",
@@ -1259,32 +1259,32 @@
 	"See readme.md for instructions": "Consulta l'arxiu readme.md per obtenir instruccions",
 	"See what's new": "Veure què hi ha de nou",
 	"Seed": "Llavor",
-	"Select": "",
+	"Select": "Escollir",
 	"Select a base model": "Seleccionar un model base",
-	"Select a base model (e.g. llama3, gpt-4o)": "",
+	"Select a base model (e.g. llama3, gpt-4o)": "Seleccionar un model base (p. ex. llama3, gpt-4o)",
 	"Select a conversation to preview": "Seleccionar una conversa a previsualitzar",
 	"Select a engine": "Seleccionar un motor",
 	"Select a function": "Seleccionar una funció",
 	"Select a group": "Seleccionar un grup",
-	"Select a language": "",
-	"Select a mode": "",
+	"Select a language": "Seleccionar una llengua",
+	"Select a mode": "Seleccionar un mode",
 	"Select a model": "Seleccionar un model",
-	"Select a model (optional)": "",
+	"Select a model (optional)": "Seleccionar un model (opcional)",
 	"Select a pipeline": "Seleccionar una Pipeline",
 	"Select a pipeline url": "Seleccionar l'URL d'una Pipeline",
-	"Select a reranking model engine": "",
-	"Select a role": "",
-	"Select a theme": "",
+	"Select a reranking model engine": "Seleccionar un motor de reranking de model",
+	"Select a role": "Seleccionar un rol",
+	"Select a theme": "Seleccionar un tema",
 	"Select a tool": "Seleccionar una eina",
-	"Select a voice": "",
+	"Select a voice": "Seleccionar una veu",
 	"Select an auth method": "Seleccionar un mètode d'autenticació",
-	"Select an embedding model engine": "",
-	"Select an engine": "",
+	"Select an embedding model engine": "Seleccionar un motor d'incrustació",
+	"Select an engine": "Seleccionar un motor",
 	"Select an Ollama instance": "Seleccionar una instància d'Ollama",
-	"Select an output format": "",
-	"Select dtype": "",
+	"Select an output format": "Seleccionar un format de sortida",
+	"Select dtype": "Seleccionar dtype",
 	"Select Engine": "Seleccionar el motor",
-	"Select how to split message text for TTS requests": "",
+	"Select how to split message text for TTS requests": "Seleccionar com separar un missatge per a peticions TTS",
 	"Select Knowledge": "Seleccionar coneixement",
 	"Select only one model to call": "Seleccionar només un model per trucar",
 	"Selected model(s) do not support image inputs": "El(s) model(s) seleccionats no admeten l'entrada d'imatges",
@@ -1301,7 +1301,7 @@
 	"Serply API Key": "Clau API de Serply",
 	"Serpstack API Key": "Clau API de Serpstack",
 	"Server connection verified": "Connexió al servidor verificada",
-	"Session": "",
+	"Session": "Sessió",
 	"Set as default": "Establir com a predeterminat",
 	"Set CFG Scale": "Establir l'escala CFG",
 	"Set Default Model": "Establir el model predeterminat",
@@ -1327,7 +1327,7 @@
 	"Share": "Compartir",
 	"Share Chat": "Compartir el xat",
 	"Share to Open WebUI Community": "Compartir amb la comunitat OpenWebUI",
-	"Share your background and interests": "",
+	"Share your background and interests": "Compartir la teva informació i interessos",
 	"Sharing Permissions": "Compartir els permisos",
 	"Shortcuts with an asterisk (*) are situational and only active under specific conditions.": "Les dreceres de teclat amb un asterisc (*) són situacionals i només actives sota condicions específiques.",
 	"Show": "Mostrar",
@@ -1353,12 +1353,12 @@
 	"sk-1234": "sk-1234",
 	"Skip Cache": "Ometre la memòria cau",
 	"Skip the cache and re-run the inference. Defaults to False.": "Omet la memòria cai i torna a executar la inferència. Per defecte és Fals.",
-	"Something went wrong :/": "",
-	"Sonar": "",
-	"Sonar Deep Research": "",
-	"Sonar Pro": "",
-	"Sonar Reasoning": "",
-	"Sonar Reasoning Pro": "",
+	"Something went wrong :/": "Quelcom no ha anat bé",
+	"Sonar": "Sonar",
+	"Sonar Deep Research": "Sonar Deep Research",
+	"Sonar Pro": "Sonar Pro",
+	"Sonar Reasoning": "Sonar Reasoning",
+	"Sonar Reasoning Pro": "Sonar Reasoning Pro",
 	"Sougou Search API sID": "sID de l'API de Sougou Search",
 	"Sougou Search API SK": "SK de l'API de Sougou Search",
 	"Source": "Font",
@@ -1381,7 +1381,7 @@
 	"Stylized PDF Export": "Exportació en PDF estilitzat",
 	"Subtitle (e.g. about the Roman Empire)": "Subtítol (per exemple, sobre l'Imperi Romà)",
 	"Success": "Èxit",
-	"Successfully imported {{userCount}} users.": "",
+	"Successfully imported {{userCount}} users.": "S'han importat correctament {{userCount}} usuaris.",
 	"Successfully updated.": "Actualitzat correctament.",
 	"Suggest a change": "Suggerir un canvi",
 	"Suggested": "Suggerit",
@@ -1406,7 +1406,7 @@
 	"Tell us more:": "Dona'ns més informació:",
 	"Temperature": "Temperatura",
 	"Temporary Chat": "Xat temporal",
-	"Temporary Chat by Default": "",
+	"Temporary Chat by Default": "Xat temporal per defecte",
 	"Text Splitter": "Separador de text",
 	"Text-to-Speech": "Text-a-veu",
 	"Text-to-Speech Engine": "Motor de text a veu",
@@ -1425,7 +1425,7 @@
 	"The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "La mida màxima del fitxer en MB. Si la mida del fitxer supera aquest límit, el fitxer no es carregarà.",
 	"The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "El nombre màxim de fitxers que es poden utilitzar alhora al xat. Si el nombre de fitxers supera aquest límit, els fitxers no es penjaran.",
 	"The output format for the text. Can be 'json', 'markdown', or 'html'. Defaults to 'markdown'.": "Format de sortida per al text. Pot ser 'json', 'markdown' o 'html'. Per defecte és 'markdown'.",
-	"The passwords you entered don't quite match. Please double-check and try again.": "",
+	"The passwords you entered don't quite match. Please double-check and try again.": "Les contrasenyes que has introduït no coincideixen. Si us plau, comprova-ho i torna-ho a intentar.",
 	"The score should be a value between 0.0 (0%) and 1.0 (100%).": "El valor de puntuació hauria de ser entre 0.0 (0%) i 1.0 (100%).",
 	"The stream delta chunk size for the model. Increasing the chunk size will make the model respond with larger pieces of text at once.": "La mida del fragment Delta de flux per al model. Si augmentes la mida del fragment, el model respondrà amb fragments de text més grans alhora.",
 	"The temperature of the model. Increasing the temperature will make the model answer more creatively.": "La temperatura del model. Augmentar la temperatura farà que el model respongui de manera més creativa.",
@@ -1539,9 +1539,9 @@
 	"Upload Files": "Pujar fitxers",
 	"Upload Pipeline": "Pujar una Pipeline",
 	"Upload Progress": "Progrés de càrrega",
-	"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
+	"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Progrés de la pujada: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
 	"URL": "URL",
-	"URL is required": "",
+	"URL is required": "La URL és necessaria",
 	"URL Mode": "Mode URL",
 	"Usage": "Ús",
 	"Use '#' in the prompt input to load and include your knowledge.": "Utilitza '#' a l'entrada de la indicació per carregar i incloure els teus coneixements.",
@@ -1551,7 +1551,7 @@
 	"Use proxy designated by http_proxy and https_proxy environment variables to fetch page contents.": "Utilitza el proxy designat per les variables d'entorn http_proxy i https_proxy per obtenir el contingut de la pàgina.",
 	"user": "usuari",
 	"User": "Usuari",
-	"User Groups": "",
+	"User Groups": "Grups d'usuari",
 	"User location successfully retrieved.": "Ubicació de l'usuari obtinguda correctament",
 	"User menu": "Menú d'usuari",
 	"User Webhooks": "Webhooks d'usuari",
@@ -1561,7 +1561,7 @@
 	"Using Focused Retrieval": "Utilitzant RAG",
 	"Using the default arena model with all models. Click the plus button to add custom models.": "S'utilitza el model d'Arena predeterminat amb tots els models. Clica el botó més per afegir models personalitzats.",
 	"Valid time units:": "Unitats de temps vàlides:",
-	"Validate certificate": "",
+	"Validate certificate": "Validar el certificat",
 	"Valves": "Valves",
 	"Valves updated": "Valves actualitzades",
 	"Valves updated successfully": "Valves actualitzades correctament",
@@ -1604,7 +1604,7 @@
 	"Whisper (Local)": "Whisper (local)",
 	"Why?": "Per què?",
 	"Widescreen Mode": "Mode de pantalla ampla",
-	"Width": "",
+	"Width": "amplada",
 	"Won": "Ha guanyat",
 	"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text.": "Funciona juntament amb top-k. Un valor més alt (p. ex., 0,95) donarà lloc a un text més divers, mentre que un valor més baix (p. ex., 0,5) generarà un text més concentrat i conservador.",
 	"Workspace": "Espai de treball",
@@ -1628,7 +1628,7 @@
 	"You have shared this chat": "Has compartit aquest xat",
 	"You're a helpful assistant.": "Ets un assistent útil.",
 	"You're now logged in.": "Ara estàs connectat.",
-	"Your Account": "",
+	"Your Account": "El teu compte",
 	"Your account status is currently pending activation.": "El compte està actualment pendent d'activació",
 	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Tota la teva contribució anirà directament al desenvolupador del complement; Open WebUI no se'n queda cap percentatge. Tanmateix, la plataforma de finançament escollida pot tenir les seves pròpies comissions.",
 	"Youtube": "Youtube",

+ 83 - 83
src/lib/i18n/locales/pt-BR/translation.json

@@ -175,8 +175,8 @@
 	"Beta": "Beta",
 	"Bing Search V7 Endpoint": "Endpoint do Bing Search V7",
 	"Bing Search V7 Subscription Key": "Chave de assinatura do Bing Search V7",
-	"Bio": "",
-	"Birth Date": "",
+	"Bio": "Sobre você",
+	"Birth Date": "Data de nascimento",
 	"BM25 Weight": "Peso BM25",
 	"Bocha Search API Key": "Chave da API de pesquisa Bocha",
 	"Bold": "",
@@ -201,9 +201,9 @@
 	"Capture Audio": "Capturar Audio",
 	"Certificate Path": "Caminho do Certificado",
 	"Change Password": "Alterar Senha",
-	"Channel deleted successfully": "",
+	"Channel deleted successfully": "Canal apagado com sucesso",
 	"Channel Name": "Nome do canal",
-	"Channel updated successfully": "",
+	"Channel updated successfully": "Canal atualizado com sucesso",
 	"Channels": "Canais",
 	"Character": "Caracter",
 	"Character limit for autocomplete generation input": "Limite de caracteres para entrada de geração de preenchimento automático",
@@ -212,10 +212,10 @@
 	"Chat Background Image": "Imagem de Fundo do Chat",
 	"Chat Bubble UI": "Interface de Bolha de Chat",
 	"Chat Controls": "Controles de Chat",
-	"Chat Conversation": "",
+	"Chat Conversation": "Conversa do Chat",
 	"Chat direction": "Direção do Chat",
 	"Chat ID": "ID do Chat",
-	"Chat moved successfully": "",
+	"Chat moved successfully": "Chat movido com sucesso",
 	"Chat Overview": "Visão Geral do Chat",
 	"Chat Permissions": "Permissões de Chat",
 	"Chat Tags Auto-Generation": "Tags de Chat Geradas Automaticamente",
@@ -279,7 +279,7 @@
 	"Completions": "Conclusões",
 	"Compress Images in Channels": "Comprimir imagens em canais",
 	"Concurrent Requests": "Solicitações simultâneas",
-	"Config imported successfully": "",
+	"Config imported successfully": "Configuração importada com sucesso",
 	"Configure": "Configurar",
 	"Confirm": "Confirmar",
 	"Confirm Password": "Confirmar Senha",
@@ -306,7 +306,7 @@
 	"Control the repetition of token sequences in the generated text. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 1.1) will be more lenient. At 1, it is disabled.": "Controla a repetição de sequências de tokens no texto gerado. Um valor mais alto (por exemplo, 1,5) penalizará as repetições com mais rigor, enquanto um valor mais baixo (por exemplo, 1,1) será mais tolerante. Em 1, ele está desabilitado.",
 	"Controls": "Controles",
 	"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text.": "Controla o equilíbrio entre coerência e diversidade da saída. Um valor menor resultará em um texto mais focado e coerente.",
-	"Conversation saved successfully": "",
+	"Conversation saved successfully": "Conversa salva com sucesso",
 	"Copied": "Copiado",
 	"Copied link to clipboard": "Link copiado para a área de transferência",
 	"Copied shared chat URL to clipboard!": "URL do chat compartilhado copiada para a área de transferência!",
@@ -349,7 +349,7 @@
 	"Database": "Banco de Dados",
 	"Datalab Marker API": "API do Marcador do Datalab",
 	"Datalab Marker API Key required.": "Chave de API do Datalab Marker necessária.",
-	"DD/MM/YYYY": "",
+	"DD/MM/YYYY": "DD/MM/AAAA",
 	"December": "Dezembro",
 	"Deepgram": "",
 	"Default": "Padrão",
@@ -398,7 +398,7 @@
 	"Direct Connections": "Conexões Diretas",
 	"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "As conexões diretas permitem que os usuários se conectem aos seus próprios terminais de API compatíveis com OpenAI.",
 	"Direct Tool Servers": "Servidores de ferramentas diretas",
-	"Directory selection was cancelled": "",
+	"Directory selection was cancelled": "A seleção do diretório foi cancelada",
 	"Disable Code Interpreter": "Desativar o interpretador de código",
 	"Disable Image Extraction": "Desativar extração de imagem",
 	"Disable image extraction from the PDF. If Use LLM is enabled, images will be automatically captioned. Defaults to False.": "Desabilite a extração de imagens do PDF. Se a opção Usar LLM estiver habilitada, as imagens serão legendadas automaticamente. O padrão é Falso.",
@@ -512,7 +512,7 @@
 	"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Insira pares \"token:bias_value\" separados por vírgulas (exemplo: 5432:100, 413:-100)",
 	"Enter Config in JSON format": "Insira a configuração no formato JSON",
 	"Enter content for the pending user info overlay. Leave empty for default.": "Insira o conteúdo para a sobreposição de informações pendentes do usuário. Deixe em branco para o padrão.",
-	"Enter coordinates (e.g. 51.505, -0.09)": "",
+	"Enter coordinates (e.g. 51.505, -0.09)": "Insira as coordenadas (por exemplo, 51,505, -0,09)",
 	"Enter Datalab Marker API Base URL": "Insira o URL base da API do marcador do Datalab",
 	"Enter Datalab Marker API Key": "Insira a chave da API do marcador do Datalab",
 	"Enter description": "Digite a descrição",
@@ -535,8 +535,8 @@
 	"Enter Github Raw URL": "Digite a URL bruta do Github",
 	"Enter Google PSE API Key": "Digite a Chave API do Google PSE",
 	"Enter Google PSE Engine Id": "Digite o ID do Motor do Google PSE",
-	"Enter hex color (e.g. #FF0000)": "",
-	"Enter ID": "",
+	"Enter hex color (e.g. #FF0000)": "Digite a cor hexadecimal (por exemplo, #FF0000)",
+	"Enter ID": "Digite o ID",
 	"Enter Image Size (e.g. 512x512)": "Digite o Tamanho da Imagem (por exemplo, 512x512)",
 	"Enter Jina API Key": "Digite a Chave API Jina",
 	"Enter JSON config (e.g., {\"disable_links\": true})": "Insira a configuração JSON (por exemplo, {\"disable_links\": true})",
@@ -590,8 +590,8 @@
 	"Enter Top K Reranker": "Digite o Top K Reranker",
 	"Enter URL (e.g. http://127.0.0.1:7860/)": "Digite a URL (por exemplo, http://127.0.0.1:7860/)",
 	"Enter URL (e.g. http://localhost:11434)": "Digite a URL (por exemplo, http://localhost:11434)",
-	"Enter value": "",
-	"Enter value (true/false)": "",
+	"Enter value": "Insira o valor",
+	"Enter value (true/false)": "Insira o valor (true/false)",
 	"Enter Yacy Password": "Digite a senha do Yacy",
 	"Enter Yacy URL (e.g. http://yacy.example.com:8090)": "Digite a URL do Yacy (por exemplo, http://yacy.example.com:8090)",
 	"Enter Yacy Username": "Digite o nome de usuário do Yacy",
@@ -599,7 +599,7 @@
 	"Enter your current password": "Digite sua senha atual",
 	"Enter Your Email": "Digite Seu Email",
 	"Enter Your Full Name": "Digite Seu Nome Completo",
-	"Enter your gender": "",
+	"Enter your gender": "Digite seu gênero",
 	"Enter your message": "Digite sua mensagem",
 	"Enter your name": "Digite seu nome",
 	"Enter Your Name": "Digite Seu Nome",
@@ -610,14 +610,14 @@
 	"Enter your webhook URL": "Insira a URL do seu webhook",
 	"Error": "Erro",
 	"ERROR": "ERRO",
-	"Error accessing directory": "",
+	"Error accessing directory": "Erro ao acessar o diretório",
 	"Error accessing Google Drive: {{error}}": "Erro ao acessar o Google Drive: {{error}}",
 	"Error accessing media devices.": "Erro ao acessar dispositivos de mídia.",
 	"Error starting recording.": "Erro ao iniciar a gravação.",
 	"Error unloading model: {{error}}": "Erro ao descarregar modelo: {{error}}",
 	"Error uploading file: {{error}}": "Erro ao carregar o arquivo: {{error}}",
-	"Error: A model with the ID '{{modelId}}' already exists. Please select a different ID to proceed.": "",
-	"Error: Model ID cannot be empty. Please enter a valid ID to proceed.": "",
+	"Error: A model with the ID '{{modelId}}' already exists. Please select a different ID to proceed.": "Erro: Já existe um modelo com o ID '{{modelId}}'. Selecione um ID diferente para prosseguir.",
+	"Error: Model ID cannot be empty. Please enter a valid ID to proceed.": "Erro: O ID do modelo não pode estar vazio. Insira um ID válido para prosseguir.",
 	"Evaluations": "Avaliações",
 	"Everyone": "Todos",
 	"Exa API Key": "",
@@ -667,7 +667,7 @@
 	"Failed to generate title": "Falha ao gerar título",
 	"Failed to load chat preview": "Falha ao carregar a pré-visualização do chat",
 	"Failed to load file content.": "Falha ao carregar o conteúdo do arquivo.",
-	"Failed to move chat": "",
+	"Failed to move chat": "Falha ao mover o chat",
 	"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
 	"Failed to save connections": "Falha ao salvar conexões",
 	"Failed to save conversation": "Falha ao salvar a conversa",
@@ -681,7 +681,7 @@
 	"Feedback History": "Histórico de comentários",
 	"Feedbacks": "Comentários",
 	"Feel free to add specific details": "Sinta-se à vontade para adicionar detalhes específicos",
-	"Female": "",
+	"Female": "Feminino",
 	"File": "Arquivo",
 	"File added successfully.": "Arquivo adicionado com sucesso.",
 	"File content updated successfully.": "Arquivo de conteúdo atualizado com sucesso.",
@@ -715,7 +715,7 @@
 	"Force OCR on all pages of the PDF. This can lead to worse results if you have good text in your PDFs. Defaults to False.": "Forçar OCR em todas as páginas do PDF. Isso pode levar a resultados piores se você tiver texto de boa qualidade nos seus PDFs. O padrão é Falso.",
 	"Forge new paths": "Trilhar novos caminhos",
 	"Form": "Formulário",
-	"Format Lines": "",
+	"Format Lines": "Formatar linhas",
 	"Format the lines in the output. Defaults to False. If set to True, the lines will be formatted to detect inline math and styles.": "Formata as linhas na saída. O padrão é Falso. Se definido como Verdadeiro, as linhas serão formatadas para detectar matemática e estilos embutidos.",
 	"Format your variables using brackets like this:": "Formate suas variáveis usando colchetes como este:",
 	"Forwards system user session credentials to authenticate": "Encaminha as credenciais da sessão do usuário do sistema para autenticação",
@@ -737,7 +737,7 @@
 	"Gemini": "",
 	"Gemini API Config": "Configuração da API Gemini",
 	"Gemini API Key is required.": "A chave da API Gemini é necessária.",
-	"Gender": "",
+	"Gender": "Gênero",
 	"General": "Geral",
 	"Generate": "Gerar",
 	"Generate an image": "Gerar uma imagem",
@@ -765,7 +765,7 @@
 	"H2": "",
 	"H3": "",
 	"Haptic Feedback": "",
-	"Height": "",
+	"Height": "Altura",
 	"Hello, {{name}}": "Olá, {{name}}",
 	"Help": "Ajuda",
 	"Help us create the best community leaderboard by sharing your feedback history!": "Ajude-nos a criar o melhor ranking da comunidade compartilhando sua historia de comentários!",
@@ -774,7 +774,7 @@
 	"Hide": "Ocultar",
 	"Hide from Sidebar": "Ocultar da barra lateral",
 	"Hide Model": "Ocultar modelo",
-	"High": "",
+	"High": "Alto",
 	"High Contrast Mode": "Modo de alto contraste",
 	"Home": "Início",
 	"Host": "Servidor",
@@ -819,11 +819,11 @@
 	"Includes SharePoint": "Inclui o SharePoint",
 	"Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive.": "Influencia a rapidez com que o algoritmo responde ao feedback do texto gerado. Uma taxa de aprendizado menor resultará em ajustes mais lentos, enquanto uma taxa de aprendizado maior tornará o algoritmo mais responsivo.",
 	"Info": "Informação",
-	"Initials": "",
+	"Initials": "Iniciais",
 	"Inject the entire content as context for comprehensive processing, this is recommended for complex queries.": "Injete todo o conteúdo como contexto para processamento abrangente; isso é recomendado para consultas complexas.",
 	"Input": "Entrada",
 	"Input commands": "Comandos de entrada",
-	"Input Key (e.g. text, unet_name, steps)": "",
+	"Input Key (e.g. text, unet_name, steps)": "Chave de entrada (por exemplo, texto, unet_name, etapas)",
 	"Input Variables": "Variáveis de entrada",
 	"Insert": "Inserir",
 	"Insert Follow-Up Prompt to Input": "Inserir prompt de acompanhamento para entrada",
@@ -835,7 +835,7 @@
 	"Invalid file content": "Conteúdo de arquivo inválido",
 	"Invalid file format.": "Formato de arquivo inválido.",
 	"Invalid JSON file": "Arquivo JSON inválido",
-	"Invalid JSON format for ComfyUI Workflow.": "",
+	"Invalid JSON format for ComfyUI Workflow.": "Formato JSON inválido para o fluxo de trabalho do ComfyUI.",
 	"Invalid JSON format in Additional Config": "Formato JSON inválido na configuração adicional",
 	"Invalid Tag": "Tag Inválida",
 	"is typing...": "está digitando...",
@@ -855,16 +855,16 @@
 	"Keep Follow-Up Prompts in Chat": "Mantenha prompts de acompanhamento no chat",
 	"Keep in Sidebar": "Manter na barra lateral",
 	"Key": "Chave",
-	"Key is required": "",
+	"Key is required": "Chave é obrigatória",
 	"Keyboard shortcuts": "Atalhos de Teclado",
 	"Knowledge": "Conhecimento",
 	"Knowledge Access": "Acesso ao Conhecimento",
 	"Knowledge Base": "Base de Conhecimento",
 	"Knowledge created successfully.": "Conhecimento criado com sucesso.",
 	"Knowledge deleted successfully.": "Conhecimento excluído com sucesso.",
-	"Knowledge Description": "",
-	"Knowledge Name": "",
-	"Knowledge Public Sharing": "",
+	"Knowledge Description": "Descrição da Base de Conhecimento",
+	"Knowledge Name": "Nome da Base de Conhecimento",
+	"Knowledge Public Sharing": "Compartilhamento Público da Base de Conhecimento",
 	"Knowledge reset successfully.": "Conhecimento resetado com sucesso.",
 	"Knowledge updated successfully": "Conhecimento atualizado com sucesso",
 	"Kokoro.js (Browser)": "",
@@ -903,13 +903,13 @@
 	"Local Task Model": "Modelo de Tarefa Local",
 	"Location access not allowed": "Acesso ao local não permitido",
 	"Lost": "Perdeu",
-	"Low": "",
+	"Low": "Baixo",
 	"LTR": "Esquerda para Direita",
 	"Made by Open WebUI Community": "Feito pela Comunidade OpenWebUI",
 	"Make password visible in the user interface": "Tornar a senha visível na interface do usuário",
 	"Make sure to enclose them with": "Certifique-se de encerrá-los com",
 	"Make sure to export a workflow.json file as API format from ComfyUI.": "Certifique-se de exportar um arquivo workflow.json como o formato API do ComfyUI.",
-	"Male": "",
+	"Male": "Masculino",
 	"Manage": "Gerenciar",
 	"Manage Direct Connections": "Gerenciar conexões diretas",
 	"Manage Models": "Gerenciar modelos",
@@ -918,16 +918,16 @@
 	"Manage OpenAI API Connections": "Gerenciar Conexões OpenAI API",
 	"Manage Pipelines": "Gerenciar Pipelines",
 	"Manage Tool Servers": "Gerenciar servidores de ferramentas",
-	"Manage your account information.": "",
+	"Manage your account information.": "Gerencie as informações da sua conta.",
 	"March": "Março",
 	"Markdown": "",
-	"Markdown (Header)": "",
+	"Markdown (Header)": "Markdown (Cabeçalho)",
 	"Max Speakers": "",
 	"Max Upload Count": "Quantidade máxima de anexos",
 	"Max Upload Size": "Tamanho máximo do arquivo",
 	"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Por favor, tente novamente mais tarde.",
 	"May": "Maio",
-	"Medium": "",
+	"Medium": "Médio",
 	"Memories accessible by LLMs will be shown here.": "Memórias acessíveis por LLMs serão mostradas aqui.",
 	"Memory": "Memória",
 	"Memory added successfully": "Memória adicionada com sucesso",
@@ -942,7 +942,7 @@
 	"Microsoft OneDrive (personal)": "",
 	"Microsoft OneDrive (work/school)": "",
 	"Mistral OCR": "",
-	"Mistral OCR API Key required.": "",
+	"Mistral OCR API Key required.": "Chave de API do Mistral OCR necessária.",
 	"Model": "Modelo",
 	"Model '{{modelName}}' has been successfully downloaded.": "Modelo '{{modelName}}' foi baixado com sucesso.",
 	"Model '{{modelTag}}' is already in queue for downloading.": "Modelo '{{modelTag}}' já está na fila para download.",
@@ -963,7 +963,7 @@
 	"Model ID is required.": "É necessário o ID do modelo.",
 	"Model IDs": "IDs do modelo",
 	"Model Name": "Nome do Modelo",
-	"Model name already exists, please choose a different one": "",
+	"Model name already exists, please choose a different one": "O nome do modelo já existe, escolha um diferente",
 	"Model Name is required.": "O nome do modelo é obrigatório.",
 	"Model not selected": "Modelo não selecionado",
 	"Model Params": "Parâmetros do Modelo",
@@ -981,9 +981,9 @@
 	"More": "Mais",
 	"More Concise": "Mais conciso",
 	"More Options": "Mais opções",
-	"Move": "",
+	"Move": "Mover",
 	"Name": "Nome",
-	"Name and ID are required, please fill them out": "",
+	"Name and ID are required, please fill them out": "Nome e documento de identidade são obrigatórios, por favor preencha-os",
 	"Name your knowledge base": "Nome da sua base de conhecimento",
 	"Native": "Nativo",
 	"New Button": "Novo Botão",
@@ -993,7 +993,7 @@
 	"New Note": "Nota Nota",
 	"New Password": "Nova Senha",
 	"New Tool": "Nova Ferrameta",
-	"new-channel": "",
+	"new-channel": "novo-canal",
 	"Next message": "Próxima mensagem",
 	"No chats found": "Nenhum chat encontrado",
 	"No chats found for this user.": "Nenhum chat encontrado para este usuário.",
@@ -1002,7 +1002,7 @@
 	"No content found": "Nenhum conteúdo encontrado",
 	"No content found in file.": "Nenhum conteúdo encontrado no arquivo.",
 	"No content to speak": "Sem conteúdo para falar",
-	"No conversation to save": "",
+	"No conversation to save": "Nenhuma conversa para salvar",
 	"No distance available": "Sem distância disponível",
 	"No feedbacks found": "Comentários não encontrados",
 	"No file selected": "Nenhum arquivo selecionado",
@@ -1074,7 +1074,7 @@
 	"OpenAI API settings updated": "Configurações OpenAI atualizadas",
 	"OpenAI URL/Key required.": "URL/Chave OpenAI necessária.",
 	"openapi.json URL or Path": "",
-	"Optional": "",
+	"Optional": "Opcional",
 	"Options for running a local vision-language model in the picture description. The parameters refer to a model hosted on Hugging Face. This parameter is mutually exclusive with picture_description_api.": "Opções para executar um modelo de linguagem de visão local na descrição da imagem. Os parâmetros referem-se a um modelo hospedado no Hugging Face. Este parâmetro é mutuamente exclusivo com picture_description_api.",
 	"or": "ou",
 	"Ordered List": "Lista ordenada",
@@ -1100,13 +1100,13 @@
 	"Permission denied when accessing microphone": "Permissão negada ao acessar o microfone",
 	"Permission denied when accessing microphone: {{error}}": "Permissão negada ao acessar o microfone: {{error}}",
 	"Permissions": "Permissões",
-	"Perplexity API Key": "",
-	"Perplexity Model": "",
-	"Perplexity Search Context Usage": "",
+	"Perplexity API Key": "Chave API da Perplexity",
+	"Perplexity Model": "Modelo Perplexity",
+	"Perplexity Search Context Usage": "Uso do contexto de pesquisa do Perplexity",
 	"Personalization": "Personalização",
-	"Picture Description API Config": "",
-	"Picture Description Local Config": "",
-	"Picture Description Mode": "",
+	"Picture Description API Config": "Configuração da API de descrição de imagem",
+	"Picture Description Local Config": "Descrição da imagem Configuração local",
+	"Picture Description Mode": "Modo de descrição de imagem",
 	"Pin": "Fixar",
 	"Pinned": "Fixado",
 	"Pioneer insights": "Insights pioneiros",
@@ -1124,7 +1124,7 @@
 	"Playwright WebSocket URL": "",
 	"Please carefully review the following warnings:": "Por favor, revise cuidadosamente os seguintes avisos:",
 	"Please do not close the settings page while loading the model.": "Não feche a página de configurações enquanto estiver carregando o modelo.",
-	"Please enter a message or attach a file.": "",
+	"Please enter a message or attach a file.": "Por favor, insira uma mensagem ou anexe um arquivo.",
 	"Please enter a prompt": "Por favor, digite um prompt",
 	"Please enter a valid path": "Por favor, insira um caminho válido",
 	"Please enter a valid URL": "Por favor, insira uma URL válido",
@@ -1135,7 +1135,7 @@
 	"Please wait until all files are uploaded.": "Aguarde até que todos os arquivos sejam enviados.",
 	"Port": "Porta",
 	"Positive attitude": "Atitude positiva",
-	"Prefer not to say": "",
+	"Prefer not to say": "Prefiro não dizer",
 	"Prefix ID": "Prefixo ID",
 	"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "O ID de prefixo é utilizado para evitar conflitos com outras conexões, adicionando um prefixo aos IDs dos modelos - deixe em branco para desativar.",
 	"Prevent file creation": "Impedir a criação de arquivos",
@@ -1154,7 +1154,7 @@
 	"Prompt updated successfully": "Prompt atualizado com sucesso",
 	"Prompts": "Prompts",
 	"Prompts Access": "Acessar prompts",
-	"Prompts Public Sharing": "",
+	"Prompts Public Sharing": "Compartilhamento Público dos Prompts",
 	"Public": "Público",
 	"Pull \"{{searchValue}}\" from Ollama.com": "Obter \"{{searchValue}}\" de Ollama.com",
 	"Pull a model from Ollama.com": "Obter um modelo de Ollama.com",
@@ -1182,7 +1182,7 @@
 	"Releases": "Lançamentos",
 	"Relevance": "Relevância",
 	"Relevance Threshold": "Limiar de Relevância",
-	"Remember Dismissal": "",
+	"Remember Dismissal": "Lembrar da dispensa",
 	"Remove": "Remover",
 	"Remove {{MODELID}} from list.": "Remover {{MODELID}} da lista.",
 	"Remove file": "Remover arquivo",
@@ -1193,7 +1193,7 @@
 	"Rename": "Renomear",
 	"Reorder Models": "Reordenar modelos",
 	"Reply in Thread": "Responder no tópico",
-	"Reranking Engine": "",
+	"Reranking Engine": "Motor de Reclassificação",
 	"Reranking Model": "Modelo de Reclassificação",
 	"Reset": "Redefinir",
 	"Reset All Models": "Redefinir todos os modelos",
@@ -1222,14 +1222,14 @@
 	"Save & Create": "Salvar e Criar",
 	"Save & Update": "Salvar e Atualizar",
 	"Save As Copy": "Salvar Como Cópia",
-	"Save Chat": "",
+	"Save Chat": "Salvar Chat",
 	"Save Tag": "Salvar Tag",
 	"Saved": "Armazenado",
 	"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Salvar registros de chat diretamente no armazenamento do seu navegador não é mais suportado. Por favor, reserve um momento para baixar e excluir seus registros de chat clicando no botão abaixo. Não se preocupe, você pode facilmente reimportar seus registros de chat para o backend através de",
-	"Scroll On Branch Change": "",
+	"Scroll On Branch Change": "Rolar na mudança de ramo",
 	"Search": "Pesquisar",
 	"Search a model": "Pesquisar um modelo",
-	"Search all emojis": "",
+	"Search all emojis": "Pesquisar todos os emojis",
 	"Search Base": "Pesquisar base",
 	"Search Chats": "Pesquisar Chats",
 	"Search Collection": "Pesquisar Coleção",
@@ -1259,32 +1259,32 @@
 	"See readme.md for instructions": "Veja readme.md para instruções",
 	"See what's new": "Veja o que há de novo",
 	"Seed": "Seed",
-	"Select": "",
+	"Select": "Selecionar",
 	"Select a base model": "Selecione um modelo base",
-	"Select a base model (e.g. llama3, gpt-4o)": "",
+	"Select a base model (e.g. llama3, gpt-4o)": "Selecione um modelo básico (por exemplo, llama3, gpt-4o)",
 	"Select a conversation to preview": "Selecione uma conversa para visualizar",
 	"Select a engine": "Selecione um motor",
 	"Select a function": "Selecione uma função",
 	"Select a group": "Selecionar grupo",
-	"Select a language": "",
-	"Select a mode": "",
+	"Select a language": "Selecione um idioma",
+	"Select a mode": "Selecione um modo",
 	"Select a model": "Selecione um modelo",
-	"Select a model (optional)": "",
+	"Select a model (optional)": "Selecione um modelo (opcional)",
 	"Select a pipeline": "Selecione um pipeline",
 	"Select a pipeline url": "Selecione uma URL de pipeline",
-	"Select a reranking model engine": "",
-	"Select a role": "",
-	"Select a theme": "",
+	"Select a reranking model engine": "Selecione um mecanismo de modelo de reclassificação",
+	"Select a role": "Selecione uma função",
+	"Select a theme": "Selecione um tema",
 	"Select a tool": "Selecione uma ferramenta",
-	"Select a voice": "",
+	"Select a voice": "Selecione uma voz",
 	"Select an auth method": "Selecione um método de autenticação",
-	"Select an embedding model engine": "",
-	"Select an engine": "",
+	"Select an embedding model engine": "Selecione um mecanismo de modelo de embedding",
+	"Select an engine": "Selecione um motor",
 	"Select an Ollama instance": "Selecione uma instância do Ollama",
-	"Select an output format": "",
+	"Select an output format": "Selecione um formato de saída",
 	"Select dtype": "",
 	"Select Engine": "Selecionar Motor",
-	"Select how to split message text for TTS requests": "",
+	"Select how to split message text for TTS requests": "Selecione como dividir o texto da mensagem para solicitações TTS",
 	"Select Knowledge": "Selecionar Conhecimento",
 	"Select only one model to call": "Selecione apenas um modelo para chamar",
 	"Selected model(s) do not support image inputs": "Modelo(s) selecionado(s) não suportam entradas de imagem",
@@ -1301,7 +1301,7 @@
 	"Serply API Key": "Chave da API Serply",
 	"Serpstack API Key": "Chave da API Serpstack",
 	"Server connection verified": "Conexão com o servidor verificada",
-	"Session": "",
+	"Session": "Sessão",
 	"Set as default": "Definir como padrão",
 	"Set CFG Scale": "Definir escala CFG",
 	"Set Default Model": "Definir Modelo Padrão",
@@ -1353,7 +1353,7 @@
 	"sk-1234": "",
 	"Skip Cache": "Pular cache",
 	"Skip the cache and re-run the inference. Defaults to False.": "Ignore o cache e execute a inferência novamente. O padrão é Falso.",
-	"Something went wrong :/": "",
+	"Something went wrong :/": "Algo deu errado :/",
 	"Sonar": "",
 	"Sonar Deep Research": "",
 	"Sonar Pro": "",
@@ -1381,7 +1381,7 @@
 	"Stylized PDF Export": "Exportação de PDF estilizado",
 	"Subtitle (e.g. about the Roman Empire)": "Subtítulo (por exemplo, sobre o Império Romano)",
 	"Success": "Sucesso",
-	"Successfully imported {{userCount}} users.": "",
+	"Successfully imported {{userCount}} users.": "{{userCount}} usuários importados com sucesso.",
 	"Successfully updated.": "Atualizado com sucesso.",
 	"Suggest a change": "Sugira uma mudança",
 	"Suggested": "Sugerido",
@@ -1406,7 +1406,7 @@
 	"Tell us more:": "Conte-nos mais:",
 	"Temperature": "Temperatura",
 	"Temporary Chat": "Chat temporário",
-	"Temporary Chat by Default": "",
+	"Temporary Chat by Default": "Chat temporário por padrão",
 	"Text Splitter": "Divisor de Texto",
 	"Text-to-Speech": "Texto-para-Fala",
 	"Text-to-Speech Engine": "Motor de Texto para Fala",
@@ -1516,7 +1516,7 @@
 	"Unarchive All Archived Chats": "Desarquivar Todos os Chats Arquivados",
 	"Unarchive Chat": "Desarquivar Chat",
 	"Underline": "Sublinhado",
-	"Unloads {{FROM_NOW}}": "",
+	"Unloads {{FROM_NOW}}": "Descarrega {{FROM_NOW}}",
 	"Unlock mysteries": "Desvendar mistérios",
 	"Unpin": "Desfixar",
 	"Unravel secrets": "Desvendar segredos",
@@ -1539,9 +1539,9 @@
 	"Upload Files": "Carregar Arquivos",
 	"Upload Pipeline": "Fazer upload de Pipeline",
 	"Upload Progress": "Progresso do Upload",
-	"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
+	"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Progresso do upload: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
 	"URL": "",
-	"URL is required": "",
+	"URL is required": "URL é obrigratória",
 	"URL Mode": "Modo URL",
 	"Usage": "Uso",
 	"Use '#' in the prompt input to load and include your knowledge.": "Usar '#' no prompt para carregar e incluir seus conhecimentos.",
@@ -1561,7 +1561,7 @@
 	"Using Focused Retrieval": "Usando Recuperação Focada",
 	"Using the default arena model with all models. Click the plus button to add custom models.": "Usando a arena de modelos padrão para todos os modelos. Clique no botão mais para adicionar modelos personalizados.",
 	"Valid time units:": "Unidades de tempo válidas:",
-	"Validate certificate": "",
+	"Validate certificate": "Validar certificado",
 	"Valves": "Válvulas",
 	"Valves updated": "Válvulas atualizadas",
 	"Valves updated successfully": "Válvulas atualizadas com sucesso",
@@ -1576,7 +1576,7 @@
 	"Vision": "Visão",
 	"Voice": "Voz",
 	"Voice Input": "Entrada de voz",
-	"Voice mode": "",
+	"Voice mode": "Modo de voz",
 	"Warning": "Aviso",
 	"Warning:": "Aviso:",
 	"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Aviso: Habilitar isso permitirá que os usuários façam upload de código arbitrário no servidor.",
@@ -1602,9 +1602,9 @@
 	"wherever you are": "onde quer que você esteja.",
 	"Whether to paginate the output. Each page will be separated by a horizontal rule and page number. Defaults to False.": "Se a saída deve ser paginada. Cada página será separada por uma régua horizontal e um número de página. O padrão é Falso.",
 	"Whisper (Local)": "Whisper (Local)",
-	"Why?": "Por que",
+	"Why?": "Por que?",
 	"Widescreen Mode": "Modo Tela Cheia",
-	"Width": "",
+	"Width": "Largura",
 	"Won": "Ganhou",
 	"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text.": "Funciona em conjunto com o top-k. Um valor mais alto (por exemplo, 0,95) resultará em um texto mais diverso, enquanto um valor mais baixo (por exemplo, 0,5) gerará um texto mais focado e conservador.",
 	"Workspace": "Espaço de Trabalho",
@@ -1628,7 +1628,7 @@
 	"You have shared this chat": "Você compartilhou este chat",
 	"You're a helpful assistant.": "Você é um assistente útil.",
 	"You're now logged in.": "Você agora está logado.",
-	"Your Account": "",
+	"Your Account": "Sua conta",
 	"Your account status is currently pending activation.": "O status da sua conta está atualmente aguardando ativação.",
 	"Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "Toda a sua contribuição irá diretamente para o desenvolvedor do plugin; o Open WebUI não retém nenhuma porcentagem. No entanto, a plataforma de financiamento escolhida pode ter suas próprias taxas.",
 	"Youtube": "Youtube",