diff --git a/.env.example b/.env.example index 3d2aafc0..05854cd0 100644 --- a/.env.example +++ b/.env.example @@ -9,4 +9,8 @@ OPENAI_API_KEY='' # DO NOT TRACK SCARF_NO_ANALYTICS=true -DO_NOT_TRACK=true \ No newline at end of file +DO_NOT_TRACK=true + +# Use locally bundled version of the LiteLLM cost map json +# to avoid repetitive startup connections +LITELLM_LOCAL_MODEL_COST_MAP="True" diff --git a/Dockerfile b/Dockerfile index 5f0c13cb..f76f8c32 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,6 +31,10 @@ ENV WEBUI_AUTH_TRUSTED_EMAIL_HEADER "" ENV SCARF_NO_ANALYTICS true ENV DO_NOT_TRACK true +# Use locally bundled version of the LiteLLM cost map json +# to avoid repetitive startup connections +ENV LITELLM_LOCAL_MODEL_COST_MAP="True" + ######## Preloaded models ######## # whisper TTS Settings ENV WHISPER_MODEL="base" diff --git a/backend/apps/web/routers/utils.py b/backend/apps/web/routers/utils.py index ef5717f1..0ee75cfe 100644 --- a/backend/apps/web/routers/utils.py +++ b/backend/apps/web/routers/utils.py @@ -1,16 +1,11 @@ -from fastapi import APIRouter, UploadFile, File, BackgroundTasks +from fastapi import APIRouter, UploadFile, File, Response from fastapi import Depends, HTTPException, status from starlette.responses import StreamingResponse, FileResponse - - from pydantic import BaseModel +from fpdf import FPDF import markdown -import requests -import os -import aiohttp -import json from utils.utils import get_admin_user @@ -18,7 +13,7 @@ from utils.misc import calculate_sha256, get_gravatar_url from config import OLLAMA_BASE_URLS, DATA_DIR, UPLOAD_DIR from constants import ERROR_MESSAGES - +from typing import List router = APIRouter() @@ -41,6 +36,59 @@ async def get_html_from_markdown( return {"html": markdown.markdown(form_data.md)} +class ChatForm(BaseModel): + title: str + messages: List[dict] + + +@router.post("/pdf") +async def download_chat_as_pdf( + form_data: ChatForm, +): + pdf = FPDF() + pdf.add_page() + + STATIC_DIR = "./static" + FONTS_DIR = f"{STATIC_DIR}/fonts" + + pdf.add_font("NotoSans", "", f"{FONTS_DIR}/NotoSans-Regular.ttf") + pdf.add_font("NotoSans", "b", f"{FONTS_DIR}/NotoSans-Bold.ttf") + pdf.add_font("NotoSans", "i", f"{FONTS_DIR}/NotoSans-Italic.ttf") + pdf.add_font("NotoSansKR", "", f"{FONTS_DIR}/NotoSansKR-Regular.ttf") + pdf.add_font("NotoSansJP", "", f"{FONTS_DIR}/NotoSansJP-Regular.ttf") + + pdf.set_font("NotoSans", size=12) + pdf.set_fallback_fonts(["NotoSansKR", "NotoSansJP"]) + + pdf.set_auto_page_break(auto=True, margin=15) + + # Adjust the effective page width for multi_cell + effective_page_width = ( + pdf.w - 2 * pdf.l_margin - 10 + ) # Subtracted an additional 10 for extra padding + + # Add chat messages + for message in form_data.messages: + role = message["role"] + content = message["content"] + pdf.set_font("NotoSans", "B", size=14) # Bold for the role + pdf.multi_cell(effective_page_width, 10, f"{role.upper()}", 0, "L") + pdf.ln(1) # Extra space between messages + + pdf.set_font("NotoSans", size=10) # Regular for content + pdf.multi_cell(effective_page_width, 6, content, 0, "L") + pdf.ln(1.5) # Extra space between messages + + # Save the pdf with name .pdf + pdf_bytes = pdf.output() + + return Response( + content=bytes(pdf_bytes), + media_type="application/pdf", + headers={"Content-Disposition": f"attachment;filename=chat.pdf"}, + ) + + @router.get("/db/download") async def download_db(user=Depends(get_admin_user)): diff --git a/backend/requirements.txt b/backend/requirements.txt index 66f3ee0f..c815d93d 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -42,6 +42,8 @@ xlrd opencv-python-headless rapidocr-onnxruntime +fpdf2 + faster-whisper PyJWT diff --git a/backend/static/fonts/NotoSans-Bold.ttf b/backend/static/fonts/NotoSans-Bold.ttf new file mode 100644 index 00000000..d84248ed Binary files /dev/null and b/backend/static/fonts/NotoSans-Bold.ttf differ diff --git a/backend/static/fonts/NotoSans-Italic.ttf b/backend/static/fonts/NotoSans-Italic.ttf new file mode 100644 index 00000000..c40c3562 Binary files /dev/null and b/backend/static/fonts/NotoSans-Italic.ttf differ diff --git a/backend/static/fonts/NotoSans-Regular.ttf b/backend/static/fonts/NotoSans-Regular.ttf new file mode 100644 index 00000000..fa4cff50 Binary files /dev/null and b/backend/static/fonts/NotoSans-Regular.ttf differ diff --git a/backend/static/fonts/NotoSansJP-Regular.ttf b/backend/static/fonts/NotoSansJP-Regular.ttf new file mode 100644 index 00000000..1583096a Binary files /dev/null and b/backend/static/fonts/NotoSansJP-Regular.ttf differ diff --git a/backend/static/fonts/NotoSansKR-Regular.ttf b/backend/static/fonts/NotoSansKR-Regular.ttf new file mode 100644 index 00000000..1b14d324 Binary files /dev/null and b/backend/static/fonts/NotoSansKR-Regular.ttf differ diff --git a/src/lib/apis/utils/index.ts b/src/lib/apis/utils/index.ts index 53e93688..ef6b0d25 100644 --- a/src/lib/apis/utils/index.ts +++ b/src/lib/apis/utils/index.ts @@ -22,6 +22,32 @@ export const getGravatarUrl = async (email: string) => { return res; }; +export const downloadChatAsPDF = async (chat: object) => { + let error = null; + + const blob = await fetch(`${WEBUI_API_BASE_URL}/utils/pdf`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + title: chat.title, + messages: chat.messages + }) + }) + .then(async (res) => { + if (!res.ok) throw await res.json(); + return res.blob(); + }) + .catch((err) => { + console.log(err); + error = err; + return null; + }); + + return blob; +}; + export const getHTMLFromMarkdown = async (md: string) => { let error = null; diff --git a/src/lib/components/layout/Navbar/Menu.svelte b/src/lib/components/layout/Navbar/Menu.svelte index ae505ec6..65b8a35b 100644 --- a/src/lib/components/layout/Navbar/Menu.svelte +++ b/src/lib/components/layout/Navbar/Menu.svelte @@ -11,6 +11,8 @@ import Dropdown from '$lib/components/common/Dropdown.svelte'; import Tags from '$lib/components/common/Tags.svelte'; + import { WEBUI_BASE_URL } from '$lib/constants'; + import { downloadChatAsPDF } from '$lib/apis/utils'; export let shareEnabled: boolean = false; export let shareHandler: Function; @@ -25,7 +27,7 @@ export let onClose: Function = () => {}; - const downloadChatAsTxt = async () => { + const downloadTxt = async () => { const _chat = chat.chat; console.log('download', chat); @@ -40,54 +42,29 @@ saveAs(blob, `chat-${_chat.title}.txt`); }; - const downloadChatAsPdf = async () => { + const downloadPdf = async () => { const _chat = chat.chat; console.log('download', chat); - const doc = new jsPDF(); + const blob = await downloadChatAsPDF(_chat); - // Initialize y-coordinate for text placement - let yPos = 10; - const pageHeight = doc.internal.pageSize.height; + // Create a URL for the blob + const url = window.URL.createObjectURL(blob); - // Function to check if new text exceeds the current page height - function checkAndAddNewPage() { - if (yPos > pageHeight - 10) { - doc.addPage(); - yPos = 10; // Reset yPos for the new page - } - } + // Create a link element to trigger the download + const a = document.createElement('a'); + a.href = url; + a.download = `chat-${_chat.title}.pdf`; - // Function to add text with specific style - function addStyledText(text, isTitle = false) { - // Set font style and size based on the parameters - doc.setFont('helvetica', isTitle ? 'bold' : 'normal'); - doc.setFontSize(isTitle ? 12 : 10); + // Append the link to the body and click it programmatically + document.body.appendChild(a); + a.click(); - const textMargin = 7; + // Remove the link from the body + document.body.removeChild(a); - // Split text into lines to ensure it fits within the page width - const lines = doc.splitTextToSize(text, 180); // Adjust the width as needed - - lines.forEach((line) => { - checkAndAddNewPage(); // Check if we need a new page before adding more text - doc.text(line, 10, yPos); - yPos += textMargin; // Increment yPos for the next line - }); - - // Add extra space after a block of text - yPos += 2; - } - - _chat.messages.forEach((message, i) => { - // Add user text in bold - doc.setFont('helvetica', 'normal', 'bold'); - - addStyledText(message.role.toUpperCase(), { isTitle: true }); - addStyledText(message.content); - }); - - doc.save(`chat-${_chat.title}.pdf`); + // Revoke the URL to release memory + window.URL.revokeObjectURL(url); }; @@ -193,7 +170,7 @@ { - downloadChatAsTxt(); + downloadTxt(); }} >
Plain text (.txt)
@@ -202,7 +179,7 @@ { - downloadChatAsPdf(); + downloadPdf(); }} >
PDF document (.pdf)
diff --git a/src/lib/i18n/locales/languages.json b/src/lib/i18n/locales/languages.json index 691b68d2..4c7128e4 100644 --- a/src/lib/i18n/locales/languages.json +++ b/src/lib/i18n/locales/languages.json @@ -51,10 +51,18 @@ "code": "pt-PT", "title": "Portuguese (Portugal)" }, + { + "code": "pt-BR", + "title": "Portuguese (Brazil)" + }, { "code": "ru-RU", "title": "Russian (Russia)" }, + { + "code": "tr-TR", + "title": "Turkish" + }, { "code": "uk-UA", "title": "Ukrainian" diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json new file mode 100644 index 00000000..0fd345c1 --- /dev/null +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -0,0 +1,363 @@ +{ + "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 's' ou '-1' para não expirar.", + "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api`)": "(por exemplo, `sh webui.sh --api`)", + "(latest)": "(mais recente)", + "{{modelName}} is thinking...": "{{modelName}} está pensando...", + "{{webUIName}} Backend Required": "{{webUIName}} Backend Necessário", + "a user": "um usuário", + "About": "Sobre", + "Account": "Conta", + "Action": "Ação", + "Add a model": "Adicionar um modelo", + "Add a model tag name": "Adicionar um nome de tag de modelo", + "Add a short description about what this modelfile does": "Adicione uma breve descrição sobre o que este arquivo de modelo faz", + "Add a short title for this prompt": "Adicione um título curto para este prompt", + "Add a tag": "Adicionar uma tag", + "Add Docs": "Adicionar Documentos", + "Add Files": "Adicionar Arquivos", + "Add message": "Adicionar mensagem", + "add tags": "adicionar tags", + "Adjusting these settings will apply changes universally to all users.": "Ajustar essas configurações aplicará alterações universalmente a todos os usuários.", + "admin": "administrador", + "Admin Panel": "Painel do Administrador", + "Admin Settings": "Configurações do Administrador", + "Advanced Parameters": "Parâmetros Avançados", + "all": "todos", + "All Users": "Todos os Usuários", + "Allow": "Permitir", + "Allow Chat Deletion": "Permitir Exclusão de Bate-papo", + "alphanumeric characters and hyphens": "caracteres alfanuméricos e hífens", + "Already have an account?": "Já tem uma conta?", + "an assistant": "um assistente", + "and": "e", + "API Base URL": "URL Base da API", + "API Key": "Chave da API", + "API RPM": "API RPM", + "are allowed - Activate this command by typing": "são permitidos - Ative este comando digitando", + "Are you sure?": "Tem certeza?", + "Audio": "Áudio", + "Auto-playback response": "Reprodução automática da resposta", + "Auto-send input after 3 sec.": "Enviar entrada automaticamente após 3 segundos.", + "AUTOMATIC1111 Base URL": "URL Base do AUTOMATIC1111", + "AUTOMATIC1111 Base URL is required.": "A URL Base do AUTOMATIC1111 é obrigatória.", + "available!": "disponível!", + "Back": "Voltar", + "Builder Mode": "Modo de Construtor", + "Cancel": "Cancelar", + "Categories": "Categorias", + "Change Password": "Alterar Senha", + "Chat": "Bate-papo", + "Chat History": "Histórico de Bate-papo", + "Chat History is off for this browser.": "O histórico de bate-papo está desativado para este navegador.", + "Chats": "Bate-papos", + "Check Again": "Verifique novamente", + "Check for updates": "Verificar atualizações", + "Checking for updates...": "Verificando atualizações...", + "Choose a model before saving...": "Escolha um modelo antes de salvar...", + "Chunk Overlap": "Sobreposição de Fragmento", + "Chunk Params": "Parâmetros de Fragmento", + "Chunk Size": "Tamanho do Fragmento", + "Click here for help.": "Clique aqui para obter ajuda.", + "Click here to check other modelfiles.": "Clique aqui para verificar outros arquivos de modelo.", + "Click here to select": "Clique aqui para selecionar", + "Click here to select documents.": "Clique aqui para selecionar documentos.", + "click here.": "clique aqui.", + "Click on the user role button to change a user's role.": "Clique no botão de função do usuário para alterar a função de um usuário.", + "Close": "Fechar", + "Collection": "Coleção", + "Command": "Comando", + "Confirm Password": "Confirmar Senha", + "Connections": "Conexões", + "Content": "Conteúdo", + "Context Length": "Comprimento do Contexto", + "Conversation Mode": "Modo de Conversa", + "Copy last code block": "Copiar último bloco de código", + "Copy last response": "Copiar última resposta", + "Copying to clipboard was successful!": "Cópia para a área de transferência bem-sucedida!", + "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Crie uma frase concisa de 3 a 5 palavras como cabeçalho para a seguinte consulta, aderindo estritamente ao limite de 3 a 5 palavras e evitando o uso da palavra 'título':", + "Create a modelfile": "Criar um arquivo de modelo", + "Create Account": "Criar Conta", + "Created at": "Criado em", + "Created by": "Criado por", + "Current Model": "Modelo Atual", + "Current Password": "Senha Atual", + "Custom": "Personalizado", + "Customize Ollama models for a specific purpose": "Personalize os modelos Ollama para um propósito específico", + "Dark": "Escuro", + "Database": "Banco de dados", + "DD/MM/YYYY HH:mm": "DD/MM/AAAA HH:mm", + "Default": "Padrão", + "Default (Automatic1111)": "Padrão (Automatic1111)", + "Default (Web API)": "Padrão (API Web)", + "Default model updated": "Modelo padrão atualizado", + "Default Prompt Suggestions": "Sugestões de Prompt Padrão", + "Default User Role": "Função de Usuário Padrão", + "delete": "excluir", + "Delete a model": "Excluir um modelo", + "Delete chat": "Excluir bate-papo", + "Delete Chats": "Excluir Bate-papos", + "Deleted {{deleteModelTag}}": "{{deleteModelTag}} excluído", + "Deleted {tagName}": "{tagName} excluído", + "Description": "Descrição", + "Desktop Notifications": "Notificações da Área de Trabalho", + "Disabled": "Desativado", + "Discover a modelfile": "Descobrir um arquivo de modelo", + "Discover a prompt": "Descobrir um prompt", + "Discover, download, and explore custom prompts": "Descubra, baixe e explore prompts personalizados", + "Discover, download, and explore model presets": "Descubra, baixe e explore predefinições de modelo", + "Display the username instead of You in the Chat": "Exibir o nome de usuário em vez de Você no Bate-papo", + "Document": "Documento", + "Document Settings": "Configurações de Documento", + "Documents": "Documentos", + "does not make any external connections, and your data stays securely on your locally hosted server.": "não faz conexões externas e seus dados permanecem seguros em seu servidor hospedado localmente.", + "Don't Allow": "Não Permitir", + "Don't have an account?": "Não tem uma conta?", + "Download as a File": "Baixar como Arquivo", + "Download Database": "Baixar Banco de Dados", + "Drop any files here to add to the conversation": "Solte os arquivos aqui para adicionar à conversa", + "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.", + "Edit Doc": "Editar Documento", + "Edit User": "Editar Usuário", + "Email": "E-mail", + "Enable Chat History": "Ativar Histórico de Bate-papo", + "Enable New Sign Ups": "Ativar Novas Inscrições", + "Enabled": "Ativado", + "Enter {{role}} message here": "Digite a mensagem de {{role}} aqui", + "Enter API Key": "Digite a Chave da API", + "Enter Chunk Overlap": "Digite a Sobreposição de Fragmento", + "Enter Chunk Size": "Digite o Tamanho do Fragmento", + "Enter Image Size (e.g. 512x512)": "Digite o Tamanho da Imagem (por exemplo, 512x512)", + "Enter LiteLLM API Base URL (litellm_params.api_base)": "Digite a URL Base da API LiteLLM (litellm_params.api_base)", + "Enter LiteLLM API Key (litellm_params.api_key)": "Digite a Chave da API LiteLLM (litellm_params.api_key)", + "Enter LiteLLM API RPM (litellm_params.rpm)": "Digite o RPM da API LiteLLM (litellm_params.rpm)", + "Enter LiteLLM Model (litellm_params.model)": "Digite o Modelo LiteLLM (litellm_params.model)", + "Enter Max Tokens (litellm_params.max_tokens)": "Digite o Máximo de Tokens (litellm_params.max_tokens)", + "Enter model tag (e.g. {{modelTag}})": "Digite a tag do modelo (por exemplo, {{modelTag}})", + "Enter Number of Steps (e.g. 50)": "Digite o Número de Etapas (por exemplo, 50)", + "Enter stop sequence": "Digite a sequência de parada", + "Enter Top K": "Digite o Top K", + "Enter URL (e.g. http://127.0.0.1:7860/)": "Digite a URL (por exemplo, http://127.0.0.1:7860/)", + "Enter Your Email": "Digite seu E-mail", + "Enter Your Full Name": "Digite seu Nome Completo", + "Enter Your Password": "Digite sua Senha", + "Experimental": "Experimental", + "Export All Chats (All Users)": "Exportar Todos os Bate-papos (Todos os Usuários)", + "Export Chats": "Exportar Bate-papos", + "Export Documents Mapping": "Exportar Mapeamento de Documentos", + "Export Modelfiles": "Exportar Arquivos de Modelo", + "Export Prompts": "Exportar Prompts", + "Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência", + "File Mode": "Modo de Arquivo", + "File not found.": "Arquivo não encontrado.", + "Focus chat input": "Focar entrada de bate-papo", + "Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:", + "From (Base Model)": "De (Modelo Base)", + "Full Screen Mode": "Modo de Tela Cheia", + "General": "Geral", + "General Settings": "Configurações Gerais", + "Hello, {{name}}": "Olá, {{name}}", + "Hide": "Ocultar", + "Hide Additional Params": "Ocultar Parâmetros Adicionais", + "How can I help you today?": "Como posso ajudá-lo hoje?", + "Image Generation (Experimental)": "Geração de Imagens (Experimental)", + "Image Generation Engine": "Mecanismo de Geração de Imagens", + "Image Settings": "Configurações de Imagem", + "Images": "Imagens", + "Import Chats": "Importar Bate-papos", + "Import Documents Mapping": "Importar Mapeamento de Documentos", + "Import Modelfiles": "Importar Arquivos de Modelo", + "Import Prompts": "Importar Prompts", + "Include `--api` flag when running stable-diffusion-webui": "Inclua a flag `--api` ao executar stable-diffusion-webui", + "Interface": "Interface", + "join our Discord for help.": "junte-se ao nosso Discord para obter ajuda.", + "JSON": "JSON", + "JWT Expiration": "Expiração JWT", + "JWT Token": "Token JWT", + "Keep Alive": "Manter Vivo", + "Keyboard shortcuts": "Atalhos de teclado", + "Language": "Idioma", + "Light": "Claro", + "Listening...": "Ouvindo...", + "LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.", + "Made by OpenWebUI Community": "Feito pela Comunidade OpenWebUI", + "Make sure to enclose them with": "Certifique-se de colocá-los entre", + "Manage LiteLLM Models": "Gerenciar Modelos LiteLLM", + "Manage Models": "Gerenciar Modelos", + "Manage Ollama Models": "Gerenciar Modelos Ollama", + "Max Tokens": "Máximo de Tokens", + "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Máximo de 3 modelos podem ser baixados simultaneamente. Tente novamente mais tarde.", + "Mirostat": "Mirostat", + "Mirostat Eta": "Mirostat Eta", + "Mirostat Tau": "Mirostat Tau", + "MMMM DD, YYYY": "MMMM DD, AAAA", + "Model '{{modelName}}' has been successfully downloaded.": "O modelo '{{modelName}}' foi baixado com sucesso.", + "Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para download.", + "Model {{modelId}} not found": "Modelo {{modelId}} não encontrado", + "Model {{modelName}} already exists.": "O modelo {{modelName}} já existe.", + "Model Name": "Nome do Modelo", + "Model not selected": "Modelo não selecionado", + "Model Tag Name": "Nome da Tag do Modelo", + "Model Whitelisting": "Lista de Permissões de Modelo", + "Model(s) Whitelisted": "Modelo(s) na Lista de Permissões", + "Modelfile": "Arquivo de Modelo", + "Modelfile Advanced Settings": "Configurações Avançadas do Arquivo de Modelo", + "Modelfile Content": "Conteúdo do Arquivo de Modelo", + "Modelfiles": "Arquivos de Modelo", + "Models": "Modelos", + "My Documents": "Meus Documentos", + "My Modelfiles": "Meus Arquivos de Modelo", + "My Prompts": "Meus Prompts", + "Name": "Nome", + "Name Tag": "Nome da Tag", + "Name your modelfile": "Nomeie seu arquivo de modelo", + "New Chat": "Novo Bate-papo", + "New Password": "Nova Senha", + "Not sure what to add?": "Não tem certeza do que adicionar?", + "Not sure what to write? Switch to": "Não tem certeza do que escrever? Mude para", + "Off": "Desligado", + "Okay, Let's Go!": "Ok, Vamos Lá!", + "Ollama Base URL": "URL Base do Ollama", + "Ollama Version": "Versão do Ollama", + "On": "Ligado", + "Only": "Somente", + "Only alphanumeric characters and hyphens are allowed in the command string.": "Somente caracteres alfanuméricos e hífens são permitidos na string de comando.", + "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Opa! Aguente firme! Seus arquivos ainda estão no forno de processamento. Estamos cozinhando-os com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.", + "Oops! Looks like the URL is invalid. Please double-check and try again.": "Opa! Parece que a URL é inválida. Verifique novamente e tente outra vez.", + "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.", + "Open": "Abrir", + "Open AI": "OpenAI", + "Open AI (Dall-E)": "OpenAI (Dall-E)", + "Open new chat": "Abrir novo bate-papo", + "OpenAI API": "API OpenAI", + "OpenAI API Key": "Chave da API OpenAI", + "OpenAI API Key is required.": "A Chave da API OpenAI é obrigatória.", + "or": "ou", + "Parameters": "Parâmetros", + "Password": "Senha", + "PDF Extract Images (OCR)": "Extrair Imagens de PDF (OCR)", + "pending": "pendente", + "Permission denied when accessing microphone: {{error}}": "Permissão negada ao acessar o microfone: {{error}}", + "Playground": "Playground", + "Profile": "Perfil", + "Prompt Content": "Conteúdo do Prompt", + "Prompt suggestions": "Sugestões de Prompt", + "Prompts": "Prompts", + "Pull a model from Ollama.com": "Extrair um modelo do Ollama.com", + "Pull Progress": "Progresso da Extração", + "Query Params": "Parâmetros de Consulta", + "RAG Template": "Modelo RAG", + "Raw Format": "Formato Bruto", + "Record voice": "Gravar voz", + "Redirecting you to OpenWebUI Community": "Redirecionando você para a Comunidade OpenWebUI", + "Release Notes": "Notas de Lançamento", + "Repeat Last N": "Repetir Últimos N", + "Repeat Penalty": "Penalidade de Repetição", + "Request Mode": "Modo de Solicitação", + "Reset Vector Storage": "Redefinir Armazenamento de Vetor", + "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", + "Role": "Função", + "Rosé Pine": "Rosé Pine", + "Rosé Pine Dawn": "Rosé Pine Dawn", + "Save": "Salvar", + "Save & Create": "Salvar e Criar", + "Save & Submit": "Salvar e Enviar", + "Save & Update": "Salvar e Atualizar", + "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 logs de bate-papo diretamente no armazenamento do seu navegador não é mais suportado. Reserve um momento para baixar e excluir seus logs de bate-papo clicando no botão abaixo. Não se preocupe, você pode facilmente reimportar seus logs de bate-papo para o backend através de", + "Scan": "Digitalizar", + "Scan complete!": "Digitalização concluída!", + "Scan for documents from {{path}}": "Digitalizar documentos de {{path}}", + "Search": "Pesquisar", + "Search Documents": "Pesquisar Documentos", + "Search Prompts": "Pesquisar Prompts", + "See readme.md for instructions": "Consulte readme.md para obter instruções", + "See what's new": "Veja o que há de novo", + "Seed": "Semente", + "Select a mode": "Selecione um modo", + "Select a model": "Selecione um modelo", + "Select an Ollama instance": "Selecione uma instância Ollama", + "Send a Message": "Enviar uma Mensagem", + "Send message": "Enviar mensagem", + "Server connection verified": "Conexão com o servidor verificada", + "Set as default": "Definir como padrão", + "Set Default Model": "Definir Modelo Padrão", + "Set Image Size": "Definir Tamanho da Imagem", + "Set Steps": "Definir Etapas", + "Set Title Auto-Generation Model": "Definir Modelo de Geração Automática de Título", + "Set Voice": "Definir Voz", + "Settings": "Configurações", + "Settings saved successfully!": "Configurações salvas com sucesso!", + "Share to OpenWebUI Community": "Compartilhar com a Comunidade OpenWebUI", + "short-summary": "resumo-curto", + "Show": "Mostrar", + "Show Additional Params": "Mostrar Parâmetros Adicionais", + "Show shortcuts": "Mostrar", + "sidebar": "barra lateral", + "Sign in": "Entrar", + "Sign Out": "Sair", + "Sign up": "Inscrever-se", + "Speech recognition error: {{error}}": "Erro de reconhecimento de fala: {{error}}", + "Speech-to-Text Engine": "Mecanismo de Fala para Texto", + "SpeechRecognition API is not supported in this browser.": "A API SpeechRecognition não é suportada neste navegador.", + "Stop Sequence": "Sequência de Parada", + "STT Settings": "Configurações STT", + "Submit": "Enviar", + "Success": "Sucesso", + "Successfully updated.": "Atualizado com sucesso.", + "Sync All": "Sincronizar Tudo", + "System": "Sistema", + "System Prompt": "Prompt do Sistema", + "Tags": "Tags", + "Temperature": "Temperatura", + "Template": "Modelo", + "Text Completion": "Complemento de Texto", + "Text-to-Speech Engine": "Mecanismo de Texto para Fala", + "Tfs Z": "Tfs Z", + "Theme": "Tema", + "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança em seu banco de dados de backend. Obrigado!", + "This setting does not sync across browsers or devices.": "Esta configuração não sincroniza entre navegadores ou dispositivos.", + "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada de bate-papo após cada substituição.", + "Title": "Título", + "Title Auto-Generation": "Geração Automática de Título", + "Title Generation Prompt": "Prompt de Geração de Título", + "to": "para", + "To access the available model names for downloading,": "Para acessar os nomes de modelo disponíveis para download,", + "To access the GGUF models available for downloading,": "Para acessar os modelos GGUF disponíveis para download,", + "to chat input.": "para a entrada de bate-papo.", + "Toggle settings": "Alternar configurações", + "Toggle sidebar": "Alternar barra lateral", + "Top K": "Top K", + "Top P": "Top P", + "Trouble accessing Ollama?": "Problemas para acessar o Ollama?", + "TTS Settings": "Configurações TTS", + "Type Hugging Face Resolve (Download) URL": "Digite a URL do Hugging Face Resolve (Download)", + "Uh-oh! There was an issue connecting to {{provider}}.": "Opa! Houve um problema ao conectar-se a {{provider}}.", + "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de arquivo desconhecido '{{file_type}}', mas aceitando e tratando como texto simples", + "Update password": "Atualizar senha", + "Upload a GGUF model": "Carregar um modelo GGUF", + "Upload files": "Carregar arquivos", + "Upload Progress": "Progresso do Carregamento", + "URL Mode": "Modo de URL", + "Use '#' in the prompt input to load and select your documents.": "Use '#' na entrada do prompt para carregar e selecionar seus documentos.", + "Use Gravatar": "Usar Gravatar", + "user": "usuário", + "User Permissions": "Permissões do Usuário", + "Users": "Usuários", + "Utilize": "Utilizar", + "Valid time units:": "Unidades de tempo válidas:", + "variable": "variável", + "variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.", + "Version": "Versão", + "Web": "Web", + "WebUI Add-ons": "Complementos WebUI", + "WebUI Settings": "Configurações WebUI", + "WebUI will make requests to": "WebUI fará solicitações para", + "What’s New in": "O que há de novo em", + "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quando o histórico está desativado, novos bate-papos neste navegador não aparecerão em seu histórico em nenhum dos seus dispositivos.", + "Whisper (Local)": "Whisper (Local)", + "Write a prompt suggestion (e.g. Who are you?)": "Escreva uma sugestão de prompt (por exemplo, Quem é você?)", + "Write a summary in 50 words that summarizes [topic or keyword].": "Escreva um resumo em 50 palavras que resuma [tópico ou palavra-chave].", + "You": "Você", + "You're a helpful assistant.": "Você é um assistente útil.", + "You're now logged in.": "Você está conectado agora." +} diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json new file mode 100644 index 00000000..124899ce --- /dev/null +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -0,0 +1,363 @@ +{ + "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' veya süresiz için '-1'.", + "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api`)": "(örn. `sh webui.sh --api`)", + "(latest)": "(en son)", + "{{modelName}} is thinking...": "{{modelName}} düşünüyor...", + "{{webUIName}} Backend Required": "{{webUIName}} Arkayüz Gerekli", + "a user": "bir kullanıcı", + "About": "Hakkında", + "Account": "Hesap", + "Action": "Eylem", + "Add a model": "Bir model ekleyin", + "Add a model tag name": "Bir model etiket adı ekleyin", + "Add a short description about what this modelfile does": "Bu model dosyasının ne yaptığı hakkında kısa bir açıklama ekleyin", + "Add a short title for this prompt": "Bu prompt için kısa bir başlık ekleyin", + "Add a tag": "Bir etiket ekleyin", + "Add Docs": "Dökümanlar Ekle", + "Add Files": "Dosyalar Ekle", + "Add message": "Mesaj ekle", + "add tags": "etiketler ekle", + "Adjusting these settings will apply changes universally to all users.": "Bu ayarları ayarlamak değişiklikleri tüm kullanıcılara evrensel olarak uygular.", + "admin": "yönetici", + "Admin Panel": "Yönetici Paneli", + "Admin Settings": "Yönetici Ayarları", + "Advanced Parameters": "Gelişmiş Parametreler", + "all": "tümü", + "All Users": "Tüm Kullanıcılar", + "Allow": "İzin ver", + "Allow Chat Deletion": "Sohbet Silmeye İzin Ver", + "alphanumeric characters and hyphens": "alfanumerik karakterler ve tireler", + "Already have an account?": "Zaten bir hesabınız mı var?", + "an assistant": "bir asistan", + "and": "ve", + "API Base URL": "API Temel URL", + "API Key": "API Anahtarı", + "API RPM": "API RPM", + "are allowed - Activate this command by typing": "izin verilir - Bu komutu yazarak etkinleştirin", + "Are you sure?": "Emin misiniz?", + "Audio": "Ses", + "Auto-playback response": "Yanıtı otomatik oynatma", + "Auto-send input after 3 sec.": "3 saniye sonra otomatik olarak gönder", + "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Temel URL", + "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Temel URL gereklidir.", + "available!": "mevcut!", + "Back": "Geri", + "Builder Mode": "Oluşturucu Modu", + "Cancel": "İptal", + "Categories": "Kategoriler", + "Change Password": "Parola Değiştir", + "Chat": "Sohbet", + "Chat History": "Sohbet Geçmişi", + "Chat History is off for this browser.": "Bu tarayıcı için sohbet geçmişi kapalı.", + "Chats": "Sohbetler", + "Check Again": "Tekrar Kontrol Et", + "Check for updates": "Güncellemeleri kontrol et", + "Checking for updates...": "Güncellemeler kontrol ediliyor...", + "Choose a model before saving...": "Kaydetmeden önce bir model seçin...", + "Chunk Overlap": "Chunk Çakışması", + "Chunk Params": "Chunk Parametreleri", + "Chunk Size": "Chunk Boyutu", + "Click here for help.": "Yardım için buraya tıklayın.", + "Click here to check other modelfiles.": "Diğer model dosyalarını kontrol etmek için buraya tıklayın.", + "Click here to select": "Seçmek için buraya tıklayın", + "Click here to select documents.": "Belgeleri seçmek için buraya tıklayın.", + "click here.": "buraya tıklayın.", + "Click on the user role button to change a user's role.": "Bir kullanıcının rolünü değiştirmek için kullanıcı rolü düğmesine tıklayın.", + "Close": "Kapat", + "Collection": "Koleksiyon", + "Command": "Komut", + "Confirm Password": "Parolayı Onayla", + "Connections": "Bağlantılar", + "Content": "İçerik", + "Context Length": "Bağlam Uzunluğu", + "Conversation Mode": "Sohbet Modu", + "Copy last code block": "Son kod bloğunu kopyala", + "Copy last response": "Son yanıtı kopyala", + "Copying to clipboard was successful!": "Panoya kopyalama başarılı!", + "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Aşağıdaki sorgu için başlık olarak 3-5 kelimelik kısa ve öz bir ifade oluşturun, 3-5 kelime sınırına kesinlikle uyun ve 'başlık' kelimesini kullanmaktan kaçının:", + "Create a modelfile": "Bir model dosyası oluştur", + "Create Account": "Hesap Oluştur", + "Created at": "Oluşturulma tarihi", + "Created by": "Oluşturan", + "Current Model": "Mevcut Model", + "Current Password": "Mevcut Parola", + "Custom": "Özel", + "Customize Ollama models for a specific purpose": "Ollama modellerini belirli bir amaç için özelleştirin", + "Dark": "Koyu", + "Database": "Veritabanı", + "DD/MM/YYYY HH:mm": "DD/MM/YYYY HH:mm", + "Default": "Varsayılan", + "Default (Automatic1111)": "Varsayılan (Automatic1111)", + "Default (Web API)": "Varsayılan (Web API)", + "Default model updated": "Varsayılan model güncellendi", + "Default Prompt Suggestions": "Varsayılan Prompt Önerileri", + "Default User Role": "Varsayılan Kullanıcı Rolü", + "delete": "sil", + "Delete a model": "Bir modeli sil", + "Delete chat": "Sohbeti sil", + "Delete Chats": "Sohbetleri Sil", + "Deleted {{deleteModelTag}}": "{{deleteModelTag}} silindi", + "Deleted {tagName}": "{tagName} silindi", + "Description": "Açıklama", + "Desktop Notifications": "Masaüstü Bildirimleri", + "Disabled": "Devre Dışı", + "Discover a modelfile": "Bir model dosyası keşfedin", + "Discover a prompt": "Bir prompt keşfedin", + "Discover, download, and explore custom prompts": "Özel promptları keşfedin, indirin ve inceleyin", + "Discover, download, and explore model presets": "Model ön ayarlarını keşfedin, indirin ve inceleyin", + "Display the username instead of You in the Chat": "Sohbet'te Siz yerine kullanıcı adını göster", + "Document": "Belge", + "Document Settings": "Belge Ayarları", + "Documents": "Belgeler", + "does not make any external connections, and your data stays securely on your locally hosted server.": "herhangi bir harici bağlantı yapmaz ve verileriniz güvenli bir şekilde yerel olarak barındırılan sunucunuzda kalır.", + "Don't Allow": "İzin Verme", + "Don't have an account?": "Hesabınız yok mu?", + "Download as a File": "Dosya olarak indir", + "Download Database": "Veritabanını İndir", + "Drop any files here to add to the conversation": "Sohbete eklemek istediğiniz dosyaları buraya bırakın", + "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "örn. '30s', '10m'. Geçerli zaman birimleri 's', 'm', 'h'.", + "Edit Doc": "Belgeyi Düzenle", + "Edit User": "Kullanıcıyı Düzenle", + "Email": "E-posta", + "Enable Chat History": "Sohbet Geçmişini Etkinleştir", + "Enable New Sign Ups": "Yeni Kayıtları Etkinleştir", + "Enabled": "Etkin", + "Enter {{role}} message here": "Buraya {{role}} mesajını girin", + "Enter API Key": "API Anahtarını Girin", + "Enter Chunk Overlap": "Chunk Örtüşmesini Girin", + "Enter Chunk Size": "Chunk Boyutunu Girin", + "Enter Image Size (e.g. 512x512)": "Görüntü Boyutunu Girin (örn. 512x512)", + "Enter LiteLLM API Base URL (litellm_params.api_base)": "LiteLLM API Ana URL'sini Girin (litellm_params.api_base)", + "Enter LiteLLM API Key (litellm_params.api_key)": "LiteLLM API Anahtarını Girin (litellm_params.api_key)", + "Enter LiteLLM API RPM (litellm_params.rpm)": "LiteLLM API RPM'ini Girin (litellm_params.rpm)", + "Enter LiteLLM Model (litellm_params.model)": "LiteLLM Modelini Girin (litellm_params.model)", + "Enter Max Tokens (litellm_params.max_tokens)": "Maksimum Token Sayısını Girin (litellm_params.max_tokens)", + "Enter model tag (e.g. {{modelTag}})": "Model etiketini girin (örn. {{modelTag}})", + "Enter Number of Steps (e.g. 50)": "Adım Sayısını Girin (örn. 50)", + "Enter stop sequence": "Durdurma dizisini girin", + "Enter Top K": "Top K'yı girin", + "Enter URL (e.g. http://127.0.0.1:7860/)": "URL'yi Girin (örn. http://127.0.0.1:7860/)", + "Enter Your Email": "E-postanızı Girin", + "Enter Your Full Name": "Tam Adınızı Girin", + "Enter Your Password": "Parolanızı Girin", + "Experimental": "Deneysel", + "Export All Chats (All Users)": "Tüm Sohbetleri Dışa Aktar (Tüm Kullanıcılar)", + "Export Chats": "Sohbetleri Dışa Aktar", + "Export Documents Mapping": "Belge Eşlemesini Dışa Aktar", + "Export Modelfiles": "Model Dosyalarını Dışa Aktar", + "Export Prompts": "Promptları Dışa Aktar", + "Failed to read clipboard contents": "Pano içeriği okunamadı", + "File Mode": "Dosya Modu", + "File not found.": "Dosya bulunamadı.", + "Focus chat input": "Sohbet girişine odaklan", + "Format your variables using square brackets like this:": "Değişkenlerinizi şu şekilde kare parantezlerle biçimlendirin:", + "From (Base Model)": "(Temel Model)'den", + "Full Screen Mode": "Tam Ekran Modu", + "General": "Genel", + "General Settings": "Genel Ayarlar", + "Hello, {{name}}": "Merhaba, {{name}}", + "Hide": "Gizle", + "Hide Additional Params": "Ek Parametreleri Gizle", + "How can I help you today?": "Bugün size nasıl yardımcı olabilirim?", + "Image Generation (Experimental)": "Görüntü Oluşturma (Deneysel)", + "Image Generation Engine": "Görüntü Oluşturma Motoru", + "Image Settings": "Görüntü Ayarları", + "Images": "Görüntüler", + "Import Chats": "Sohbetleri İçe Aktar", + "Import Documents Mapping": "Belge Eşlemesini İçe Aktar", + "Import Modelfiles": "Model Dosyalarını İçe Aktar", + "Import Prompts": "Promptları İçe Aktar", + "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui çalıştırılırken `--api` bayrağını dahil edin", + "Interface": "Arayüz", + "join our Discord for help.": "yardım için Discord'umuza katılın.", + "JSON": "JSON", + "JWT Expiration": "JWT Bitişi", + "JWT Token": "JWT Token", + "Keep Alive": "Canlı Tut", + "Keyboard shortcuts": "Klavye kısayolları", + "Language": "Dil", + "Light": "Açık", + "Listening...": "Dinleniyor...", + "LLMs can make mistakes. Verify important information.": "LLM'ler hata yapabilir. Önemli bilgileri doğrulayın.", + "Made by OpenWebUI Community": "OpenWebUI Topluluğu tarafından yapılmıştır", + "Make sure to enclose them with": "Değişkenlerinizi şu şekilde biçimlendirin:", + "Manage LiteLLM Models": "LiteLLM Modellerini Yönet", + "Manage Models": "Modelleri Yönet", + "Manage Ollama Models": "Ollama Modellerini Yönet", + "Max Tokens": "Maksimum Token", + "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Aynı anda en fazla 3 model indirilebilir. Lütfen daha sonra tekrar deneyin.", + "Mirostat": "Mirostat", + "Mirostat Eta": "Mirostat Eta", + "Mirostat Tau": "Mirostat Tau", + "MMMM DD, YYYY": "DD MMMM YYYY", + "Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' başarıyla indirildi.", + "Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' zaten indirme sırasında.", + "Model {{modelId}} not found": "{{modelId}} bulunamadı", + "Model {{modelName}} already exists.": "{{modelName}} zaten mevcut.", + "Model Name": "Model Adı", + "Model not selected": "Model seçilmedi", + "Model Tag Name": "Model Etiket Adı", + "Model Whitelisting": "Model Beyaz Listeye Alma", + "Model(s) Whitelisted": "Model(ler) Beyaz Listeye Alındı", + "Modelfile": "Model Dosyası", + "Modelfile Advanced Settings": "Model Dosyası Gelişmiş Ayarları", + "Modelfile Content": "Model Dosyası İçeriği", + "Modelfiles": "Model Dosyaları", + "Models": "Modeller", + "My Documents": "Belgelerim", + "My Modelfiles": "Model Dosyalarım", + "My Prompts": "Promptlarım", + "Name": "Ad", + "Name Tag": "Ad Etiketi", + "Name your modelfile": "Model dosyanıza ad verin", + "New Chat": "Yeni Sohbet", + "New Password": "Yeni Parola", + "Not sure what to add?": "Ne ekleyeceğinizden emin değil misiniz?", + "Not sure what to write? Switch to": "Ne yazacağınızdan emin değil misiniz? Şuraya geçin", + "Off": "Kapalı", + "Okay, Let's Go!": "Tamam, Hadi Başlayalım!", + "Ollama Base URL": "Ollama Temel URL", + "Ollama Version": "Ollama Sürümü", + "On": "Açık", + "Only": "Yalnızca", + "Only alphanumeric characters and hyphens are allowed in the command string.": "Komut dizisinde yalnızca alfasayısal karakterler ve tireler kabul edilir.", + "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Hop! Biraz sabırlı ol! Dosyaların hala hazırlama fırınında. Onları ağzınıza layık olana kadar pişiriyoruz :) Lütfen sabırlı olun; hazır olduklarında size haber vereceğiz.", + "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hop! URL geçersiz gibi görünüyor. Lütfen tekrar kontrol edin ve yeniden deneyin.", + "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hop! Desteklenmeyen bir yöntem kullanıyorsunuz (yalnızca önyüz). Lütfen WebUI'yi arkayüzden sunun.", + "Open": "Aç", + "Open AI": "Open AI", + "Open AI (Dall-E)": "Open AI (Dall-E)", + "Open new chat": "Yeni sohbet aç", + "OpenAI API": "OpenAI API", + "OpenAI API Key": "OpenAI API Anahtarı", + "OpenAI API Key is required.": "OpenAI API Anahtarı gereklidir.", + "or": "veya", + "Parameters": "Parametreler", + "Password": "Parola", + "PDF Extract Images (OCR)": "PDF Görüntülerini Çıkart (OCR)", + "pending": "beklemede", + "Permission denied when accessing microphone: {{error}}": "Mikrofona erişim izni reddedildi: {{error}}", + "Playground": "Oyun Alanı", + "Profile": "Profil", + "Prompt Content": "Prompt İçeriği", + "Prompt suggestions": "Prompt önerileri", + "Prompts": "Promptlar", + "Pull a model from Ollama.com": "Ollama.com'dan bir model çekin", + "Pull Progress": "Çekme İlerlemesi", + "Query Params": "Sorgu Parametreleri", + "RAG Template": "RAG Şablonu", + "Raw Format": "Ham Format", + "Record voice": "Ses kaydı yap", + "Redirecting you to OpenWebUI Community": "OpenWebUI Topluluğuna yönlendiriliyorsunuz", + "Release Notes": "Sürüm Notları", + "Repeat Last N": "Son N'yi Tekrar Et", + "Repeat Penalty": "Tekrar Cezası", + "Request Mode": "İstek Modu", + "Reset Vector Storage": "Vektör Depolamayı Sıfırla", + "Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala", + "Role": "Rol", + "Rosé Pine": "Rosé Pine", + "Rosé Pine Dawn": "Rosé Pine Dawn", + "Save": "Kaydet", + "Save & Create": "Kaydet ve Oluştur", + "Save & Submit": "Kaydet ve Gönder", + "Save & Update": "Kaydet ve Güncelle", + "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": "Sohbet kayıtlarının doğrudan tarayıcınızın depolama alanına kaydedilmesi artık desteklenmemektedir. Lütfen aşağıdaki butona tıklayarak sohbet kayıtlarınızı indirmek ve silmek için bir dakikanızı ayırın. Endişelenmeyin, sohbet günlüklerinizi arkayüze kolayca yeniden aktarabilirsiniz:", + "Scan": "Tarama", + "Scan complete!": "Tarama tamamlandı!", + "Scan for documents from {{path}}": "{{path}} dizininden belgeleri tarayın", + "Search": "Ara", + "Search Documents": "Belgeleri Ara", + "Search Prompts": "Prompt Ara", + "See readme.md for instructions": "Yönergeler için readme.md dosyasına bakın", + "See what's new": "Yeniliklere göz atın", + "Seed": "Seed", + "Select a mode": "Bir mod seç", + "Select a model": "Bir model seç", + "Select an Ollama instance": "Bir Ollama örneği seçin", + "Send a Message": "Bir Mesaj Gönder", + "Send message": "Mesaj gönder", + "Server connection verified": "Sunucu bağlantısı doğrulandı", + "Set as default": "Varsayılan olarak ayarla", + "Set Default Model": "Varsayılan Modeli Ayarla", + "Set Image Size": "Görüntü Boyutunu Ayarla", + "Set Steps": "Adımları Ayarla", + "Set Title Auto-Generation Model": "Otomatik Başlık Oluşturma Modelini Ayarla", + "Set Voice": "Ses Ayarla", + "Settings": "Ayarlar", + "Settings saved successfully!": "Ayarlar başarıyla kaydedildi!", + "Share to OpenWebUI Community": "OpenWebUI Topluluğu ile Paylaş", + "short-summary": "kısa-özet", + "Show": "Göster", + "Show Additional Params": "Ek Parametreleri Göster", + "Show shortcuts": "Kısayolları göster", + "sidebar": "kenar çubuğu", + "Sign in": "Oturum aç", + "Sign Out": "Çıkış Yap", + "Sign up": "Kaydol", + "Speech recognition error: {{error}}": "Konuşma tanıma hatası: {{error}}", + "Speech-to-Text Engine": "Konuşmadan Metne Motoru", + "SpeechRecognition API is not supported in this browser.": "SpeechRecognition API bu tarayıcıda desteklenmiyor.", + "Stop Sequence": "Diziyi Durdur", + "STT Settings": "STT Ayarları", + "Submit": "Gönder", + "Success": "Başarılı", + "Successfully updated.": "Başarıyla güncellendi.", + "Sync All": "Tümünü Senkronize Et", + "System": "Sistem", + "System Prompt": "Sistem Promptu", + "Tags": "Etiketler", + "Temperature": "Temperature", + "Template": "Şablon", + "Text Completion": "Metin Tamamlama", + "Text-to-Speech Engine": "Metinden Sese Motoru", + "Tfs Z": "Tfs Z", + "Theme": "Tema", + "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Bu, önemli konuşmalarınızın güvenli bir şekilde arkayüz veritabanınıza kaydedildiğini garantiler. Teşekkür ederiz!", + "This setting does not sync across browsers or devices.": "Bu ayar tarayıcılar veya cihazlar arasında senkronize edilmez.", + "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "İpucu: Her değiştirmeden sonra sohbet girişinde tab tuşuna basarak birden fazla değişken yuvasını art arda güncelleyin.", + "Title": "Başlık", + "Title Auto-Generation": "Otomatik Başlık Oluşturma", + "Title Generation Prompt": "Başlık Oluşturma Promptu", + "to": "için", + "To access the available model names for downloading,": "İndirilebilir mevcut model adlarına erişmek için,", + "To access the GGUF models available for downloading,": "İndirilebilir mevcut GGUF modellerine erişmek için,", + "to chat input.": "sohbet girişine.", + "Toggle settings": "Ayarları Aç/Kapat", + "Toggle sidebar": "Kenar Çubuğunu Aç/Kapat", + "Top K": "Top K", + "Top P": "Top P", + "Trouble accessing Ollama?": "Ollama'ya erişmede sorun mu yaşıyorsunuz?", + "TTS Settings": "TTS Ayarları", + "Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (Download) URL'sini Yazın", + "Uh-oh! There was an issue connecting to {{provider}}.": "Ah! {{provider}}'a bağlanırken bir sorun oluştu.", + "Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Bilinmeyen Dosya Türü '{{file_type}}', ancak düz metin olarak kabul ediliyor ve işleniyor", + "Update password": "Parolayı Güncelle", + "Upload a GGUF model": "Bir GGUF modeli yükle", + "Upload files": "Dosyaları Yükle", + "Upload Progress": "Yükleme İlerlemesi", + "URL Mode": "URL Modu", + "Use '#' in the prompt input to load and select your documents.": "Belgelerinizi yüklemek ve seçmek için promptda '#' kullanın.", + "Use Gravatar": "Gravatar Kullan", + "user": "kullanıcı", + "User Permissions": "Kullanıcı İzinleri", + "Users": "Kullanıcılar", + "Utilize": "Kullan", + "Valid time units:": "Geçerli zaman birimleri:", + "variable": "değişken", + "variable to have them replaced with clipboard content.": "panodaki içerikle değiştirilmesi için değişken.", + "Version": "Sürüm", + "Web": "Web", + "WebUI Add-ons": "WebUI Eklentileri", + "WebUI Settings": "WebUI Ayarları", + "WebUI will make requests to": "WebUI, isteklerde bulunacak:", + "What’s New in": "Yenilikler:", + "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Geçmiş kapatıldığında, bu tarayıcıdaki yeni sohbetler hiçbir cihazınızdaki geçmişinizde görünmez.", + "Whisper (Local)": "Whisper (Yerel)", + "Write a prompt suggestion (e.g. Who are you?)": "Bir prompt önerisi yazın (örn. Sen kimsin?)", + "Write a summary in 50 words that summarizes [topic or keyword].": "[Konuyu veya anahtar kelimeyi] özetleyen 50 kelimelik bir özet yazın.", + "You": "Siz", + "You're a helpful assistant.": "Sen yardımcı bir asistansın.", + "You're now logged in.": "Şimdi oturum açtınız." +}