diff --git a/.github/dependabot.disabled b/.github/dependabot.yml similarity index 91% rename from .github/dependabot.disabled rename to .github/dependabot.yml index 5ff86b802..166376305 100644 --- a/.github/dependabot.disabled +++ b/.github/dependabot.yml @@ -4,6 +4,7 @@ updates: directory: '/backend' schedule: interval: weekly + target-branch: 'dev' - package-ecosystem: 'github-actions' directory: '/' schedule: diff --git a/CHANGELOG.md b/CHANGELOG.md index c95e7e979..be9b8ec7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,23 @@ 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.3.7] - 2024-06-29 + +### Added + +- **🌐 Enhanced Internationalization (i18n)**: Newly introduced Indonesian translation, and updated translations for Turkish, Chinese, and Catalan languages to improve user accessibility. + +### Fixed + +- **🕵️‍♂️ Browser Language Detection**: Corrected the issue where the application was not properly detecting and adapting to the browser's language settings. +- **🔐 OIDC Admin Role Assignment**: Fixed a bug where the admin role was not being assigned to the first user who signed up via OpenID Connect (OIDC). +- **💬 Chat/Completions Endpoint**: Resolved an issue where the chat/completions endpoint was non-functional when the stream option was set to False. +- **🚫 'WEBUI_AUTH' Configuration**: Addressed the problem where setting 'WEBUI_AUTH' to False was not being applied correctly. + +### Changed + +- **📦 Dependency Update**: Upgraded 'authlib' from version 1.3.0 to 1.3.1 to ensure better security and performance enhancements. + ## [0.3.6] - 2024-06-27 ### Added diff --git a/backend/apps/audio/main.py b/backend/apps/audio/main.py index 8843f376f..f866d867f 100644 --- a/backend/apps/audio/main.py +++ b/backend/apps/audio/main.py @@ -14,7 +14,6 @@ from fastapi import ( from fastapi.responses import StreamingResponse, JSONResponse, FileResponse from fastapi.middleware.cors import CORSMiddleware -from faster_whisper import WhisperModel from pydantic import BaseModel import uuid @@ -277,6 +276,8 @@ def transcribe( f.close() if app.state.config.STT_ENGINE == "": + from faster_whisper import WhisperModel + whisper_kwargs = { "model_size_or_path": WHISPER_MODEL, "device": whisper_device_type, diff --git a/backend/apps/images/main.py b/backend/apps/images/main.py index 8f1a08e04..24542ee93 100644 --- a/backend/apps/images/main.py +++ b/backend/apps/images/main.py @@ -12,7 +12,6 @@ from fastapi import ( Form, ) from fastapi.middleware.cors import CORSMiddleware -from faster_whisper import WhisperModel from constants import ERROR_MESSAGES from utils.utils import ( diff --git a/backend/apps/ollama/main.py b/backend/apps/ollama/main.py index 455dc89a5..fd4ba7b06 100644 --- a/backend/apps/ollama/main.py +++ b/backend/apps/ollama/main.py @@ -153,7 +153,7 @@ async def cleanup_response( await session.close() -async def post_streaming_url(url: str, payload: str): +async def post_streaming_url(url: str, payload: str, stream: bool = True): r = None try: session = aiohttp.ClientSession( @@ -162,12 +162,20 @@ async def post_streaming_url(url: str, payload: str): r = await session.post(url, data=payload) r.raise_for_status() - return StreamingResponse( - r.content, - status_code=r.status, - headers=dict(r.headers), - background=BackgroundTask(cleanup_response, response=r, session=session), - ) + if stream: + return StreamingResponse( + r.content, + status_code=r.status, + headers=dict(r.headers), + background=BackgroundTask( + cleanup_response, response=r, session=session + ), + ) + else: + res = await r.json() + await cleanup_response(r, session) + return res + except Exception as e: error_detail = "Open WebUI: Server Connection Error" if r is not None: @@ -963,7 +971,11 @@ async def generate_openai_chat_completion( url = app.state.config.OLLAMA_BASE_URLS[url_idx] log.info(f"url: {url}") - return await post_streaming_url(f"{url}/v1/chat/completions", json.dumps(payload)) + return await post_streaming_url( + f"{url}/v1/chat/completions", + json.dumps(payload), + stream=payload.get("stream", False), + ) @app.get("/v1/models") diff --git a/backend/apps/rag/main.py b/backend/apps/rag/main.py index 7c6974535..5e4ec03c3 100644 --- a/backend/apps/rag/main.py +++ b/backend/apps/rag/main.py @@ -48,8 +48,6 @@ import mimetypes import uuid import json -import sentence_transformers - from apps.webui.models.documents import ( Documents, DocumentForm, @@ -190,6 +188,8 @@ def update_embedding_model( update_model: bool = False, ): if embedding_model and app.state.config.RAG_EMBEDDING_ENGINE == "": + import sentence_transformers + app.state.sentence_transformer_ef = sentence_transformers.SentenceTransformer( get_model_path(embedding_model, update_model), device=DEVICE_TYPE, @@ -204,6 +204,8 @@ def update_reranking_model( update_model: bool = False, ): if reranking_model: + import sentence_transformers + app.state.sentence_transformer_rf = sentence_transformers.CrossEncoder( get_model_path(reranking_model, update_model), device=DEVICE_TYPE, diff --git a/backend/apps/rag/utils.py b/backend/apps/rag/utils.py index 7b4324d9a..3a3dad4a2 100644 --- a/backend/apps/rag/utils.py +++ b/backend/apps/rag/utils.py @@ -442,8 +442,6 @@ from langchain_core.documents import BaseDocumentCompressor, Document from langchain_core.callbacks import Callbacks from langchain_core.pydantic_v1 import Extra -from sentence_transformers import util - class RerankCompressor(BaseDocumentCompressor): embedding_function: Any @@ -468,6 +466,8 @@ class RerankCompressor(BaseDocumentCompressor): [(query, doc.page_content) for doc in documents] ) else: + from sentence_transformers import util + query_embedding = self.embedding_function(query) document_embedding = self.embedding_function( [doc.page_content for doc in documents] diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index 1ba8a080e..629055ec3 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -259,6 +259,9 @@ async def generate_function_chat_completion(form_data, user): if isinstance(line, BaseModel): line = line.model_dump_json() line = f"data: {line}" + if isinstance(line, dict): + line = f"data: {json.dumps(line)}" + try: line = line.decode("utf-8") except: diff --git a/backend/config.py b/backend/config.py index 3a825f53a..4b4b5deac 100644 --- a/backend/config.py +++ b/backend/config.py @@ -674,6 +674,13 @@ ENABLE_SIGNUP = PersistentConfig( else os.environ.get("ENABLE_SIGNUP", "True").lower() == "true" ), ) + +DEFAULT_LOCALE = PersistentConfig( + "DEFAULT_LOCALE", + "ui.default_locale", + os.environ.get("DEFAULT_LOCALE", ""), +) + DEFAULT_MODELS = PersistentConfig( "DEFAULT_MODELS", "ui.default_models", os.environ.get("DEFAULT_MODELS", None) ) diff --git a/backend/main.py b/backend/main.py index 2ed392cbd..d0cc6262e 100644 --- a/backend/main.py +++ b/backend/main.py @@ -104,6 +104,7 @@ from config import ( UPLOAD_DIR, CACHE_DIR, STATIC_DIR, + DEFAULT_LOCALE, ENABLE_OPENAI_API, ENABLE_OLLAMA_API, ENABLE_MODEL_FILTER, @@ -633,6 +634,8 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): return StreamingResponse( self.ollama_stream_wrapper(response.body_iterator, data_items), ) + + return response else: return response @@ -1748,18 +1751,11 @@ async def update_pipeline_valves( @app.get("/api/config") async def get_app_config(): - # Checking and Handling the Absence of 'ui' in CONFIG_DATA - - default_locale = "en-US" - if "ui" in CONFIG_DATA: - default_locale = CONFIG_DATA["ui"].get("default_locale", "en-US") - - # The Rest of the Function Now Uses the Variables Defined Above return { "status": True, "name": WEBUI_NAME, "version": VERSION, - "default_locale": default_locale, + "default_locale": str(DEFAULT_LOCALE), "default_models": webui_app.state.config.DEFAULT_MODELS, "default_prompt_suggestions": webui_app.state.config.DEFAULT_PROMPT_SUGGESTIONS, "features": { @@ -1972,6 +1968,11 @@ async def oauth_callback(provider: str, request: Request, response: Response): picture_url = "" if not picture_url: picture_url = "/user.png" + role = ( + "admin" + if Users.get_num_users() == 0 + else webui_app.state.config.DEFAULT_USER_ROLE + ) user = Auths.insert_new_auth( email=email, password=get_password_hash( @@ -1979,7 +1980,7 @@ async def oauth_callback(provider: str, request: Request, response: Response): ), # Random password, not used name=user_data.get("name", "User"), profile_image_url=picture_url, - role=webui_app.state.config.DEFAULT_USER_ROLE, + role=role, oauth_sub=provider_sub, ) @@ -2006,7 +2007,7 @@ async def oauth_callback(provider: str, request: Request, response: Response): # Set the cookie token response.set_cookie( key="token", - value=token, + value=jwt_token, httponly=True, # Ensures the cookie is not accessible via JavaScript ) diff --git a/backend/requirements.txt b/backend/requirements.txt index 720809471..fef686dc1 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -6,11 +6,11 @@ python-multipart==0.0.9 Flask==3.0.3 Flask-Cors==4.0.1 -python-socketio==5.11.2 +python-socketio==5.11.3 python-jose==3.3.0 passlib[bcrypt]==1.7.4 -requests==2.32.2 +requests==2.32.3 aiohttp==3.9.5 sqlalchemy==2.0.30 alembic==1.13.1 @@ -32,13 +32,13 @@ openai anthropic google-generativeai==0.5.4 -langchain==0.2.0 -langchain-community==0.2.0 -langchain-chroma==0.1.1 +langchain==0.2.6 +langchain-community==0.2.6 +langchain-chroma==0.1.2 fake-useragent==1.5.1 -chromadb==0.5.0 -sentence-transformers==2.7.0 +chromadb==0.5.3 +sentence-transformers==3.0.1 pypdf==4.2.0 docx2txt==0.8 python-pptx==0.6.23 @@ -46,7 +46,7 @@ unstructured==0.14.0 Markdown==3.6 pypandoc==1.13 pandas==2.2.2 -openpyxl==3.1.2 +openpyxl==3.1.5 pyxlsb==1.0.10 xlrd==2.0.1 validators==0.28.1 @@ -60,16 +60,16 @@ rank-bm25==0.2.2 faster-whisper==1.0.2 PyJWT[crypto]==2.8.0 -authlib==1.3.0 +authlib==1.3.1 black==24.4.2 -langfuse==2.33.0 +langfuse==2.36.2 youtube-transcript-api==0.6.2 pytube==15.0.0 extract_msg pydub -duckduckgo-search~=6.1.5 +duckduckgo-search~=6.1.7 ## Tests docker~=7.1.0 diff --git a/package-lock.json b/package-lock.json index bd4bc6892..9c009e356 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-webui", - "version": "0.3.6", + "version": "0.3.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "open-webui", - "version": "0.3.6", + "version": "0.3.7", "dependencies": { "@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-python": "^6.1.6", diff --git a/package.json b/package.json index bb17cd4c8..0ad2445df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.3.6", + "version": "0.3.7", "private": true, "scripts": { "dev": "npm run pyodide:fetch && vite dev --host", diff --git a/pyproject.toml b/pyproject.toml index 80893b15b..f8e7295cf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,7 +59,7 @@ dependencies = [ "faster-whisper==1.0.2", "PyJWT[crypto]==2.8.0", - "authlib==1.3.0", + "authlib==1.3.1", "black==24.4.2", "langfuse==2.33.0", diff --git a/src/lib/components/chat/Messages/CompareMessages.svelte b/src/lib/components/chat/Messages/CompareMessages.svelte index 12c1e9d1e..27fefb6cb 100644 --- a/src/lib/components/chat/Messages/CompareMessages.svelte +++ b/src/lib/components/chat/Messages/CompareMessages.svelte @@ -100,64 +100,68 @@ class="flex snap-x snap-mandatory overflow-x-auto scrollbar-hidden" id="responses-container-{parentMessage.id}" > - {#each Object.keys(groupedMessages) as model} - {#if groupedMessagesIdx[model] !== undefined && groupedMessages[model].messages.length > 0} - - + {#key currentMessageId} + {#each Object.keys(groupedMessages) as model} + {#if groupedMessagesIdx[model] !== undefined && groupedMessages[model].messages.length > 0} + + + {@const message = groupedMessages[model].messages[groupedMessagesIdx[model]]} -
{ - currentMessageId = groupedMessages[model].messages[groupedMessagesIdx[model]].id; +
{ + if (currentMessageId != message.id) { + currentMessageId = message.id; + let messageId = message.id; + console.log(messageId); - let messageId = groupedMessages[model].messages[groupedMessagesIdx[model]].id; + // + let messageChildrenIds = history.messages[messageId].childrenIds; + while (messageChildrenIds.length !== 0) { + messageId = messageChildrenIds.at(-1); + messageChildrenIds = history.messages[messageId].childrenIds; + } - console.log(messageId); - let messageChildrenIds = history.messages[messageId].childrenIds; - - while (messageChildrenIds.length !== 0) { - messageId = messageChildrenIds.at(-1); - messageChildrenIds = history.messages[messageId].childrenIds; - } - - history.currentId = messageId; - dispatch('change'); - }} - > - m.id)} - isLastMessage={true} - {updateChatMessages} - {confirmEditResponseMessage} - showPreviousMessage={() => showPreviousMessage(model)} - showNextMessage={() => showNextMessage(model)} - {readOnly} - {rateMessage} - {copyToClipboard} - {continueGeneration} - regenerateResponse={async (message) => { - regenerateResponse(message); - await tick(); - groupedMessagesIdx[model] = groupedMessages[model].messages.length - 1; + history.currentId = messageId; + dispatch('change'); + } }} - on:save={async (e) => { - console.log('save', e); + > + m.id)} + isLastMessage={true} + {updateChatMessages} + {confirmEditResponseMessage} + showPreviousMessage={() => showPreviousMessage(model)} + showNextMessage={() => showNextMessage(model)} + {readOnly} + {rateMessage} + {copyToClipboard} + {continueGeneration} + regenerateResponse={async (message) => { + regenerateResponse(message); + await tick(); + groupedMessagesIdx[model] = groupedMessages[model].messages.length - 1; + }} + on:save={async (e) => { + console.log('save', e); - const message = e.detail; - history.messages[message.id] = message; - await updateChatById(localStorage.token, chatId, { - messages: messages, - history: history - }); - }} - /> -
- {/if} - {/each} + const message = e.detail; + history.messages[message.id] = message; + await updateChatById(localStorage.token, chatId, { + messages: messages, + history: history + }); + }} + /> +
+ {/if} + {/each} + {/key} diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte index 7540781e1..059d436f2 100644 --- a/src/lib/components/workspace/Functions/FunctionEditor.svelte +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -27,61 +27,73 @@ } let codeEditor; - let boilerplate = `from pydantic import BaseModel + let boilerplate = `""" +title: Example Filter +author: open-webui +author_url: https://github.com/open-webui +funding_url: https://github.com/open-webui +version: 0.1 +""" + +from pydantic import BaseModel, Field from typing import Optional class Filter: class Valves(BaseModel): - max_turns: int = 4 + priority: int = Field( + default=0, description="Priority level for the filter operations." + ) + max_turns: int = Field( + default=8, description="Maximum allowable conversation turns for a user." + ) + pass + + class UserValves(BaseModel): + max_turns: int = Field( + default=4, description="Maximum allowable conversation turns for a user." + ) pass def __init__(self): # Indicates custom file handling logic. This flag helps disengage default routines in favor of custom # implementations, informing the WebUI to defer file-related operations to designated methods within this class. # Alternatively, you can remove the files directly from the body in from the inlet hook - self.file_handler = True + # self.file_handler = True # Initialize 'valves' with specific configurations. Using 'Valves' instance helps encapsulate settings, # which ensures settings are managed cohesively and not confused with operational flags like 'file_handler'. - self.valves = self.Valves(**{"max_turns": 2}) + self.valves = self.Valves() pass - def inlet(self, body: dict, user: Optional[dict] = None) -> dict: + def inlet(self, body: dict, __user__: Optional[dict] = None) -> dict: # Modify the request body or validate it before processing by the chat completion API. # This function is the pre-processor for the API where various checks on the input can be performed. # It can also modify the request before sending it to the API. print(f"inlet:{__name__}") print(f"inlet:body:{body}") - print(f"inlet:user:{user}") + print(f"inlet:user:{__user__}") - if user.get("role", "admin") in ["user", "admin"]: + if __user__.get("role", "admin") in ["user", "admin"]: messages = body.get("messages", []) - if len(messages) > self.valves.max_turns: + + max_turns = min(__user__["valves"].max_turns, self.valves.max_turns) + if len(messages) > max_turns: raise Exception( - f"Conversation turn limit exceeded. Max turns: {self.valves.max_turns}" + f"Conversation turn limit exceeded. Max turns: {max_turns}" ) return body - def outlet(self, body: dict, user: Optional[dict] = None) -> dict: + def outlet(self, body: dict, __user__: Optional[dict] = None) -> dict: # Modify or analyze the response body after processing by the API. # This function is the post-processor for the API, which can be used to modify the response # or perform additional checks and analytics. print(f"outlet:{__name__}") print(f"outlet:body:{body}") - print(f"outlet:user:{user}") - - messages = [ - { - **message, - "content": f"{message['content']} - @@Modified from Filter Outlet", - } - for message in body.get("messages", []) - ] - - return {"messages": messages} + print(f"outlet:user:{__user__}") + return body `; const _boilerplate = `from pydantic import BaseModel diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index d02fe845a..c4d5d7a5c 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -1,7 +1,7 @@ { "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' o '-1' perquè no caduqui mai.", "(Beta)": "(Beta)", - "(e.g. `sh webui.sh --api --api-auth username_password`)": "", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "(p. ex. `sh webui.sh --api --api-auth username_password`)", "(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)", "(latest)": "(últim)", "{{ models }}": "{{ models }}", @@ -29,11 +29,11 @@ "Add Model": "Afegir un model", "Add Tags": "Afegir etiquetes", "Add User": "Afegir un usuari", - "Adjusting these settings will apply changes universally to all users.": "Si ajustes aquesta configuració, els canvis s'aplicaran de manera universal a tots els usuaris.", + "Adjusting these settings will apply changes universally to all users.": "Si ajustes aquesta preferència, els canvis s'aplicaran de manera universal a tots els usuaris.", "admin": "administrador", "Admin": "Administrador", "Admin Panel": "Panell d'administració", - "Admin Settings": "Configuració d'administració", + "Admin Settings": "Preferències d'administració", "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Els administradors tenen accés a totes les eines en tot moment; els usuaris necessiten eines assignades per model a l'espai de treball.", "Advanced Parameters": "Paràmetres avançats", "Advanced Params": "Paràmetres avançats", @@ -44,7 +44,7 @@ "Allow Chat Deletion": "Permetre la supressió del xat", "Allow non-local voices": "Permetre veus no locals", "Allow User Location": "Permetre la ubicació de l'usuari", - "Allow Voice Interruption in Call": "", + "Allow Voice Interruption in Call": "Permetre la interrupció de la veu en una trucada", "alphanumeric characters and hyphens": "caràcters alfanumèrics i guions", "Already have an account?": "Ja tens un compte?", "an assistant": "un assistent", @@ -63,10 +63,10 @@ "Attach file": "Adjuntar arxiu", "Attention to detail": "Atenció al detall", "Audio": "Àudio", - "Audio settings updated successfully": "", + "Audio settings updated successfully": "Les preferències d'àudio s'han actualitzat correctament", "August": "Agost", "Auto-playback response": "Reproduir la resposta automàticament", - "AUTOMATIC1111 Api Auth String": "", + "AUTOMATIC1111 Api Auth String": "Cadena d'autenticació de l'API d'AUTOMATIC1111", "AUTOMATIC1111 Base URL": "URL Base d'AUTOMATIC1111", "AUTOMATIC1111 Base URL is required.": "Es requereix l'URL Base d'AUTOMATIC1111.", "available!": "disponible!", @@ -110,10 +110,10 @@ "Click here to select documents.": "Clica aquí per seleccionar documents.", "click here.": "clica aquí.", "Click on the user role button to change a user's role.": "Clica sobre el botó de rol d'usuari per canviar el rol d'un usuari.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Permís d'escriptura al porta-retalls denegat. Comprova els ajustos de navegador per donar l'accés necessari.", "Clone": "Clonar", "Close": "Tancar", - "Code formatted successfully": "", + "Code formatted successfully": "Codi formatat correctament", "Collection": "Col·lecció", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "URL base de ComfyUI", @@ -128,13 +128,13 @@ "Content": "Contingut", "Context Length": "Mida del context", "Continue Response": "Continuar la resposta", - "Continue with {{provider}}": "", + "Continue with {{provider}}": "Continuar amb {{provider}}", "Copied shared chat URL to clipboard!": "S'ha copiat l'URL compartida al porta-retalls!", "Copy": "Copiar", "Copy last code block": "Copiar l'últim bloc de codi", "Copy last response": "Copiar l'última resposta", "Copy Link": "Copiar l'enllaç", - "Copying to clipboard was successful!": "La còpia al porta-retalls s'ha realitzat amb èxit!", + "Copying to clipboard was successful!": "La còpia al porta-retalls s'ha realitzat correctament", "Create a model": "Crear un model", "Create Account": "Crear un compte", "Create new key": "Crear una nova clau", @@ -165,35 +165,35 @@ "Delete chat": "Eliminar xat", "Delete Chat": "Eliminar xat", "Delete chat?": "Eliminar el xat?", - "Delete function?": "", - "Delete prompt?": "", + "Delete function?": "Eliminar funció?", + "Delete prompt?": "Eliminar indicació?", "delete this link": "Eliminar aquest enllaç", - "Delete tool?": "", + "Delete tool?": "Eliminar eina?", "Delete User": "Eliminar usuari", "Deleted {{deleteModelTag}}": "S'ha eliminat {{deleteModelTag}}", "Deleted {{name}}": "S'ha eliminat {{name}}", "Description": "Descripció", "Didn't fully follow instructions": "No s'han seguit les instruccions completament", - "Discover a function": "", + "Discover a function": "Descobrir una funció", "Discover a model": "Descobrir un model", "Discover a prompt": "Descobrir una indicació", - "Discover a tool": "", - "Discover, download, and explore custom functions": "", + "Discover a tool": "Descobrir una eina", + "Discover, download, and explore custom functions": "Descobrir, descarregar i explorar funcions personalitzades", "Discover, download, and explore custom prompts": "Descobrir, descarregar i explorar indicacions personalitzades", - "Discover, download, and explore custom tools": "", + "Discover, download, and explore custom tools": "Descobrir, descarregar i explorar eines personalitzades", "Discover, download, and explore model presets": "Descobrir, descarregar i explorar models preconfigurats", "Dismissible": "Descartable", "Display Emoji in Call": "Mostrar emojis a la trucada", "Display the username instead of You in the Chat": "Mostrar el nom d'usuari en lloc de 'Tu' al xat", "Document": "Document", - "Document Settings": "Configuració de documents", + "Document Settings": "Preferències de documents", "Documentation": "Documentació", "Documents": "Documents", "does not make any external connections, and your data stays securely on your locally hosted server.": "no realitza connexions externes, i les teves dades romanen segures al teu servidor allotjat localment.", "Don't Allow": "No permetre", "Don't have an account?": "No tens un compte?", "Don't like the style": "No t'agrada l'estil?", - "Done": "", + "Done": "Fet", "Download": "Descarregar", "Download canceled": "Descàrrega cancel·lada", "Download Database": "Descarregar la base de dades", @@ -215,7 +215,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que els teus fitxers CSV inclouen 4 columnes en aquest ordre: Nom, Correu electrònic, Contrasenya, Rol.", "Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}", "Enter a detail about yourself for your LLMs to recall": "Introdueix un detall sobre tu què els teus models de llenguatge puguin recordar", - "Enter api auth string (e.g. username:password)": "", + "Enter api auth string (e.g. username:password)": "Entra la cadena d'autenticació api (p. ex. nom d'usuari:contrasenya)", "Enter Brave Search API Key": "Introdueix la clau API de Brave Search", "Enter Chunk Overlap": "Introdueix la mida de solapament de blocs", "Enter Chunk Size": "Introdueix la mida del bloc", @@ -248,21 +248,21 @@ "Export Chats": "Exportar els xats", "Export Documents Mapping": "Exportar el mapatge de documents", "Export Functions": "Exportar funcions", - "Export LiteLLM config.yaml": "", + "Export LiteLLM config.yaml": "Exportar la configuració LiteLLM config.yaml", "Export Models": "Exportar els models", "Export Prompts": "Exportar les indicacions", "Export Tools": "Exportar les eines", "External Models": "Models externs", "Failed to create API Key.": "No s'ha pogut crear la clau API.", "Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls", - "Failed to update settings": "No s'ha pogut actualitzar la configuració", + "Failed to update settings": "No s'han pogut actualitzar les preferències", "February": "Febrer", "Feel free to add specific details": "Sent-te lliure d'afegir detalls específics", "File": "Arxiu", "File Mode": "Mode d'arxiu", "File not found.": "No s'ha trobat l'arxiu.", - "Filter is now globally disabled": "", - "Filter is now globally enabled": "", + "Filter is now globally disabled": "El filtre ha estat desactivat globalment", + "Filter is now globally enabled": "El filtre ha estat activat globalment", "Filters": "Filtres", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "S'ha detectat la suplantació d'identitat de l'empremta digital: no es poden utilitzar les inicials com a avatar. S'estableix la imatge de perfil predeterminada.", "Fluidly stream large external response chunks": "Transmetre amb fluïdesa grans trossos de resposta externa", @@ -271,17 +271,17 @@ "Form": "Formulari", "Format your variables using square brackets like this:": "Formata les teves variables utilitzant claudàtors així:", "Frequency Penalty": "Penalització per freqüència", - "Function created successfully": "", - "Function deleted successfully": "", - "Function updated successfully": "", + "Function created successfully": "La funció s'ha creat correctament", + "Function deleted successfully": "La funció s'ha eliminat correctament", + "Function updated successfully": "La funció s'ha actualitzat correctament", "Functions": "Funcions", - "Functions imported successfully": "", + "Functions imported successfully": "Les funcions s'han importat correctament", "General": "General", - "General Settings": "Configuració general", + "General Settings": "Preferències generals", "Generate Image": "Generar imatge", "Generating search query": "Generant consulta", "Generation Info": "Informació sobre la generació", - "Global": "", + "Global": "Global", "Good Response": "Bona resposta", "Google PSE API Key": "Clau API PSE de Google", "Google PSE Engine Id": "Identificador del motor PSE de Google", @@ -295,7 +295,7 @@ "Hybrid Search": "Cerca híbrida", "Image Generation (Experimental)": "Generació d'imatges (Experimental)", "Image Generation Engine": "Motor de generació d'imatges", - "Image Settings": "Configuració d'imatges", + "Image Settings": "Preferències d'imatges", "Images": "Imatges", "Import Chats": "Importar xats", "Import Documents Mapping": "Importar el mapatge de documents", @@ -303,7 +303,7 @@ "Import Models": "Importar models", "Import Prompts": "Importar indicacions", "Import Tools": "Importar eines", - "Include `--api-auth` flag when running stable-diffusion-webui": "", + "Include `--api-auth` flag when running stable-diffusion-webui": "Inclou `--api-auth` quan executis stable-diffusion-webui", "Include `--api` flag when running stable-diffusion-webui": "Inclou `--api` quan executis stable-diffusion-webui", "Info": "Informació", "Input commands": "Entra comandes", @@ -336,17 +336,17 @@ "Manage Models": "Gestionar els models", "Manage Ollama Models": "Gestionar els models Ollama", "Manage Pipelines": "Gestionar les Pipelines", - "Manage Valves": "", + "Manage Valves": "Gestionar les Valves", "March": "Març", "Max Tokens (num_predict)": "Nombre màxim de Tokens (num_predict)", "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", "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": "", - "Memory cleared successfully": "", - "Memory deleted successfully": "", - "Memory updated successfully": "", + "Memory added successfully": "Memòria afegida correctament", + "Memory cleared successfully": "Memòria eliminada correctament", + "Memory deleted successfully": "Memòria eliminada correctament", + "Memory updated successfully": "Memòria actualitzada correctament", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Els missatges enviats després de crear el teu enllaç no es compartiran. Els usuaris amb l'URL podran veure el xat compartit.", "Minimum Score": "Puntuació mínima", "Mirostat": "Mirostat", @@ -355,17 +355,17 @@ "MMMM DD, YYYY": "DD de MMMM, YYYY", "MMMM DD, YYYY HH:mm": "DD de MMMM, YYYY HH:mm", "MMMM DD, YYYY hh:mm:ss A": "DD de MMMM, YYYY HH:mm:ss, A", - "Model '{{modelName}}' has been successfully downloaded.": "El model '{{modelName}}' s'ha descarregat amb èxit.", + "Model '{{modelName}}' has been successfully downloaded.": "El model '{{modelName}}' s'ha descarregat correctament.", "Model '{{modelTag}}' is already in queue for downloading.": "El model '{{modelTag}}' ja està en cua per ser descarregat.", "Model {{modelId}} not found": "No s'ha trobat el model {{modelId}}", "Model {{modelName}} is not vision capable": "El model {{modelName}} no és capaç de visió", "Model {{name}} is now {{status}}": "El model {{name}} ara és {{status}}", - "Model created successfully!": "", + "Model created successfully!": "Model creat correctament", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "S'ha detectat el camí del sistema de fitxers del model. És necessari un nom curt del model per actualitzar, no es pot continuar.", "Model ID": "Identificador del model", "Model not selected": "Model no seleccionat", "Model Params": "Paràmetres del model", - "Model updated successfully": "", + "Model updated successfully": "Model actualitzat correctament", "Model Whitelisting": "Llista blanca de models", "Model(s) Whitelisted": "Model(s) a la llista blanca", "Modelfile Content": "Contingut del Modelfile", @@ -376,20 +376,20 @@ "Name your model": "Posa un nom al teu model", "New Chat": "Nou xat", "New Password": "Nova contrasenya", - "No content to speak": "", + "No content to speak": "No hi ha contingut per parlar", "No documents found": "No s'han trobat documents", - "No file selected": "", + "No file selected": "No s'ha escollit cap fitxer", "No results found": "No s'han trobat resultats", "No search query generated": "No s'ha generat cap consulta", "No source available": "Sense font disponible", - "No valves to update": "", + "No valves to update": "No hi ha cap Valve per actualitzar", "None": "Cap", "Not factually correct": "No és clarament correcte", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si s'estableix una puntuació mínima, la cerca només retornarà documents amb una puntuació major o igual a la puntuació mínima.", "Notifications": "Notificacions", "November": "Novembre", "num_thread (Ollama)": "num_thread (Ollama)", - "OAuth ID": "", + "OAuth ID": "ID OAuth", "October": "Octubre", "Off": "Desactivat", "Okay, Let's Go!": "D'acord, som-hi!", @@ -424,10 +424,10 @@ "Permission denied when accessing microphone": "Permís denegat en accedir al micròfon", "Permission denied when accessing microphone: {{error}}": "Permís denegat en accedir al micròfon: {{error}}", "Personalization": "Personalització", - "Pipeline deleted successfully": "", - "Pipeline downloaded successfully": "", + "Pipeline deleted successfully": "Pipeline eliminada correctament", + "Pipeline downloaded successfully": "Pipeline descarregada correctament", "Pipelines": "Pipelines", - "Pipelines Not Detected": "", + "Pipelines Not Detected": "No s'ha detectat Pipelines", "Pipelines Valves": "Vàlvules de les Pipelines", "Plain text (.txt)": "Text pla (.txt)", "Playground": "Zona de jocs", @@ -463,7 +463,7 @@ "Reset Upload Directory": "Restableix el directori de pujades", "Reset Vector Storage": "Restableix l'emmagatzematge de vectors", "Response AutoCopy to Clipboard": "Copiar la resposta automàticament al porta-retalls", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Les notifications de resposta no es poden activar perquè els permisos del lloc web han estat rebutjats. Comprova les preferències del navegador per donar l'accés necessari.", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Albada Rosé Pine", @@ -497,12 +497,12 @@ "Seed": "Llavor", "Select a base model": "Seleccionar un model base", "Select a engine": "Seleccionar un motor", - "Select a function": "", + "Select a function": "Seleccionar una funció", "Select a mode": "Seleccionar un mode", "Select a model": "Seleccionar un model", "Select a pipeline": "Seleccionar una Pipeline", "Select a pipeline url": "Seleccionar l'URL d'una Pipeline", - "Select a tool": "", + "Select a tool": "Seleccionar una eina", "Select an Ollama instance": "Seleccionar una instància d'Ollama", "Select Documents": "Seleccionar documents", "Select model": "Seleccionar un model", @@ -524,9 +524,9 @@ "Set Steps": "Establir el nombre de passos", "Set Task Model": "Establir el model de tasca", "Set Voice": "Establir la veu", - "Settings": "Configuracions", - "Settings saved successfully!": "Les configuracions s'han desat amb èxit!", - "Settings updated successfully": "Les configuracions s'han actualitzat amb èxit", + "Settings": "Preferències", + "Settings saved successfully!": "Les preferències s'han desat correctament", + "Settings updated successfully": "Les preferències s'han actualitzat correctament", "Share": "Compartir", "Share Chat": "Compartir el xat", "Share to OpenWebUI Community": "Compartir amb la comunitat OpenWebUI", @@ -535,7 +535,7 @@ "Show Admin Details in Account Pending Overlay": "Mostrar els detalls de l'administrador a la superposició del compte pendent", "Show Model": "Mostrar el model", "Show shortcuts": "Mostrar dreceres", - "Show your support!": "", + "Show your support!": "Mostra el teu suport!", "Showcased creativity": "Creativitat mostrada", "sidebar": "barra lateral", "Sign in": "Iniciar sessió", @@ -547,11 +547,11 @@ "Speech-to-Text Engine": "Motor de veu a text", "Stop Sequence": "Atura la seqüència", "STT Model": "Model SST", - "STT Settings": "Configuracions de STT", + "STT Settings": "Preferències de STT", "Submit": "Enviar", "Subtitle (e.g. about the Roman Empire)": "Subtítol (per exemple, sobre l'Imperi Romà)", "Success": "Èxit", - "Successfully updated.": "Actualitzat amb èxit.", + "Successfully updated.": "Actualitzat correctament.", "Suggested": "Suggerit", "System": "Sistema", "System Prompt": "Indicació del Sistema", @@ -571,7 +571,7 @@ "This action cannot be undone. Do you wish to continue?": "Aquesta acció no es pot desfer. Vols continuar?", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Això assegura que les teves converses valuoses queden desades de manera segura a la teva base de dades. Gràcies!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aquesta és una funció experimental, és possible que no funcioni com s'espera i està subjecta a canvis en qualsevol moment.", - "This setting does not sync across browsers or devices.": "Aquesta configuració no es sincronitza entre navegadors ni dispositius.", + "This setting does not sync across browsers or devices.": "Aquesta preferència no es sincronitza entre navegadors ni dispositius.", "This will delete": "Això eliminarà", "Thorough explanation": "Explicació en detall", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consell: Actualitza les diverses variables consecutivament prement la tecla de tabulació en l'entrada del xat després de cada reemplaçament.", @@ -589,25 +589,25 @@ "To select filters here, add them to the \"Functions\" workspace first.": "Per seleccionar filtres aquí, afegeix-los primer a l'espai de treball \"Funcions\".", "To select toolkits here, add them to the \"Tools\" workspace first.": "Per seleccionar kits d'eines aquí, afegeix-los primer a l'espai de treball \"Eines\".", "Today": "Avui", - "Toggle settings": "Alterna configuracions", + "Toggle settings": "Alterna preferències", "Toggle sidebar": "Alterna la barra lateral", "Tokens To Keep On Context Refresh (num_keep)": "Tokens a mantenir en l'actualització del context (num_keep)", - "Tool created successfully": "", - "Tool deleted successfully": "", - "Tool imported successfully": "", - "Tool updated successfully": "", + "Tool created successfully": "Eina creada correctament", + "Tool deleted successfully": "Eina eliminada correctament", + "Tool imported successfully": "Eina importada correctament", + "Tool updated successfully": "Eina actualitzada correctament", "Tools": "Eines", "Top K": "Top K", "Top P": "Top P", "Trouble accessing Ollama?": "Problemes en accedir a Ollama?", "TTS Model": "Model TTS", - "TTS Settings": "Configuracions TTS", + "TTS Settings": "Preferències de TTS", "TTS Voice": "Veu TTS", "Type": "Tipus", "Type Hugging Face Resolve (Download) URL": "Escriu l'URL de Resolució (Descàrrega) de Hugging Face", "Uh-oh! There was an issue connecting to {{provider}}.": "Oh! Hi ha hagut un problema connectant a {{provider}}.", "UI": "UI", - "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Tipus de fitxer desconegut '{{file_type}}'. Continuant amb la càrrega del fitxer.", "Update": "Actualitzar", "Update and Copy Link": "Actualitzar i copiar l'enllaç", "Update password": "Actualitzar la contrasenya", @@ -624,14 +624,14 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "usuari", - "User location successfully retrieved.": "", + "User location successfully retrieved.": "Ubicació de l'usuari obtinguda correctament", "User Permissions": "Permisos d'usuari", "Users": "Usuaris", "Utilize": "Utilitzar", "Valid time units:": "Unitats de temps vàlides:", - "Valves": "", - "Valves updated": "", - "Valves updated successfully": "", + "Valves": "Valves", + "Valves updated": "Valves actualitzat", + "Valves updated successfully": "Valves actualitat correctament", "variable": "variable", "variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.", "Version": "Versió", @@ -640,12 +640,12 @@ "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avís: Si s'actualitza o es canvia el model d'incrustació, s'hauran de tornar a importar tots els documents.", "Web": "Web", "Web API": "Web API", - "Web Loader Settings": "Configuració del carregador web", + "Web Loader Settings": "Preferències del carregador web", "Web Params": "Paràmetres web", "Web Search": "Cerca la web", "Web Search Engine": "Motor de cerca de la web", "Webhook URL": "URL del webhook", - "WebUI Settings": "Configuracions de WebUI", + "WebUI Settings": "Preferències de WebUI", "WebUI will make requests to": "WebUI farà peticions a", "What’s New in": "Què hi ha de nou a", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Quan l'historial està desactivat, els nous xats en aquest navegador no apareixeran en el teu historial en cap dels teus dispositius.", @@ -664,5 +664,5 @@ "You're now logged in.": "Ara estàs connectat.", "Your account status is currently pending activation.": "El compte està actualment pendent d'activació", "Youtube": "Youtube", - "Youtube Loader Settings": "Configuració del carregador de Youtube" + "Youtube Loader Settings": "Preferències del carregador de Youtube" } diff --git a/src/lib/i18n/locales/id-ID/translation.json b/src/lib/i18n/locales/id-ID/translation.json new file mode 100644 index 000000000..9d0340a85 --- /dev/null +++ b/src/lib/i18n/locales/id-ID/translation.json @@ -0,0 +1,667 @@ +{ + "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' atau '-1' untuk tidak ada kedaluwarsa.", + "(Beta)": "(Beta)", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "(contoh: `sh webui.sh --api --api-auth username_password`)", + "(e.g. `sh webui.sh --api`)": "(contoh: `sh webui.sh --api`)", + "(latest)": "(terbaru)", + "{{ models }}": "{{ models }}", + "{{ owner }}: You cannot delete a base model": "{{ owner }}: Anda tidak dapat menghapus model dasar", + "{{modelName}} is thinking...": "{{modelName}} sedang berpikir...", + "{{user}}'s Chats": "Obrolan {{user}}", + "{{webUIName}} Backend Required": "{{webUIName}} Diperlukan Backend", + "A task model is used when performing tasks such as generating titles for chats and web search queries": "Model tugas digunakan saat melakukan tugas seperti membuat judul untuk obrolan dan kueri penelusuran web", + "a user": "seorang pengguna", + "About": "Tentang", + "Account": "Akun", + "Account Activation Pending": "Aktivasi Akun Tertunda", + "Accurate information": "Informasi yang akurat", + "Active Users": "Pengguna Aktif", + "Add": "Tambah", + "Add a model id": "Tambahkan id model", + "Add a short description about what this model does": "Tambahkan deskripsi singkat tentang apa yang dilakukan model ini", + "Add a short title for this prompt": "Tambahkan judul singkat untuk prompt ini", + "Add a tag": "Menambahkan tag", + "Add custom prompt": "Tambahkan prompt khusus", + "Add Docs": "Tambahkan Dokumen", + "Add Files": "Menambahkan File", + "Add Memory": "Menambahkan Memori", + "Add message": "Tambahkan pesan", + "Add Model": "Tambahkan Model", + "Add Tags": "Tambahkan Tag", + "Add User": "Tambah Pengguna", + "Adjusting these settings will apply changes universally to all users.": "Menyesuaikan pengaturan ini akan menerapkan perubahan secara universal ke semua pengguna.", + "admin": "admin", + "Admin": "Admin", + "Admin Panel": "Panel Admin", + "Admin Settings": "Pengaturan Admin", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Admin memiliki akses ke semua alat setiap saat; pengguna memerlukan alat yang ditetapkan per model di ruang kerja.", + "Advanced Parameters": "Parameter Lanjutan", + "Advanced Params": "Parameter Lanjutan", + "all": "semua", + "All Documents": "Semua Dokumen", + "All Users": "Semua Pengguna", + "Allow": "Mengizinkan", + "Allow Chat Deletion": "Izinkan Penghapusan Obrolan", + "Allow non-local voices": "Izinkan suara non-lokal", + "Allow User Location": "Izinkan Lokasi Pengguna", + "Allow Voice Interruption in Call": "Izinkan Gangguan Suara dalam Panggilan", + "alphanumeric characters and hyphens": "karakter alfanumerik dan tanda hubung", + "Already have an account?": "Sudah memiliki akun?", + "an assistant": "asisten", + "and": "dan", + "and create a new shared link.": "dan membuat tautan bersama baru.", + "API Base URL": "URL Dasar API", + "API Key": "Kunci API", + "API Key created.": "Kunci API dibuat.", + "API keys": "Kunci API", + "April": "April", + "Archive": "Arsipkan", + "Archive All Chats": "Arsipkan Semua Obrolan", + "Archived Chats": "Obrolan yang Diarsipkan", + "are allowed - Activate this command by typing": "diizinkan - Aktifkan perintah ini dengan mengetik", + "Are you sure?": "Apakah Anda yakin?", + "Attach file": "Lampirkan file", + "Attention to detail": "Perhatian terhadap detail", + "Audio": "Audio", + "Audio settings updated successfully": "Pengaturan audio berhasil diperbarui", + "August": "Agustus", + "Auto-playback response": "Respons pemutaran otomatis", + "AUTOMATIC1111 Api Auth String": "AUTOMATIC1111 Api Auth String", + "AUTOMATIC1111 Base URL": "URL Dasar AUTOMATIC1111", + "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 URL Dasar diperlukan.", + "available!": "tersedia!", + "Back": "Kembali", + "Bad Response": "Respons Buruk", + "Banners": "Spanduk", + "Base Model (From)": "Model Dasar (Dari)", + "Batch Size (num_batch)": "Ukuran Batch (num_batch)", + "before": "sebelum", + "Being lazy": "Menjadi malas", + "Brave Search API Key": "Kunci API Pencarian Berani", + "Bypass SSL verification for Websites": "Lewati verifikasi SSL untuk Situs Web", + "Call": "Panggilan", + "Call feature is not supported when using Web STT engine": "Fitur panggilan tidak didukung saat menggunakan mesin Web STT", + "Camera": "Kamera", + "Cancel": "Batal", + "Capabilities": "Kemampuan", + "Change Password": "Ubah Kata Sandi", + "Chat": "Obrolan", + "Chat Background Image": "Gambar Latar Belakang Obrolan", + "Chat Bubble UI": "UI Gelembung Obrolan", + "Chat direction": "Arah obrolan", + "Chat History": "Riwayat Obrolan", + "Chat History is off for this browser.": "Riwayat Obrolan tidak aktif untuk browser ini.", + "Chats": "Obrolan", + "Check Again": "Periksa Lagi", + "Check for updates": "Memeriksa pembaruan", + "Checking for updates...": "Memeriksa pembaruan...", + "Choose a model before saving...": "Pilih model sebelum menyimpan...", + "Chunk Overlap": "Tumpang Tindih Potongan", + "Chunk Params": "Parameter Potongan", + "Chunk Size": "Ukuran Potongan", + "Citation": "Kutipan", + "Clear memory": "Menghapus memori", + "Click here for help.": "Klik di sini untuk bantuan.", + "Click here to": "Klik di sini untuk", + "Click here to download user import template file.": "Klik di sini untuk mengunduh file templat impor pengguna.", + "Click here to select": "Klik di sini untuk memilih", + "Click here to select a csv file.": "Klik di sini untuk memilih file csv.", + "Click here to select a py file.": "Klik di sini untuk memilih file py.", + "Click here to select documents.": "Klik di sini untuk memilih dokumen.", + "click here.": "Klik di sini.", + "Click on the user role button to change a user's role.": "Klik tombol peran pengguna untuk mengubah peran pengguna.", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Izin menulis papan klip ditolak. Periksa pengaturan peramban Anda untuk memberikan akses yang diperlukan.", + "Clone": "Kloning", + "Close": "Tutup", + "Code formatted successfully": "Kode berhasil diformat", + "Collection": "Koleksi", + "ComfyUI": "ComfyUI", + "ComfyUI Base URL": "URL Dasar ComfyUI", + "ComfyUI Base URL is required.": "URL Dasar ComfyUI diperlukan.", + "Command": "Perintah", + "Concurrent Requests": "Permintaan Bersamaan", + "Confirm": "Konfirmasi", + "Confirm Password": "Konfirmasi Kata Sandi", + "Confirm your action": "Konfirmasi tindakan Anda", + "Connections": "Koneksi", + "Contact Admin for WebUI Access": "Hubungi Admin untuk Akses WebUI", + "Content": "Konten", + "Context Length": "Panjang Konteks", + "Continue Response": "Lanjutkan Tanggapan", + "Continue with {{provider}}": "Lanjutkan dengan {{penyedia}}", + "Copied shared chat URL to clipboard!": "Menyalin URL obrolan bersama ke papan klip!", + "Copy": "Menyalin", + "Copy last code block": "Salin blok kode terakhir", + "Copy last response": "Salin tanggapan terakhir", + "Copy Link": "Salin Tautan", + "Copying to clipboard was successful!": "Penyalinan ke papan klip berhasil!", + "Create a model": "Buat model", + "Create Account": "Buat Akun", + "Create new key": "Buat kunci baru", + "Create new secret key": "Buat kunci rahasia baru", + "Created at": "Dibuat di", + "Created At": "Dibuat di", + "Created by": "Dibuat oleh", + "CSV Import": "Impor CSV", + "Current Model": "Model Saat Ini", + "Current Password": "Kata Sandi Saat Ini", + "Custom": "Kustom", + "Customize models for a specific purpose": "Menyesuaikan model untuk tujuan tertentu", + "Dark": "Gelap", + "Dashboard": "Dasbor", + "Database": "Basis data", + "December": "Desember", + "Default": "Default", + "Default (Automatic1111)": "Default (Automatic1111)", + "Default (SentenceTransformers)": "Default (Pengubah Kalimat)", + "Default Model": "Model Default", + "Default model updated": "Model default diperbarui", + "Default Prompt Suggestions": "Saran Permintaan Default", + "Default User Role": "Peran Pengguna Default", + "delete": "Hapus", + "Delete": "Menghapus", + "Delete a model": "Menghapus model", + "Delete All Chats": "Menghapus Semua Obrolan", + "Delete chat": "Menghapus obrolan", + "Delete Chat": "Menghapus Obrolan", + "Delete chat?": "Menghapus obrolan?", + "Delete function?": "Fungsi hapus?", + "Delete prompt?": "Perintah hapus?", + "delete this link": "hapus tautan ini", + "Delete tool?": "Hapus alat?", + "Delete User": "Menghapus Pengguna", + "Deleted {{deleteModelTag}}": "Menghapus {{deleteModelTag}}", + "Deleted {{name}}": "Menghapus {{name}}", + "Description": "Deskripsi", + "Didn't fully follow instructions": "Tidak sepenuhnya mengikuti instruksi", + "Discover a function": "Menemukan sebuah fungsi", + "Discover a model": "Menemukan sebuah model", + "Discover a prompt": "Temukan petunjuk", + "Discover a tool": "Menemukan alat", + "Discover, download, and explore custom functions": "Menemukan, mengunduh, dan menjelajahi fungsi khusus", + "Discover, download, and explore custom prompts": "Temukan, unduh, dan jelajahi prompt khusus", + "Discover, download, and explore custom tools": "Menemukan, mengunduh, dan menjelajahi alat khusus", + "Discover, download, and explore model presets": "Menemukan, mengunduh, dan menjelajahi preset model", + "Dismissible": "Tidak dapat digunakan", + "Display Emoji in Call": "Menampilkan Emoji dalam Panggilan", + "Display the username instead of You in the Chat": "Menampilkan nama pengguna, bukan Anda di Obrolan", + "Document": "Dokumen", + "Document Settings": "Pengaturan Dokumen", + "Documentation": "Dokumentasi", + "Documents": "Dokumen", + "does not make any external connections, and your data stays securely on your locally hosted server.": "tidak membuat koneksi eksternal apa pun, dan data Anda tetap aman di server yang dihosting secara lokal.", + "Don't Allow": "Jangan Izinkan", + "Don't have an account?": "Tidak memiliki akun?", + "Don't like the style": "Tidak suka gayanya", + "Done": "Selesai", + "Download": "Unduh", + "Download canceled": "Unduh dibatalkan", + "Download Database": "Unduh Basis Data", + "Drop any files here to add to the conversation": "Letakkan file apa pun di sini untuk ditambahkan ke percakapan", + "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "misalnya '30-an', '10m'. Satuan waktu yang valid adalah 's', 'm', 'h'.", + "Edit": "Edit", + "Edit Doc": "Edit Dokumen", + "Edit Memory": "Edit Memori", + "Edit User": "Edit Pengguna", + "Email": "Email", + "Embedding Batch Size": "Menyematkan Ukuran Batch", + "Embedding Model": "Model Penyematan", + "Embedding Model Engine": "Mesin Model Penyematan", + "Embedding model set to \"{{embedding_model}}\"": "Model penyematan diatur ke \"{{embedding_model}}\"", + "Enable Chat History": "Aktifkan Riwayat Obrolan", + "Enable Community Sharing": "Aktifkan Berbagi Komunitas", + "Enable New Sign Ups": "Aktifkan Pendaftaran Baru", + "Enable Web Search": "Aktifkan Pencarian Web", + "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Pastikan file CSV Anda menyertakan 4 kolom dengan urutan sebagai berikut: Nama, Email, Kata Sandi, Peran.", + "Enter {{role}} message here": "Masukkan pesan {{role}} di sini", + "Enter a detail about yourself for your LLMs to recall": "Masukkan detail tentang diri Anda untuk diingat oleh LLM Anda", + "Enter api auth string (e.g. username:password)": "Masukkan string pengesahan API (misalnya nama pengguna: kata sandi)", + "Enter Brave Search API Key": "Masukkan Kunci API Pencarian Berani", + "Enter Chunk Overlap": "Masukkan Tumpang Tindih Chunk", + "Enter Chunk Size": "Masukkan Ukuran Potongan", + "Enter Github Raw URL": "Masukkan URL Mentah Github", + "Enter Google PSE API Key": "Masukkan Kunci API Google PSE", + "Enter Google PSE Engine Id": "Masukkan Id Mesin Google PSE", + "Enter Image Size (e.g. 512x512)": "Masukkan Ukuran Gambar (mis. 512x512)", + "Enter language codes": "Masukkan kode bahasa", + "Enter model tag (e.g. {{modelTag}})": "Masukkan tag model (misalnya {{modelTag}})", + "Enter Number of Steps (e.g. 50)": "Masukkan Jumlah Langkah (mis. 50)", + "Enter Score": "Masukkan Skor", + "Enter Searxng Query URL": "Masukkan URL Kueri Searxng", + "Enter Serper API Key": "Masukkan Kunci API Serper", + "Enter Serply API Key": "Masukkan Kunci API Serply", + "Enter Serpstack API Key": "Masukkan Kunci API Serpstack", + "Enter stop sequence": "Masukkan urutan berhenti", + "Enter Tavily API Key": "Masukkan Kunci API Tavily", + "Enter Top K": "Masukkan Top K", + "Enter URL (e.g. http://127.0.0.1:7860/)": "Masukkan URL (mis. http://127.0.0.1:7860/)", + "Enter URL (e.g. http://localhost:11434)": "Masukkan URL (mis. http://localhost:11434)", + "Enter Your Email": "Masukkan Email Anda", + "Enter Your Full Name": "Masukkan Nama Lengkap Anda", + "Enter Your Password": "Masukkan Kata Sandi Anda", + "Enter Your Role": "Masukkan Peran Anda", + "Error": "Kesalahan", + "Experimental": "Percobaan", + "Export": "Ekspor", + "Export All Chats (All Users)": "Ekspor Semua Obrolan (Semua Pengguna)", + "Export chat (.json)": "Ekspor obrolan (.json)", + "Export Chats": "Ekspor Obrolan", + "Export Documents Mapping": "Pemetaan Dokumen Ekspor", + "Export Functions": "Fungsi Ekspor", + "Export LiteLLM config.yaml": "Ekspor LiteLLM config.yaml", + "Export Models": "Model Ekspor", + "Export Prompts": "Perintah Ekspor", + "Export Tools": "Alat Ekspor", + "External Models": "Model Eksternal", + "Failed to create API Key.": "Gagal membuat API Key.", + "Failed to read clipboard contents": "Gagal membaca konten papan klip", + "Failed to update settings": "Gagal memperbarui pengaturan", + "February": "Februari", + "Feel free to add specific details": "Jangan ragu untuk menambahkan detail spesifik", + "File": "Berkas", + "File Mode": "Mode File", + "File not found.": "File tidak ditemukan.", + "Filter is now globally disabled": "Filter sekarang dinonaktifkan secara global", + "Filter is now globally enabled": "Filter sekarang diaktifkan secara global", + "Filters": "Filter", + "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Pemalsuan sidik jari terdeteksi: Tidak dapat menggunakan inisial sebagai avatar. Default ke gambar profil default.", + "Fluidly stream large external response chunks": "Mengalirkan potongan respons eksternal yang besar dengan lancar", + "Focus chat input": "Memfokuskan input obrolan", + "Followed instructions perfectly": "Mengikuti instruksi dengan sempurna", + "Form": "Formulir", + "Format your variables using square brackets like this:": "Format variabel Anda menggunakan tanda kurung siku seperti ini:", + "Frequency Penalty": "Penalti Frekuensi", + "Function created successfully": "Fungsi berhasil dibuat", + "Function deleted successfully": "Fungsi berhasil dihapus", + "Function updated successfully": "Fungsi berhasil diperbarui", + "Functions": "Fungsi", + "Functions imported successfully": "Fungsi berhasil diimpor", + "General": "Umum", + "General Settings": "Pengaturan Umum", + "Generate Image": "Menghasilkan Gambar", + "Generating search query": "Membuat kueri penelusuran", + "Generation Info": "Info Pembuatan", + "Global": "Global", + "Good Response": "Respons yang Baik", + "Google PSE API Key": "Kunci API Google PSE", + "Google PSE Engine Id": "Id Mesin Google PSE", + "h:mm a": "h:mm a", + "has no conversations.": "tidak memiliki percakapan.", + "Hello, {{name}}": "Halo, {{name}}", + "Help": "Bantuan", + "Hide": "Sembunyikan", + "Hide Model": "Sembunyikan Model", + "How can I help you today?": "Ada yang bisa saya bantu hari ini?", + "Hybrid Search": "Pencarian Hibrida", + "Image Generation (Experimental)": "Pembuatan Gambar (Eksperimental)", + "Image Generation Engine": "Mesin Pembuat Gambar", + "Image Settings": "Pengaturan Gambar", + "Images": "Gambar", + "Import Chats": "Impor Obrolan", + "Import Documents Mapping": "Pemetaan Dokumen Impor", + "Import Functions": "Fungsi Impor", + "Import Models": "Model Impor", + "Import Prompts": "Petunjuk Impor", + "Import Tools": "Alat Impor", + "Include `--api-auth` flag when running stable-diffusion-webui": "Sertakan bendera `--api-auth` saat menjalankan stable-diffusion-webui", + "Include `--api` flag when running stable-diffusion-webui": "Sertakan bendera `--api` saat menjalankan stable-diffusion-webui", + "Info": "Info", + "Input commands": "Perintah masukan", + "Install from Github URL": "Instal dari URL Github", + "Instant Auto-Send After Voice Transcription": "Kirim Otomatis Instan Setelah Transkripsi Suara", + "Interface": "Antarmuka", + "Invalid Tag": "Tag tidak valid", + "January": "Januari", + "join our Discord for help.": "bergabunglah dengan Discord kami untuk mendapatkan bantuan.", + "JSON": "JSON", + "JSON Preview": "Pratinjau JSON", + "July": "Juli", + "June": "Juni", + "JWT Expiration": "Kedaluwarsa JWT", + "JWT Token": "Token JWT", + "Keep Alive": "Tetap Hidup", + "Keyboard shortcuts": "Pintasan keyboard", + "Knowledge": "Pengetahuan", + "Language": "Bahasa", + "Last Active": "Terakhir Aktif", + "Last Modified": "Terakhir Dimodifikasi", + "Light": "Cahaya", + "Listening...": "Mendengarkan", + "LLMs can make mistakes. Verify important information.": "LLM dapat membuat kesalahan. Verifikasi informasi penting.", + "Local Models": "Model Lokal", + "LTR": "LTR", + "Made by OpenWebUI Community": "Dibuat oleh Komunitas OpenWebUI", + "Make sure to enclose them with": "Pastikan untuk melampirkannya dengan", + "Manage": "Mengelola", + "Manage Models": "Kelola Model", + "Manage Ollama Models": "Mengelola Model Ollama", + "Manage Pipelines": "Mengelola Saluran Pipa", + "Manage Valves": "Kelola Katup", + "March": "Maret", + "Max Tokens (num_predict)": "Token Maksimal (num_prediksi)", + "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Maksimal 3 model dapat diunduh secara bersamaan. Silakan coba lagi nanti.", + "May": "Mei", + "Memories accessible by LLMs will be shown here.": "Memori yang dapat diakses oleh LLM akan ditampilkan di sini.", + "Memory": "Memori", + "Memory added successfully": "Memori berhasil ditambahkan", + "Memory cleared successfully": "Memori berhasil dihapus", + "Memory deleted successfully": "Memori berhasil dihapus", + "Memory updated successfully": "Memori berhasil diperbarui", + "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Pesan yang Anda kirim setelah membuat tautan tidak akan dibagikan. Pengguna yang memiliki URL tersebut akan dapat melihat obrolan yang dibagikan.", + "Minimum Score": "Skor Minimum", + "Mirostat": "Mirostat", + "Mirostat Eta": "Mirostat Eta", + "Mirostat Tau": "Mirostat Tau", + "MMMM DD, YYYY": "MMMM DD, YYYY", + "MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH: mm", + "MMMM DD, YYYY hh:mm:ss A": "MMMM DD, YYYY jj: mm: dd A", + "Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' telah berhasil diunduh.", + "Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' sudah berada dalam antrean untuk diunduh.", + "Model {{modelId}} not found": "Model {{modelId}} tidak ditemukan", + "Model {{modelName}} is not vision capable": "Model {{modelName}} tidak dapat dilihat", + "Model {{name}} is now {{status}}": "Model {{name}} sekarang menjadi {{status}}", + "Model created successfully!": "Model berhasil dibuat!", + "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Jalur sistem berkas model terdeteksi. Nama pendek model diperlukan untuk pembaruan, tidak dapat dilanjutkan.", + "Model ID": "ID Model", + "Model not selected": "Model tidak dipilih", + "Model Params": "Parameter Model", + "Model updated successfully": "Model berhasil diperbarui", + "Model Whitelisting": "Daftar Putih Model", + "Model(s) Whitelisted": "Model(-model) Masuk Daftar Putih", + "Modelfile Content": "Konten File Model", + "Models": "Model", + "More": "Lainnya", + "Name": "Nama", + "Name Tag": "Label Nama", + "Name your model": "Beri nama model Anda", + "New Chat": "Obrolan Baru", + "New Password": "Kata Sandi Baru", + "No content to speak": "Tidak ada konten untuk dibicarakan", + "No documents found": "Tidak ada dokumen yang ditemukan", + "No file selected": "Tidak ada file yang dipilih", + "No results found": "Tidak ada hasil yang ditemukan", + "No search query generated": "Tidak ada permintaan pencarian yang dibuat", + "No source available": "Tidak ada sumber yang tersedia", + "No valves to update": "Tidak ada katup untuk diperbarui", + "None": "Tidak ada", + "Not factually correct": "Tidak benar secara faktual", + "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Catatan: Jika Anda menetapkan skor minimum, pencarian hanya akan mengembalikan dokumen dengan skor yang lebih besar atau sama dengan skor minimum.", + "Notifications": "Pemberitahuan", + "November": "November", + "num_thread (Ollama)": "num_thread (Ollama)", + "OAuth ID": "ID OAuth", + "October": "Oktober", + "Off": "Mati", + "Okay, Let's Go!": "Oke, Ayo Kita Pergi!", + "OLED Dark": "OLED Gelap", + "Ollama": "Ollama", + "Ollama API": "API Ollama", + "Ollama API disabled": "API Ollama dinonaktifkan", + "Ollama API is disabled": "API Ollama dinonaktifkan", + "Ollama Version": "Versi Ollama", + "On": "Aktif", + "Only": "Hanya", + "Only alphanumeric characters and hyphens are allowed in the command string.": "Hanya karakter alfanumerik dan tanda hubung yang diizinkan dalam string perintah.", + "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.": "Ups! Pegangan yang kuat! File Anda masih berada di dalam oven pemrosesan. Kami sedang memasaknya hingga sempurna. Mohon bersabar dan kami akan memberi tahu Anda jika sudah siap.", + "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Sepertinya URL tidak valid. Mohon periksa ulang dan coba lagi.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "Ups! Ada kesalahan pada respons sebelumnya. Silakan coba lagi atau hubungi admin.", + "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Anda menggunakan metode yang tidak didukung (hanya untuk frontend). Silakan sajikan WebUI dari backend.", + "Open": "Buka", + "Open AI (Dall-E)": "Buka AI (Dall-E)", + "Open new chat": "Buka obrolan baru", + "OpenAI": "OpenAI", + "OpenAI API": "API OpenAI", + "OpenAI API Config": "Konfigurasi API OpenAI", + "OpenAI API Key is required.": "Diperlukan Kunci API OpenAI.", + "OpenAI URL/Key required.": "Diperlukan URL/Kunci OpenAI.", + "or": "atau", + "Other": "Lainnya", + "Password": "Kata sandi", + "PDF document (.pdf)": "Dokumen PDF (.pdf)", + "PDF Extract Images (OCR)": "Ekstrak Gambar PDF (OCR)", + "pending": "tertunda", + "Permission denied when accessing media devices": "Izin ditolak saat mengakses perangkat media", + "Permission denied when accessing microphone": "Izin ditolak saat mengakses mikrofon", + "Permission denied when accessing microphone: {{error}}": "Izin ditolak saat mengakses mikrofon: {{error}}", + "Personalization": "Personalisasi", + "Pipeline deleted successfully": "Pipeline berhasil dihapus", + "Pipeline downloaded successfully": "Saluran pipa berhasil diunduh", + "Pipelines": "Saluran pipa", + "Pipelines Not Detected": "Saluran Pipa Tidak Terdeteksi", + "Pipelines Valves": "Katup Saluran Pipa", + "Plain text (.txt)": "Teks biasa (.txt)", + "Playground": "Taman bermain", + "Positive attitude": "Sikap positif", + "Previous 30 days": "30 hari sebelumnya", + "Previous 7 days": "7 hari sebelumnya", + "Profile Image": "Gambar Profil", + "Prompt": "Permintaan", + "Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Permintaan (mis. Ceritakan sebuah fakta menarik tentang Kekaisaran Romawi)", + "Prompt Content": "Konten yang Diminta", + "Prompt suggestions": "Saran yang diminta", + "Prompts": "Prompt", + "Pull \"{{searchValue}}\" from Ollama.com": "Tarik \"{{searchValue}}\" dari Ollama.com", + "Pull a model from Ollama.com": "Tarik model dari Ollama.com", + "Query Params": "Parameter Kueri", + "RAG Template": "Templat RAG", + "Read Aloud": "Baca dengan Keras", + "Record voice": "Rekam suara", + "Redirecting you to OpenWebUI Community": "Mengarahkan Anda ke Komunitas OpenWebUI", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Merujuk diri Anda sebagai \"Pengguna\" (misalnya, \"Pengguna sedang belajar bahasa Spanyol\")", + "Refused when it shouldn't have": "Menolak ketika seharusnya tidak", + "Regenerate": "Regenerasi", + "Release Notes": "Catatan Rilis", + "Remove": "Hapus", + "Remove Model": "Hapus Model", + "Rename": "Ganti nama", + "Repeat Last N": "Ulangi N Terakhir", + "Request Mode": "Mode Permintaan", + "Reranking Model": "Model Pemeringkatan Ulang", + "Reranking model disabled": "Model pemeringkatan ulang dinonaktifkan", + "Reranking model set to \"{{reranking_model}}\"": "Model pemeringkatan diatur ke \"{{reranking_model}}\"", + "Reset": "Atur Ulang", + "Reset Upload Directory": "Setel Ulang Direktori Unggahan", + "Reset Vector Storage": "Setel Ulang Penyimpanan Vektor", + "Response AutoCopy to Clipboard": "Tanggapan Salin Otomatis ke Papan Klip", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Notifikasi respons tidak dapat diaktifkan karena izin situs web telah ditolak. Silakan kunjungi pengaturan browser Anda untuk memberikan akses yang diperlukan.", + "Role": "Peran", + "Rosé Pine": "Pinus Rosé", + "Rosé Pine Dawn": "Rosé Pine Fajar", + "RTL": "RTL", + "Running": "Berjalan", + "Save": "Simpan", + "Save & Create": "Simpan & Buat", + "Save & Update": "Simpan & Perbarui", + "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": "Menyimpan log obrolan secara langsung ke penyimpanan browser Anda tidak lagi didukung. Mohon luangkan waktu sejenak untuk mengunduh dan menghapus log obrolan Anda dengan mengeklik tombol di bawah ini. Jangan khawatir, Anda dapat dengan mudah mengimpor kembali log obrolan Anda ke backend melalui", + "Scan": "Pindai", + "Scan complete!": "Pindai selesai!", + "Scan for documents from {{path}}": "Memindai dokumen dari {{path}}", + "Search": "Cari", + "Search a model": "Mencari model", + "Search Chats": "Cari Obrolan", + "Search Documents": "Cari Dokumen", + "Search Functions": "Fungsi Pencarian", + "Search Models": "Cari Model", + "Search Prompts": "Perintah Pencarian", + "Search Query Generation Prompt": "Permintaan Pembuatan Kueri Pencarian", + "Search Query Generation Prompt Length Threshold": "Ambang Batas Panjang Permintaan Pembuatan Kueri Pencarian", + "Search Result Count": "Jumlah Hasil Pencarian", + "Search Tools": "Alat Pencarian", + "Searched {{count}} sites_one": "Mencari {{count}} situs_satu", + "Searched {{count}} sites_other": "Mencari {{count}} situs_lain", + "Searching \"{{searchQuery}}\"": "Mencari \"{{searchQuery}}\"", + "Searxng Query URL": "URL Kueri Pencarian Searxng", + "See readme.md for instructions": "Lihat readme.md untuk instruksi", + "See what's new": "Lihat apa yang baru", + "Seed": "Benih", + "Select a base model": "Pilih model dasar", + "Select a engine": "Pilih mesin", + "Select a function": "Memilih fungsi", + "Select a mode": "Pilih mode", + "Select a model": "Pilih model", + "Select a pipeline": "Pilih saluran pipa", + "Select a pipeline url": "Pilih url saluran pipa", + "Select a tool": "Pilih alat", + "Select an Ollama instance": "Pilih contoh Ollama", + "Select Documents": "Pilih Dokumen", + "Select model": "Pilih model", + "Select only one model to call": "Pilih hanya satu model untuk dipanggil", + "Selected model(s) do not support image inputs": "Model yang dipilih tidak mendukung input gambar", + "Send": "Kirim", + "Send a Message": "Kirim Pesan", + "Send message": "Kirim pesan", + "September": "September", + "Serper API Key": "Kunci API Serper", + "Serply API Key": "Kunci API Serply", + "Serpstack API Key": "Kunci API Serpstack", + "Server connection verified": "Koneksi server diverifikasi", + "Set as default": "Ditetapkan sebagai default", + "Set Default Model": "Tetapkan Model Default", + "Set embedding model (e.g. {{model}})": "Tetapkan model penyematan (mis. {{model}})", + "Set Image Size": "Mengatur Ukuran Gambar", + "Set reranking model (e.g. {{model}})": "Tetapkan model pemeringkatan ulang (mis. {{model}})", + "Set Steps": "Tetapkan Langkah", + "Set Task Model": "Tetapkan Model Tugas", + "Set Voice": "Mengatur Suara", + "Settings": "Pengaturan", + "Settings saved successfully!": "Pengaturan berhasil disimpan!", + "Settings updated successfully": "Pengaturan berhasil diperbarui", + "Share": "Berbagi", + "Share Chat": "Bagikan Obrolan", + "Share to OpenWebUI Community": "Bagikan ke Komunitas OpenWebUI", + "short-summary": "ringkasan singkat", + "Show": "Tampilkan", + "Show Admin Details in Account Pending Overlay": "Tampilkan Detail Admin di Hamparan Akun Tertunda", + "Show Model": "Tampilkan Model", + "Show shortcuts": "Tampilkan pintasan", + "Show your support!": "Tunjukkan dukungan Anda!", + "Showcased creativity": "Menampilkan kreativitas", + "sidebar": "bilah sisi", + "Sign in": "Masuk", + "Sign Out": "Keluar", + "Sign up": "Daftar", + "Signing in": "Masuk", + "Source": "Sumber", + "Speech recognition error: {{error}}": "Kesalahan pengenalan suara: {{error}}", + "Speech-to-Text Engine": "Mesin Pengenal Ucapan ke Teks", + "Stop Sequence": "Hentikan Urutan", + "STT Model": "Model STT", + "STT Settings": "Pengaturan STT", + "Submit": "Kirim", + "Subtitle (e.g. about the Roman Empire)": "Subtitle (misalnya tentang Kekaisaran Romawi)", + "Success": "Berhasil", + "Successfully updated.": "Berhasil diperbarui.", + "Suggested": "Disarankan", + "System": "Sistem", + "System Prompt": "Permintaan Sistem", + "Tags": "Tag", + "Tap to interrupt": "Ketuk untuk menyela", + "Tavily API Key": "Kunci API Tavily", + "Tell us more:": "Beri tahu kami lebih lanjut:", + "Temperature": "Suhu", + "Template": "Templat", + "Text Completion": "Penyelesaian Teks", + "Text-to-Speech Engine": "Mesin Teks-ke-Suara", + "Tfs Z": "Tfs Z", + "Thanks for your feedback!": "Terima kasih atas umpan balik Anda!", + "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Nilai yang diberikan haruslah nilai antara 0,0 (0%) dan 1,0 (100%).", + "Theme": "Tema", + "Thinking...": "Berpikir", + "This action cannot be undone. Do you wish to continue?": "Tindakan ini tidak dapat dibatalkan. Apakah Anda ingin melanjutkan?", + "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ini akan memastikan bahwa percakapan Anda yang berharga disimpan dengan aman ke basis data backend. Terima kasih!", + "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Ini adalah fitur eksperimental, mungkin tidak berfungsi seperti yang diharapkan dan dapat berubah sewaktu-waktu.", + "This setting does not sync across browsers or devices.": "Pengaturan ini tidak disinkronkan di seluruh browser atau perangkat.", + "This will delete": "Ini akan menghapus", + "Thorough explanation": "Penjelasan menyeluruh", + "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tips: Perbarui beberapa slot variabel secara berurutan dengan menekan tombol tab di input obrolan setelah setiap penggantian.", + "Title": "Judul", + "Title (e.g. Tell me a fun fact)": "Judul (misalnya, Ceritakan sebuah fakta menarik)", + "Title Auto-Generation": "Pembuatan Judul Secara Otomatis", + "Title cannot be an empty string.": "Judul tidak boleh berupa string kosong.", + "Title Generation Prompt": "Perintah Pembuatan Judul", + "to": "untuk", + "To access the available model names for downloading,": "Untuk mengakses nama model yang tersedia untuk diunduh,", + "To access the GGUF models available for downloading,": "Untuk mengakses model GGUF yang tersedia untuk diunduh,", + "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Untuk mengakses WebUI, hubungi administrator. Admin dapat mengelola status pengguna dari Panel Admin.", + "To add documents here, upload them to the \"Documents\" workspace first.": "Untuk menambahkan dokumen di sini, unggah dokumen ke ruang kerja \"Dokumen\" terlebih dahulu.", + "to chat input.": "Untuk memasukkan input obrolan.", + "To select filters here, add them to the \"Functions\" workspace first.": "Untuk memilih filter di sini, tambahkan filter ke ruang kerja \"Fungsi\" terlebih dahulu.", + "To select toolkits here, add them to the \"Tools\" workspace first.": "Untuk memilih perangkat di sini, tambahkan ke ruang kerja \"Alat\" terlebih dahulu.", + "Today": "Hari ini", + "Toggle settings": "Beralih pengaturan", + "Toggle sidebar": "Beralih bilah sisi", + "Tokens To Keep On Context Refresh (num_keep)": "Token Untuk Menyimpan Penyegaran Konteks (num_keep)", + "Tool created successfully": "Alat berhasil dibuat", + "Tool deleted successfully": "Alat berhasil dihapus", + "Tool imported successfully": "Alat berhasil diimpor", + "Tool updated successfully": "Alat berhasil diperbarui", + "Tools": "Alat", + "Top K": "K atas", + "Top P": "P Atas", + "Trouble accessing Ollama?": "Kesulitan mengakses Ollama?", + "TTS Model": "Model TTS", + "TTS Settings": "Pengaturan TTS", + "TTS Voice": "Suara TTS", + "Type": "Ketik", + "Type Hugging Face Resolve (Download) URL": "Ketik Hugging Face Resolve (Unduh) URL", + "Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Ada masalah saat menyambung ke {{provider}}.", + "UI": "UI", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Jenis file tidak dikenal '{{file_type}}'. Tetap lanjutkan dengan mengunggah file.", + "Update": "Memperbarui", + "Update and Copy Link": "Perbarui dan Salin Tautan", + "Update password": "Perbarui kata sandi", + "Updated at": "Diperbarui di", + "Upload": "Unggah", + "Upload a GGUF model": "Unggah model GGUF", + "Upload Files": "Unggah File", + "Upload Pipeline": "Unggah Pipeline", + "Upload Progress": "Kemajuan Unggah", + "URL Mode": "Mode URL", + "Use '#' in the prompt input to load and select your documents.": "Gunakan '#' pada input prompt untuk memuat dan memilih dokumen Anda.", + "Use Gravatar": "Gunakan Gravatar", + "Use Initials": "Gunakan Inisial", + "use_mlock (Ollama)": "use_mlock (Ollama)", + "use_mmap (Ollama)": "use_mmap (Ollama)", + "user": "pengguna", + "User location successfully retrieved.": "Lokasi pengguna berhasil diambil.", + "User Permissions": "Izin Pengguna", + "Users": "Pengguna", + "Utilize": "Memanfaatkan", + "Valid time units:": "Unit waktu yang valid:", + "Valves": "Katup", + "Valves updated": "Katup diperbarui", + "Valves updated successfully": "Katup berhasil diperbarui", + "variable": "variabel", + "variable to have them replaced with clipboard content.": "variabel untuk diganti dengan konten papan klip.", + "Version": "Versi", + "Voice": "Suara", + "Warning": "Peringatan", + "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Peringatan: Jika Anda memperbarui atau mengubah model penyematan, Anda harus mengimpor ulang semua dokumen.", + "Web": "Web", + "Web API": "API Web", + "Web Loader Settings": "Pengaturan Pemuat Web", + "Web Params": "Parameter Web", + "Web Search": "Pencarian Web", + "Web Search Engine": "Mesin Pencari Web", + "Webhook URL": "URL pengait web", + "WebUI Settings": "Pengaturan WebUI", + "WebUI will make requests to": "WebUI akan membuat permintaan ke", + "What’s New in": "Apa yang Baru di", + "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Ketika riwayat dimatikan, obrolan baru di browser ini tidak akan muncul di riwayat Anda di perangkat mana pun.", + "Whisper (Local)": "Bisikan (Lokal)", + "Widescreen Mode": "Mode Layar Lebar", + "Workspace": "Ruang Kerja", + "Write a prompt suggestion (e.g. Who are you?)": "Menulis saran cepat (misalnya Siapa kamu?)", + "Write a summary in 50 words that summarizes [topic or keyword].": "Tulis ringkasan dalam 50 kata yang merangkum [topik atau kata kunci].", + "Yesterday": "Kemarin", + "You": "Anda", + "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Anda dapat mempersonalisasi interaksi Anda dengan LLM dengan menambahkan kenangan melalui tombol 'Kelola' di bawah ini, sehingga lebih bermanfaat dan disesuaikan untuk Anda.", + "You cannot clone a base model": "Anda tidak dapat mengkloning model dasar", + "You have no archived conversations.": "Anda tidak memiliki percakapan yang diarsipkan.", + "You have shared this chat": "Anda telah membagikan obrolan ini", + "You're a helpful assistant.": "Anda adalah asisten yang membantu.", + "You're now logged in.": "Anda sekarang sudah masuk.", + "Your account status is currently pending activation.": "Status akun Anda saat ini sedang menunggu aktivasi.", + "Youtube": "Youtube", + "Youtube Loader Settings": "Pengaturan Pemuat Youtube" +} diff --git a/src/lib/i18n/locales/languages.json b/src/lib/i18n/locales/languages.json index f205b8049..a22a4351a 100644 --- a/src/lib/i18n/locales/languages.json +++ b/src/lib/i18n/locales/languages.json @@ -63,6 +63,10 @@ "code": "hr-HR", "title": "Croatian (Hrvatski)" }, + { + "code": "id-ID", + "title": "Indonesian (Bahasa Indonesia)" + }, { "code": "it-IT", "title": "Italian (Italiano)" diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 19052f2c7..827e7bc3b 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -1,7 +1,7 @@ { "'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 --api-auth username_password`)": "", + "(e.g. `sh webui.sh --api --api-auth username_password`)": "(e.g. `sh webui.sh --api --api-auth username_password`)", "(e.g. `sh webui.sh --api`)": "(örn. `sh webui.sh --api`)", "(latest)": "(en son)", "{{ models }}": "{{ models }}", @@ -13,9 +13,9 @@ "a user": "bir kullanıcı", "About": "Hakkında", "Account": "Hesap", - "Account Activation Pending": "", + "Account Activation Pending": "Hesap Aktivasyonu Bekleniyor", "Accurate information": "Doğru bilgi", - "Active Users": "", + "Active Users": "Aktif Kullanıcılar", "Add": "Ekle", "Add a model id": "Model id ekle", "Add a short description about what this model does": "Bu modelin ne yaptığı hakkında kısa bir açıklama ekle", @@ -31,10 +31,10 @@ "Add User": "Kullanıcı 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": "", + "Admin": "Yönetici", "Admin Panel": "Yönetici Paneli", "Admin Settings": "Yönetici Ayarları", - "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Yöneticiler her zaman tüm araçlara erişebilir; kullanıcıların çalışma alanındaki model başına atanmış araçlara ihtiyacı vardır.", "Advanced Parameters": "Gelişmiş Parametreler", "Advanced Params": "Gelişmiş Parametreler", "all": "tümü", @@ -43,8 +43,8 @@ "Allow": "İzin ver", "Allow Chat Deletion": "Sohbet Silmeye İzin Ver", "Allow non-local voices": "Yerel olmayan seslere izin verin", - "Allow User Location": "", - "Allow Voice Interruption in Call": "", + "Allow User Location": "Kullanıcı Konumuna İzin Ver", + "Allow Voice Interruption in Call": "Aramada Ses Kesintisine İ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", @@ -63,10 +63,10 @@ "Attach file": "Dosya ekle", "Attention to detail": "Ayrıntılara dikkat", "Audio": "Ses", - "Audio settings updated successfully": "", + "Audio settings updated successfully": "Ses ayarları başarıyla güncellendi", "August": "Ağustos", "Auto-playback response": "Yanıtı otomatik oynatma", - "AUTOMATIC1111 Api Auth String": "", + "AUTOMATIC1111 Api Auth String": "AUTOMATIC1111 API Kimlik Doğrulama Dizesi", "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Temel URL", "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Temel URL gereklidir.", "available!": "mevcut!", @@ -74,19 +74,19 @@ "Bad Response": "Kötü Yanıt", "Banners": "Afişler", "Base Model (From)": "Temel Model ('den)", - "Batch Size (num_batch)": "", + "Batch Size (num_batch)": "Yığın Boyutu (num_batch)", "before": "önce", "Being lazy": "Tembelleşiyor", "Brave Search API Key": "Brave Search API Anahtarı", "Bypass SSL verification for Websites": "Web Siteleri için SSL doğrulamasını atlayın", - "Call": "", - "Call feature is not supported when using Web STT engine": "", - "Camera": "", + "Call": "Arama", + "Call feature is not supported when using Web STT engine": "Web STT motoru kullanılırken arama özelliği desteklenmiyor", + "Camera": "Kamera", "Cancel": "İptal", "Capabilities": "Yetenekler", "Change Password": "Parola Değiştir", "Chat": "Sohbet", - "Chat Background Image": "", + "Chat Background Image": "Sohbet Arka Plan Resmi", "Chat Bubble UI": "Sohbet Balonu UI", "Chat direction": "Sohbet Yönü", "Chat History": "Sohbet Geçmişi", @@ -100,35 +100,35 @@ "Chunk Params": "Chunk Parametreleri", "Chunk Size": "Chunk Boyutu", "Citation": "Alıntı", - "Clear memory": "", + "Clear memory": "Belleği temizle", "Click here for help.": "Yardım için buraya tıklayın.", "Click here to": "Şunu yapmak için buraya tıklayın:", - "Click here to download user import template file.": "", + "Click here to download user import template file.": "Kullanıcı içe aktarma şablon dosyasını indirmek için buraya tıklayın.", "Click here to select": "Seçmek için buraya tıklayın", "Click here to select a csv file.": "Bir CSV dosyası seçmek için buraya tıklayın.", - "Click here to select a py file.": "", + "Click here to select a py file.": "Bir py dosyası 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.", - "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "", + "Clipboard write permission denied. Please check your browser settings to grant the necessary access.": "Panoya yazma izni reddedildi. Tarayıcı ayarlarını kontrol ederek gerekli izinleri sağlayabilirsiniz.", "Clone": "Klon", "Close": "Kapat", - "Code formatted successfully": "", + "Code formatted successfully": "Kod başarıyla biçimlendirildi", "Collection": "Koleksiyon", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI Temel URL", "ComfyUI Base URL is required.": "ComfyUI Temel URL gerekli.", "Command": "Komut", "Concurrent Requests": "Eşzamanlı İstekler", - "Confirm": "", + "Confirm": "Onayla", "Confirm Password": "Parolayı Onayla", - "Confirm your action": "", + "Confirm your action": "İşleminizi onaylayın", "Connections": "Bağlantılar", - "Contact Admin for WebUI Access": "", + "Contact Admin for WebUI Access": "WebUI Erişimi için Yöneticiyle İletişime Geçin", "Content": "İçerik", "Context Length": "Bağlam Uzunluğu", "Continue Response": "Yanıta Devam Et", - "Continue with {{provider}}": "", + "Continue with {{provider}}": "{{provider}} ile devam et", "Copied shared chat URL to clipboard!": "Paylaşılan sohbet URL'si panoya kopyalandı!", "Copy": "Kopyala", "Copy last code block": "Son kod bloğunu kopyala", @@ -141,14 +141,14 @@ "Create new secret key": "Yeni gizli anahtar oluştur", "Created at": "Oluşturulma tarihi", "Created At": "Şu Tarihte Oluşturuldu:", - "Created by": "", - "CSV Import": "", + "Created by": "Şunun tarafından oluşturuldu:", + "CSV Import": "CSV İçe Aktarma", "Current Model": "Mevcut Model", "Current Password": "Mevcut Parola", "Custom": "Özel", "Customize models for a specific purpose": "Modelleri belirli amaçlar için özelleştir", "Dark": "Koyu", - "Dashboard": "", + "Dashboard": "Kontrol Paneli", "Database": "Veritabanı", "December": "Aralık", "Default": "Varsayılan", @@ -164,36 +164,36 @@ "Delete All Chats": "Tüm Sohbetleri Sil", "Delete chat": "Sohbeti sil", "Delete Chat": "Sohbeti Sil", - "Delete chat?": "", - "Delete function?": "", - "Delete prompt?": "", + "Delete chat?": "Sohbeti sil?", + "Delete function?": "Fonksiyonu sil?", + "Delete prompt?": "Promptu sil?", "delete this link": "bu bağlantıyı sil", - "Delete tool?": "", + "Delete tool?": "Aracı sil?", "Delete User": "Kullanıcıyı Sil", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} silindi", "Deleted {{name}}": "{{name}} silindi", "Description": "Açıklama", "Didn't fully follow instructions": "Talimatları tam olarak takip etmedi", - "Discover a function": "", + "Discover a function": "Bir fonksiyon keşfedin", "Discover a model": "Bir model keşfedin", "Discover a prompt": "Bir prompt keşfedin", - "Discover a tool": "", - "Discover, download, and explore custom functions": "", + "Discover a tool": "Bir araç keşfedin", + "Discover, download, and explore custom functions": "Özel fonksiyonları keşfedin, indirin ve inceleyin", "Discover, download, and explore custom prompts": "Özel promptları keşfedin, indirin ve inceleyin", - "Discover, download, and explore custom tools": "", + "Discover, download, and explore custom tools": "Özel araçları keşfedin, indirin ve inceleyin", "Discover, download, and explore model presets": "Model ön ayarlarını keşfedin, indirin ve inceleyin", - "Dismissible": "", - "Display Emoji in Call": "", + "Dismissible": "Reddedilebilir", + "Display Emoji in Call": "Aramada Emoji Göster", "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ı", - "Documentation": "", + "Documentation": "Dökümantasyon", "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?", "Don't like the style": "Tarzını beğenmedim", - "Done": "", + "Done": "Tamamlandı", "Download": "İndir", "Download canceled": "İndirme iptal edildi", "Download Database": "Veritabanını İndir", @@ -201,7 +201,7 @@ "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "örn. '30s', '10m'. Geçerli zaman birimleri 's', 'm', 'h'.", "Edit": "Düzenle", "Edit Doc": "Belgeyi Düzenle", - "Edit Memory": "", + "Edit Memory": "Belleği Düzenle", "Edit User": "Kullanıcıyı Düzenle", "Email": "E-posta", "Embedding Batch Size": "Gömme Yığın Boyutu", @@ -215,7 +215,7 @@ "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV dosyanızın şu sırayla 4 sütun içerdiğinden emin olun: İsim, E-posta, Şifre, Rol.", "Enter {{role}} message here": "Buraya {{role}} mesajını girin", "Enter a detail about yourself for your LLMs to recall": "LLM'lerinizin hatırlaması için kendiniz hakkında bir bilgi girin", - "Enter api auth string (e.g. username:password)": "", + "Enter api auth string (e.g. username:password)": "Api auth dizesini girin (örn. kullanıcı adı:parola)", "Enter Brave Search API Key": "Brave Search API Anahtarını Girin", "Enter Chunk Overlap": "Chunk Örtüşmesini Girin", "Enter Chunk Size": "Chunk Boyutunu Girin", @@ -229,10 +229,10 @@ "Enter Score": "Skoru Girin", "Enter Searxng Query URL": "Searxng Sorgu URL'sini girin", "Enter Serper API Key": "Serper API Anahtarını Girin", - "Enter Serply API Key": "", + "Enter Serply API Key": "Serply API Anahtarını Girin", "Enter Serpstack API Key": "Serpstack API Anahtarını Girin", "Enter stop sequence": "Durdurma dizisini girin", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "Tavily API Anahtarını 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 URL (e.g. http://localhost:11434)": "URL'yi Girin (e.g. http://localhost:11434)", @@ -247,41 +247,41 @@ "Export chat (.json)": "Sohbeti dışa aktar (.json)", "Export Chats": "Sohbetleri Dışa Aktar", "Export Documents Mapping": "Belge Eşlemesini Dışa Aktar", - "Export Functions": "", - "Export LiteLLM config.yaml": "", + "Export Functions": "Fonksiyonları Dışa Aktar", + "Export LiteLLM config.yaml": "LiteLLM config.yaml'ı Dışa Aktar", "Export Models": "Modelleri Dışa Aktar", "Export Prompts": "Promptları Dışa Aktar", - "Export Tools": "", - "External Models": "", + "Export Tools": "Araçları Dışa Aktar", + "External Models": "Modelleri Dışa Aktar", "Failed to create API Key.": "API Anahtarı oluşturulamadı.", "Failed to read clipboard contents": "Pano içeriği okunamadı", - "Failed to update settings": "", + "Failed to update settings": "Ayarlar güncellenemedi", "February": "Şubat", "Feel free to add specific details": "Spesifik ayrıntılar eklemekten çekinmeyin", - "File": "", + "File": "Dosya", "File Mode": "Dosya Modu", "File not found.": "Dosya bulunamadı.", - "Filter is now globally disabled": "", - "Filter is now globally enabled": "", - "Filters": "", + "Filter is now globally disabled": "Filtre artık global olarak devre dışı", + "Filter is now globally enabled": "Filtre artık global olarak devrede", + "Filters": "Filtreler", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Parmak izi sahteciliği tespit edildi: Avatar olarak baş harfler kullanılamıyor. Varsayılan profil resmine dönülüyor.", "Fluidly stream large external response chunks": "Büyük harici yanıt chunklarını akıcı bir şekilde yayınlayın", "Focus chat input": "Sohbet girişine odaklan", "Followed instructions perfectly": "Talimatları mükemmel şekilde takip etti", - "Form": "", + "Form": "Form", "Format your variables using square brackets like this:": "Değişkenlerinizi şu şekilde kare parantezlerle biçimlendirin:", "Frequency Penalty": "Frekans Cezası", - "Function created successfully": "", - "Function deleted successfully": "", - "Function updated successfully": "", - "Functions": "", - "Functions imported successfully": "", + "Function created successfully": "Fonksiyon başarıyla oluşturuldu", + "Function deleted successfully": "Fonksiyon başarıyla silindi", + "Function updated successfully": "Fonksiyon başarıyla güncellendi", + "Functions": "Fonksiyonlar", + "Functions imported successfully": "Fonksiyonlar başarıyla içe aktarıldı", "General": "Genel", "General Settings": "Genel Ayarlar", - "Generate Image": "", + "Generate Image": "Görsel Üret", "Generating search query": "Arama sorgusu oluşturma", "Generation Info": "Üretim Bilgisi", - "Global": "", + "Global": "Global", "Good Response": "İyi Yanıt", "Google PSE API Key": "Google PSE API Anahtarı", "Google PSE Engine Id": "Google PSE Engine Id", @@ -290,7 +290,7 @@ "Hello, {{name}}": "Merhaba, {{name}}", "Help": "Yardım", "Hide": "Gizle", - "Hide Model": "", + "Hide Model": "Modeli Gizle", "How can I help you today?": "Bugün size nasıl yardımcı olabilirim?", "Hybrid Search": "Karma Arama", "Image Generation (Experimental)": "Görüntü Oluşturma (Deneysel)", @@ -299,16 +299,16 @@ "Images": "Görüntüler", "Import Chats": "Sohbetleri İçe Aktar", "Import Documents Mapping": "Belge Eşlemesini İçe Aktar", - "Import Functions": "", + "Import Functions": "Fonksiyonları İçe Aktar", "Import Models": "Modelleri İçe Aktar", "Import Prompts": "Promptları İçe Aktar", - "Import Tools": "", - "Include `--api-auth` flag when running stable-diffusion-webui": "", + "Import Tools": "Araçları İçe Aktar", + "Include `--api-auth` flag when running stable-diffusion-webui": "stable-diffusion-webui çalıştırılırken `--api-auth` bayrağını dahil edin", "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui çalıştırılırken `--api` bayrağını dahil edin", "Info": "Bilgi", "Input commands": "Giriş komutları", "Install from Github URL": "Github URL'sinden yükleyin", - "Instant Auto-Send After Voice Transcription": "", + "Instant Auto-Send After Voice Transcription": "Ses Transkripsiyonundan Sonra Anında Otomatik Gönder", "Interface": "Arayüz", "Invalid Tag": "Geçersiz etiket", "January": "Ocak", @@ -321,32 +321,32 @@ "JWT Token": "JWT Token", "Keep Alive": "Canlı Tut", "Keyboard shortcuts": "Klavye kısayolları", - "Knowledge": "", + "Knowledge": "Bilgi", "Language": "Dil", "Last Active": "Son Aktivite", - "Last Modified": "", + "Last Modified": "Son Düzenleme", "Light": "Açık", - "Listening...": "", + "Listening...": "Dinleniyor...", "LLMs can make mistakes. Verify important information.": "LLM'ler hata yapabilir. Önemli bilgileri doğrulayın.", - "Local Models": "", + "Local Models": "Yerel Modeller", "LTR": "LTR", "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": "", + "Manage": "Yönet", "Manage Models": "Modelleri Yönet", "Manage Ollama Models": "Ollama Modellerini Yönet", - "Manage Pipelines": "Pipeline'ları Yönet", - "Manage Valves": "", + "Manage Pipelines": "Pipelineları Yönet", + "Manage Valves": "Valvleri Yönet", "March": "Mart", "Max Tokens (num_predict)": "Maksimum Token (num_predict)", "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.", "May": "Mayıs", "Memories accessible by LLMs will be shown here.": "LLM'ler tarafından erişilebilen bellekler burada gösterilecektir.", "Memory": "Bellek", - "Memory added successfully": "", - "Memory cleared successfully": "", - "Memory deleted successfully": "", - "Memory updated successfully": "", + "Memory added successfully": "Bellek başarıyla eklendi", + "Memory cleared successfully": "Bellek başarıyle temizlendi", + "Memory deleted successfully": "Bellek başarıyla silindi", + "Memory updated successfully": "Bellek başarıyla güncellendi", "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "Bağlantınızı oluşturduktan sonra gönderdiğiniz mesajlar paylaşılmayacaktır. URL'ye sahip kullanıcılar paylaşılan sohbeti görüntüleyebilecektir.", "Minimum Score": "Minimum Skor", "Mirostat": "Mirostat", @@ -354,18 +354,18 @@ "Mirostat Tau": "Mirostat Tau", "MMMM DD, YYYY": "DD MMMM YYYY", "MMMM DD, YYYY HH:mm": "DD MMMM YYYY HH:mm", - "MMMM DD, YYYY hh:mm:ss A": "", + "MMMM DD, YYYY hh:mm:ss A": "DD MMMM YYYY hh:mm:ss A", "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}} is not vision capable": "Model {{modelName}} görüntü yeteneğine sahip değil", "Model {{name}} is now {{status}}": "{{name}} modeli artık {{status}}", - "Model created successfully!": "", + "Model created successfully!": "Model başarıyla oluşturuldu!", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Model dosya sistemi yolu algılandı. Güncelleme için model kısa adı gerekli, devam edilemiyor.", "Model ID": "Model ID", "Model not selected": "Model seçilmedi", "Model Params": "Model Parametreleri", - "Model updated successfully": "", + "Model updated successfully": "Model başarıyla güncellendi", "Model Whitelisting": "Model Beyaz Listeye Alma", "Model(s) Whitelisted": "Model(ler) Beyaz Listeye Alındı", "Modelfile Content": "Model Dosyası İçeriği", @@ -376,20 +376,20 @@ "Name your model": "Modelinizi Adlandırın", "New Chat": "Yeni Sohbet", "New Password": "Yeni Parola", - "No content to speak": "", - "No documents found": "", - "No file selected": "", + "No content to speak": "Konuşacak içerik yok", + "No documents found": "Hiçbir belge bulunamadı", + "No file selected": "Hiçbir dosya seçilmedi", "No results found": "Sonuç bulunamadı", "No search query generated": "Hiç arama sorgusu oluşturulmadı", "No source available": "Kaynak mevcut değil", - "No valves to update": "", + "No valves to update": "Güncellenecek valvler yok", "None": "Yok", "Not factually correct": "Gerçeklere göre doğru değil", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Not: Minimum bir skor belirlerseniz, arama yalnızca minimum skora eşit veya daha yüksek bir skora sahip belgeleri getirecektir.", "Notifications": "Bildirimler", "November": "Kasım", "num_thread (Ollama)": "num_thread (Ollama)", - "OAuth ID": "", + "OAuth ID": "OAuth ID", "October": "Ekim", "Off": "Kapalı", "Okay, Let's Go!": "Tamam, Hadi Başlayalım!", @@ -397,14 +397,14 @@ "Ollama": "Ollama", "Ollama API": "Ollama API", "Ollama API disabled": "Ollama API'si devre dışı", - "Ollama API is disabled": "", + "Ollama API is disabled": "Ollama API'si devre dışı", "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! There was an error in the previous response. Please try again or contact admin.": "", + "Oops! There was an error in the previous response. Please try again or contact admin.": "Hop! Önceki yanıtta bir hata oluştu. Lütfen tekrar deneyin veya yönetici ile iletişime geçin.", "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 (Dall-E)": "Open AI (Dall-E)", @@ -420,14 +420,14 @@ "PDF document (.pdf)": "PDF belgesi (.pdf)", "PDF Extract Images (OCR)": "PDF Görüntülerini Çıkart (OCR)", "pending": "beklemede", - "Permission denied when accessing media devices": "", - "Permission denied when accessing microphone": "", + "Permission denied when accessing media devices": "Medya cihazlarına erişim izni reddedildi", + "Permission denied when accessing microphone": "Mikrofona erişim izni reddedildi", "Permission denied when accessing microphone: {{error}}": "Mikrofona erişim izni reddedildi: {{error}}", "Personalization": "Kişiselleştirme", - "Pipeline deleted successfully": "", - "Pipeline downloaded successfully": "", + "Pipeline deleted successfully": "Pipeline başarıyla silindi", + "Pipeline downloaded successfully": "Pipeline başarıyla güncellendi", "Pipelines": "Pipelinelar", - "Pipelines Not Detected": "", + "Pipelines Not Detected": "Pipeline Tespit Edilmedi", "Pipelines Valves": "Pipeline Valvleri", "Plain text (.txt)": "Düz metin (.txt)", "Playground": "Oyun Alanı", @@ -447,7 +447,7 @@ "Read Aloud": "Sesli Oku", "Record voice": "Ses kaydı yap", "Redirecting you to OpenWebUI Community": "OpenWebUI Topluluğuna yönlendiriliyorsunuz", - "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Kendinizden \"User\" olarak bahsedin (örneğin, \"User İspanyolca öğreniyor\")", "Refused when it shouldn't have": "Reddedilmemesi gerekirken reddedildi", "Regenerate": "Tekrar Oluştur", "Release Notes": "Sürüm Notları", @@ -459,16 +459,16 @@ "Reranking Model": "Yeniden Sıralama Modeli", "Reranking model disabled": "Yeniden sıralama modeli devre dışı bırakıldı", "Reranking model set to \"{{reranking_model}}\"": "Yeniden sıralama modeli \"{{reranking_model}}\" olarak ayarlandı", - "Reset": "", - "Reset Upload Directory": "", + "Reset": "Sıfırla", + "Reset Upload Directory": "Yükleme Dizinini Sıfırla", "Reset Vector Storage": "Vektör Depolamayı Sıfırla", "Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala", - "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "", + "Response notifications cannot be activated as the website permissions have been denied. Please visit your browser settings to grant the necessary access.": "Web sitesi izinleri reddedildiğinden yanıt bildirimleri etkinleştirilemiyor. Gerekli erişimi sağlamak için lütfen tarayıcı ayarlarınızı ziyaret edin.", "Role": "Rol", "Rosé Pine": "Rosé Pine", "Rosé Pine Dawn": "Rosé Pine Dawn", "RTL": "RTL", - "Running": "", + "Running": "Çalışıyor", "Save": "Kaydet", "Save & Create": "Kaydet ve Oluştur", "Save & Update": "Kaydet ve Güncelle", @@ -480,39 +480,39 @@ "Search a model": "Bir model ara", "Search Chats": "Sohbetleri Ara", "Search Documents": "Belgeleri Ara", - "Search Functions": "", + "Search Functions": "Fonksiyonları Ara", "Search Models": "Modelleri Ara", "Search Prompts": "Prompt Ara", - "Search Query Generation Prompt": "", - "Search Query Generation Prompt Length Threshold": "", + "Search Query Generation Prompt": "Arama Sorgusu Üretme Promptu", + "Search Query Generation Prompt Length Threshold": "Arama Sorgusu Üretme Promptu Uzunluk Sınırı", "Search Result Count": "Arama Sonucu Sayısı", - "Search Tools": "", + "Search Tools": "Arama Araçları", "Searched {{count}} sites_one": "Arandı {{count}} sites_one", "Searched {{count}} sites_other": "Arandı {{count}} sites_other", - "Searching \"{{searchQuery}}\"": "", + "Searching \"{{searchQuery}}\"": "\"{{searchQuery}}\" aranıyor", "Searxng Query URL": "Searxng Sorgu URL'si", "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 base model": "Bir temel model seç", - "Select a engine": "", - "Select a function": "", + "Select a engine": "Bir motor seç", + "Select a function": "Bir fonksiyon seç", "Select a mode": "Bir mod seç", "Select a model": "Bir model seç", "Select a pipeline": "Bir pipeline seç", "Select a pipeline url": "Bir pipeline URL'si seç", - "Select a tool": "", + "Select a tool": "Bir araç seç", "Select an Ollama instance": "Bir Ollama örneği seçin", - "Select Documents": "", + "Select Documents": "Bir Doküman Seç", "Select model": "Model seç", - "Select only one model to call": "", + "Select only one model to call": "Arama için sadece bir model seç", "Selected model(s) do not support image inputs": "Seçilen model(ler) görüntü girişlerini desteklemiyor", "Send": "Gönder", "Send a Message": "Bir Mesaj Gönder", "Send message": "Mesaj gönder", "September": "Eylül", "Serper API Key": "Serper API Anahtarı", - "Serply API Key": "", + "Serply API Key": "Serply API Anahtarı", "Serpstack API Key": "Serpstack API Anahtarı", "Server connection verified": "Sunucu bağlantısı doğrulandı", "Set as default": "Varsayılan olarak ayarla", @@ -525,16 +525,16 @@ "Set Voice": "Ses Ayarla", "Settings": "Ayarlar", "Settings saved successfully!": "Ayarlar başarıyla kaydedildi!", - "Settings updated successfully": "", + "Settings updated successfully": "Ayarlar başarıyla güncellendi", "Share": "Paylaş", "Share Chat": "Sohbeti Paylaş", "Share to OpenWebUI Community": "OpenWebUI Topluluğu ile Paylaş", "short-summary": "kısa-özet", "Show": "Göster", - "Show Admin Details in Account Pending Overlay": "", - "Show Model": "", + "Show Admin Details in Account Pending Overlay": "Yönetici Ayrıntılarını Hesap Bekliyor Ekranında Göster", + "Show Model": "Modeli Göster", "Show shortcuts": "Kısayolları göster", - "Show your support!": "", + "Show your support!": "Desteğinizi gösterin!", "Showcased creativity": "Sergilenen yaratıcılık", "sidebar": "kenar çubuğu", "Sign in": "Oturum aç", @@ -545,7 +545,7 @@ "Speech recognition error: {{error}}": "Konuşma tanıma hatası: {{error}}", "Speech-to-Text Engine": "Konuşmadan Metne Motoru", "Stop Sequence": "Diziyi Durdur", - "STT Model": "", + "STT Model": "STT Modeli", "STT Settings": "STT Ayarları", "Submit": "Gönder", "Subtitle (e.g. about the Roman Empire)": "Alt başlık (örn. Roma İmparatorluğu hakkında)", @@ -555,8 +555,8 @@ "System": "Sistem", "System Prompt": "Sistem Promptu", "Tags": "Etiketler", - "Tap to interrupt": "", - "Tavily API Key": "", + "Tap to interrupt": "Durdurmak için dokunun", + "Tavily API Key": "Tavily API Anahtarı", "Tell us more:": "Bize daha fazlasını anlat:", "Temperature": "Temperature", "Template": "Şablon", @@ -566,12 +566,12 @@ "Thanks for your feedback!": "Geri bildiriminiz için teşekkürler!", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Puan 0.0 (%0) ile 1.0 (%100) arasında bir değer olmalıdır.", "Theme": "Tema", - "Thinking...": "", - "This action cannot be undone. Do you wish to continue?": "", + "Thinking...": "Düşünüyor...", + "This action cannot be undone. Do you wish to continue?": "Bu eylem geri alınamaz. Devam etmek istiyor musunuz?", "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 is an experimental feature, it may not function as expected and is subject to change at any time.": "", + "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Bu deneysel bir özelliktir, beklendiği gibi çalışmayabilir ve her an değişiklik yapılabilir.", "This setting does not sync across browsers or devices.": "Bu ayar tarayıcılar veya cihazlar arasında senkronize edilmez.", - "This will delete": "", + "This will delete": "Bu silinecek", "Thorough explanation": "Kapsamlı açıklama", "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", @@ -582,39 +582,39 @@ "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 access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", - "To add documents here, upload them to the \"Documents\" workspace first.": "", + "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUI'ye erişmek için lütfen yöneticiyle iletişime geçin. Yöneticiler kullanıcı durumlarını Yönetici Panelinden yönetebilir.", + "To add documents here, upload them to the \"Documents\" workspace first.": "Buraya belge eklemek için öncelikle bunları \"Belgeler\" çalışma alanına yükleyin.", "to chat input.": "sohbet girişine.", - "To select filters here, add them to the \"Functions\" workspace first.": "", - "To select toolkits here, add them to the \"Tools\" workspace first.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "Filtreleri burada seçmek için öncelikle bunları \"İşlevler\" çalışma alanına ekleyin.", + "To select toolkits here, add them to the \"Tools\" workspace first.": "Araçları burada seçmek için öncelikle bunları \"Araçlar\" çalışma alanına ekleyin.", "Today": "Bugün", "Toggle settings": "Ayarları Aç/Kapat", "Toggle sidebar": "Kenar Çubuğunu Aç/Kapat", - "Tokens To Keep On Context Refresh (num_keep)": "", - "Tool created successfully": "", - "Tool deleted successfully": "", - "Tool imported successfully": "", - "Tool updated successfully": "", - "Tools": "", + "Tokens To Keep On Context Refresh (num_keep)": "Bağlam Yenilemesinde Korunacak Tokenler (num_keep)", + "Tool created successfully": "Araç başarıyla oluşturuldu", + "Tool deleted successfully": "Araç başarıyla silindi", + "Tool imported successfully": "Araç başarıyla içe aktarıldı", + "Tool updated successfully": "Araç başarıyla güncellendi", + "Tools": "Araçlar", "Top K": "Top K", "Top P": "Top P", "Trouble accessing Ollama?": "Ollama'ya erişmede sorun mu yaşıyorsunuz?", - "TTS Model": "", + "TTS Model": "TTS Modeli", "TTS Settings": "TTS Ayarları", - "TTS Voice": "", + "TTS Voice": "TTS Sesi", "Type": "Tür", "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.", - "UI": "", - "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", - "Update": "", + "UI": "UI", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Bilinmeyen dosya türü '{{file_type}}'. Yine de dosya yükleme işlemine devam ediliyor.", + "Update": "Güncelle", "Update and Copy Link": "Güncelle ve Bağlantıyı Kopyala", "Update password": "Parolayı Güncelle", - "Updated at": "", - "Upload": "", + "Updated at": "Şu tarihte güncellendi:", + "Upload": "Yükle", "Upload a GGUF model": "Bir GGUF modeli yükle", "Upload Files": "Dosyaları Yükle", - "Upload Pipeline": "", + "Upload Pipeline": "Pipeline 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.", @@ -623,22 +623,22 @@ "use_mlock (Ollama)": "use_mlock (Ollama)", "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "kullanıcı", - "User location successfully retrieved.": "", + "User location successfully retrieved.": "Kullanıcı konumu başarıyla alındı.", "User Permissions": "Kullanıcı İzinleri", "Users": "Kullanıcılar", "Utilize": "Kullan", "Valid time units:": "Geçerli zaman birimleri:", - "Valves": "", - "Valves updated": "", - "Valves updated successfully": "", + "Valves": "Valvler", + "Valves updated": "Valvler güncellendi", + "Valves updated successfully": "Valvler başarıyla güncellendi", "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", - "Voice": "", + "Voice": "Ses", "Warning": "Uyarı", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uyarı: Gömme modelinizi günceller veya değiştirirseniz, tüm belgeleri yeniden içe aktarmanız gerekecektir.", "Web": "Web", - "Web API": "", + "Web API": "Web API", "Web Loader Settings": "Web Yükleyici Ayarları", "Web Params": "Web Parametreleri", "Web Search": "Web Araması", @@ -648,20 +648,20 @@ "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)": "", - "Widescreen Mode": "", + "Whisper (Local)": "Whisper (Yerel)", + "Widescreen Mode": "Geniş Ekran Modu", "Workspace": "Çalışma Alanı", "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.", "Yesterday": "Dün", "You": "Sen", - "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "", + "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Aşağıdaki 'Yönet' düğmesi aracılığıyla bellekler ekleyerek LLM'lerle etkileşimlerinizi kişiselleştirebilir, onları daha yararlı ve size özel hale getirebilirsiniz.", "You cannot clone a base model": "Bir temel modeli klonlayamazsınız", "You have no archived conversations.": "Arşivlenmiş sohbetleriniz yok.", "You have shared this chat": "Bu sohbeti paylaştınız", - "You're a helpful assistant.": "Sen yardımcı bir asistansın.", + "You're a helpful assistant.": "Sen yardımsever bir asistansın.", "You're now logged in.": "Şimdi giriş yaptınız.", - "Your account status is currently pending activation.": "", + "Your account status is currently pending activation.": "Hesap durumunuz şu anda etkinleştirilmeyi bekliyor.", "Youtube": "Youtube", "Youtube Loader Settings": "Youtube Yükleyici Ayarları" } diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 03a0a91c4..f4c1e03ce 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -261,8 +261,8 @@ "File": "文件", "File Mode": "文件模式", "File not found.": "文件未找到。", - "Filter is now globally disabled": "", - "Filter is now globally enabled": "", + "Filter is now globally disabled": "过滤器已全局禁用", + "Filter is now globally enabled": "过滤器已全局启用", "Filters": "过滤器", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "检测到指纹伪造:无法使用姓名缩写作为头像。默认使用默认个人形象。", "Fluidly stream large external response chunks": "流畅地传输外部大型响应块数据", @@ -281,7 +281,7 @@ "Generate Image": "生成图像", "Generating search query": "生成搜索查询", "Generation Info": "生成信息", - "Global": "", + "Global": "全局", "Good Response": "点赞此回答", "Google PSE API Key": "Google PSE API 密钥", "Google PSE Engine Id": "Google PSE 引擎 ID", diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index 6e9f29205..af3ab9a01 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -525,7 +525,7 @@ export const extractSentences = (text) => { }); // Split the modified text into sentences based on common punctuation marks, avoiding these blocks - let sentences = text.split(/(?<=[.!?])\s+/); + let sentences = text.match(/[^.?!]+[.!?]+[\])'"`’”]*|.+/g); // Restore code blocks and process sentences sentences = sentences.map((sentence) => { @@ -746,3 +746,15 @@ export const extractFrontmatter = (content) => { return frontmatter; }; + +// Function to determine the best matching language +export const bestMatchingLanguage = (supportedLanguages, preferredLanguages, defaultLocale) => { + const languages = supportedLanguages.map((lang) => lang.code); + + const match = preferredLanguages + .map((prefLang) => languages.find((lang) => lang.startsWith(prefLang))) + .find(Boolean); + + console.log(languages, preferredLanguages, match, defaultLocale); + return match || defaultLocale; +}; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 7a703cce6..68c1e1596 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -31,6 +31,7 @@ import { WEBUI_BASE_URL, WEBUI_HOSTNAME } from '$lib/constants'; import i18n, { initI18n, getLanguages } from '$lib/i18n'; + import { bestMatchingLanguage } from '$lib/utils'; setContext('i18n', i18n); @@ -91,13 +92,17 @@ // Initialize i18n even if we didn't get a backend config, // so `/error` can show something that's not `undefined`. - const languages = await getLanguages(); - - const browserLanguage = navigator.languages - ? navigator.languages[0] - : navigator.language || navigator.userLanguage; - - initI18n(languages.includes(browserLanguage) ? browserLanguage : backendConfig?.default_locale); + initI18n(); + if (!localStorage.locale) { + const languages = await getLanguages(); + const browserLanguages = navigator.languages + ? navigator.languages + : [navigator.language || navigator.userLanguage]; + const lang = backendConfig.default_locale + ? backendConfig.default_locale + : bestMatchingLanguage(languages, browserLanguages, 'en-US'); + $i18n.changeLanguage(lang); + } if (backendConfig) { // Save Backend Status to Store