Unverified Commit 75d71305 authored by perf3ct's avatar perf3ct
Browse files

Merge remote-tracking branch 'upstream/main' into feature-external-db-reconnect

parents ad32a2ef 162643a4
......@@ -3,40 +3,45 @@
"(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(örn. `sh webui.sh --api`)",
"(latest)": "(en son)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{ models }}": "{{ models }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}: Temel modeli silemezsiniz",
"{{modelName}} is thinking...": "{{modelName}} düşünüyor...",
"{{user}}'s Chats": "{{user}} Sohbetleri",
"{{webUIName}} Backend Required": "{{webUIName}} Arkayüz Gerekli",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Bir görev modeli, sohbetler ve web arama sorguları için başlık oluşturma gibi görevleri yerine getirirken kullanılır",
"a user": "bir kullanıcı",
"About": "Hakkında",
"Account": "Hesap",
"Account Activation Pending": "",
"Accurate information": "Doğru bilgi",
"Active Users": "",
"Add": "Ekle",
"Add a model id": "",
"Add a short description about what this model does": "",
"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",
"Add a short title for this prompt": "Bu prompt için kısa bir başlık ekleyin",
"Add a tag": "Bir etiket ekleyin",
"Add custom prompt": "Özel prompt ekle",
"Add Docs": "Dökümanlar Ekle",
"Add Files": "Dosyalar Ekle",
"Add Memory": "Yerelleştirme Ekle",
"Add Memory": "Bellek Ekle",
"Add message": "Mesaj ekle",
"Add Model": "Model Ekle",
"Add Tags": "Etiketler ekle",
"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 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.": "",
"Advanced Parameters": "Gelişmiş Parametreler",
"Advanced Params": "",
"Advanced Params": "Gelişmiş Parametreler",
"all": "tümü",
"All Documents": "Tüm Belgeler",
"All Users": "Tüm Kullanıcılar",
"Allow": "İzin ver",
"Allow Chat Deletion": "Sohbet Silmeye İzin Ver",
"Allow non-local voices": "Yerel olmayan seslere izin verin",
"alphanumeric characters and hyphens": "alfanumerik karakterler ve tireler",
"Already have an account?": "Zaten bir hesabınız mı var?",
"an assistant": "bir asistan",
......@@ -48,7 +53,7 @@
"API keys": "API anahtarları",
"April": "Nisan",
"Archive": "Arşiv",
"Archive All Chats": "",
"Archive All Chats": "Tüm Sohbetleri Arşivle",
"Archived Chats": "Arşivlenmiş Sohbetler",
"are allowed - Activate this command by typing": "izin verilir - Bu komutu yazarak etkinleştirin",
"Are you sure?": "Emin misiniz?",
......@@ -57,19 +62,22 @@
"Audio": "Ses",
"August": "Ağustos",
"Auto-playback response": "Yanıtı otomatik oynatma",
"Auto-send input after 3 sec.": "3 saniye sonra otomatik olarak gönder",
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 Temel URL",
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Temel URL gereklidir.",
"available!": "mevcut!",
"Back": "Geri",
"Bad Response": "Kötü Yanıt",
"Banners": "",
"Base Model (From)": "",
"Banners": "Afişler",
"Base Model (From)": "Temel Model ('den)",
"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": "",
"Cancel": "İptal",
"Capabilities": "",
"Capabilities": "Yetenekler",
"Change Password": "Parola Değiştir",
"Chat": "Sohbet",
"Chat Bubble UI": "Sohbet Balonu UI",
......@@ -85,33 +93,36 @@
"Chunk Params": "Chunk Parametreleri",
"Chunk Size": "Chunk Boyutu",
"Citation": "Alıntı",
"Clear memory": "",
"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 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 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.",
"Clone": "Klon",
"Close": "Kapat",
"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 Password": "Parolayı Onayla",
"Connections": "Bağlantılar",
"Contact Admin for WebUI Access": "",
"Content": "İçerik",
"Context Length": "Bağlam Uzunluğu",
"Continue Response": "Yanıta Devam Et",
"Conversation Mode": "Sohbet Modu",
"Copied shared chat URL to clipboard!": "Paylaşılan sohbet URL'si panoya kopyalandı!",
"Copy": "Kopyala",
"Copy last code block": "Son kod bloğunu kopyala",
"Copy last response": "Son yanıtı kopyala",
"Copy Link": "Bağlantıyı Kopyala",
"Copying to clipboard was successful!": "Panoya kopyalama başarılı!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Aşağıdaki sorgu için başlık olarak 3-5 kelimelik kısa ve öz bir ifade oluşturun, 3-5 kelime sınırına kesinlikle uyun ve 'başlık' kelimesini kullanmaktan kaçının:",
"Create a model": "",
"Create a model": "Bir model oluştur",
"Create Account": "Hesap Oluştur",
"Create new key": "Yeni anahtar oluştur",
"Create new secret key": "Yeni gizli anahtar oluştur",
......@@ -120,38 +131,39 @@
"Current Model": "Mevcut Model",
"Current Password": "Mevcut Parola",
"Custom": "Özel",
"Customize models for a specific purpose": "",
"Customize models for a specific purpose": "Modelleri belirli amaçlar için özelleştir",
"Dark": "Koyu",
"Dashboard": "",
"Database": "Veritabanı",
"December": "Aralık",
"Default": "Varsayılan",
"Default (Automatic1111)": "Varsayılan (Automatic1111)",
"Default (SentenceTransformers)": "Varsayılan (SentenceTransformers)",
"Default (Web API)": "Varsayılan (Web API)",
"Default Model": "",
"Default Model": "Varsayılan Model",
"Default model updated": "Varsayılan model güncellendi",
"Default Prompt Suggestions": "Varsayılan Prompt Önerileri",
"Default User Role": "Varsayılan Kullanıcı Rolü",
"delete": "sil",
"Delete": "Sil",
"Delete a model": "Bir modeli sil",
"Delete All Chats": "",
"Delete All Chats": "Tüm Sohbetleri Sil",
"Delete chat": "Sohbeti sil",
"Delete Chat": "Sohbeti Sil",
"delete this link": "bu bağlantıyı sil",
"Delete User": "Kullanıcıyı Sil",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} silindi",
"Deleted {{name}}": "",
"Deleted {{name}}": "{{name}} silindi",
"Description": "Açıklama",
"Didn't fully follow instructions": "Talimatları tam olarak takip etmedi",
"Disabled": "Devre Dışı",
"Discover a model": "",
"Discover a model": "Bir model keşfedin",
"Discover a prompt": "Bir prompt keşfedin",
"Discover, download, and explore custom prompts": "Özel promptları keşfedin, indirin ve inceleyin",
"Discover, download, and explore model presets": "Model ön ayarlarını keşfedin, indirin ve inceleyin",
"Dismissible": "",
"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": "",
"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",
......@@ -166,24 +178,32 @@
"Edit Doc": "Belgeyi Düzenle",
"Edit User": "Kullanıcıyı Düzenle",
"Email": "E-posta",
"Embedding Batch Size": "Gömme Yığın Boyutu",
"Embedding Model": "Gömme Modeli",
"Embedding Model Engine": "Gömme Modeli Motoru",
"Embedding model set to \"{{embedding_model}}\"": "Gömme modeli \"{{embedding_model}}\" olarak ayarlandı",
"Enable Chat History": "Sohbet Geçmişini Etkinleştir",
"Enable Community Sharing": "",
"Enable Community Sharing": "Topluluk Paylaşımını Etkinleştir",
"Enable New Sign Ups": "Yeni Kayıtları Etkinleştir",
"Enabled": "Etkin",
"Enable Web Search": "Web Aramasını Etkinleştir",
"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'lerin hatırlaması için kendiniz hakkında bir detay girin",
"Enter a detail about yourself for your LLMs to recall": "LLM'lerinizin hatırlaması için kendiniz hakkında bir bilgi girin",
"Enter Brave Search API Key": "Brave Search API Anahtarını Girin",
"Enter Chunk Overlap": "Chunk Örtüşmesini Girin",
"Enter Chunk Size": "Chunk Boyutunu Girin",
"Enter Github Raw URL": "",
"Enter Github Raw URL": "Github Raw URL'sini girin",
"Enter Google PSE API Key": "Google PSE API Anahtarını Girin",
"Enter Google PSE Engine Id": "Google PSE Engine Id'sini Girin",
"Enter Image Size (e.g. 512x512)": "Görüntü Boyutunu Girin (örn. 512x512)",
"Enter language codes": "Dil kodlarını girin",
"Enter model tag (e.g. {{modelTag}})": "Model etiketini girin (örn. {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Adım Sayısını Girin (örn. 50)",
"Enter 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 Serpstack API Key": "Serpstack API Anahtarını Girin",
"Enter stop sequence": "Durdurma dizisini girin",
"Enter Top K": "Top K'yı girin",
"Enter URL (e.g. http://127.0.0.1:7860/)": "URL'yi Girin (örn. http://127.0.0.1:7860/)",
......@@ -192,15 +212,20 @@
"Enter Your Full Name": "Tam Adınızı Girin",
"Enter Your Password": "Parolanızı Girin",
"Enter Your Role": "Rolünüzü Girin",
"Error": "",
"Error": "Hata",
"Experimental": "Deneysel",
"Export": "Dışa Aktar",
"Export All Chats (All Users)": "Tüm Sohbetleri Dışa Aktar (Tüm Kullanıcılar)",
"Export chat (.json)": "Sohbeti dışa aktar (.json)",
"Export Chats": "Sohbetleri Dışa Aktar",
"Export Documents Mapping": "Belge Eşlemesini Dışa Aktar",
"Export Models": "",
"Export Models": "Modelleri Dışa Aktar",
"Export Prompts": "Promptları Dışa Aktar",
"Export Tools": "",
"External Models": "",
"Failed to create API Key.": "API Anahtarı oluşturulamadı.",
"Failed to read clipboard contents": "Pano içeriği okunamadı",
"Failed to update settings": "",
"February": "Şubat",
"Feel free to add specific details": "Spesifik ayrıntılar eklemekten çekinmeyin",
"File Mode": "Dosya Modu",
......@@ -210,13 +235,15 @@
"Focus chat input": "Sohbet girişine odaklan",
"Followed instructions perfectly": "Talimatları mükemmel şekilde takip etti",
"Format your variables using square brackets like this:": "Değişkenlerinizi şu şekilde kare parantezlerle biçimlendirin:",
"Frequencey Penalty": "",
"Full Screen Mode": "Tam Ekran Modu",
"Frequency Penalty": "Frekans Cezası",
"General": "Genel",
"General Settings": "Genel Ayarlar",
"Generating search query": "",
"Generate Image": "",
"Generating search query": "Arama sorgusu oluşturma",
"Generation Info": "Üretim Bilgisi",
"Good Response": "İyi Yanıt",
"Google PSE API Key": "Google PSE API Anahtarı",
"Google PSE Engine Id": "Google PSE Engine Id",
"h:mm a": "h:mm a",
"has no conversations.": "hiç konuşması yok.",
"Hello, {{name}}": "Merhaba, {{name}}",
......@@ -230,42 +257,47 @@
"Images": "Görüntüler",
"Import Chats": "Sohbetleri İçe Aktar",
"Import Documents Mapping": "Belge Eşlemesini İçe Aktar",
"Import Models": "",
"Import Models": "Modelleri İçe Aktar",
"Import Prompts": "Promptları İçe Aktar",
"Import Tools": "",
"Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui çalıştırılırken `--api` bayrağını dahil edin",
"Info": "",
"Info": "Bilgi",
"Input commands": "Giriş komutları",
"Install from Github URL": "",
"Install from Github URL": "Github URL'sinden yükleyin",
"Instant Auto-Send After Voice Transcription": "",
"Interface": "Arayüz",
"Invalid Tag": "Geçersiz etiket",
"January": "Ocak",
"join our Discord for help.": "yardım için Discord'umuza katılın.",
"JSON": "JSON",
"JSON Preview": "",
"JSON Preview": "JSON Önizlemesi",
"July": "Temmuz",
"June": "Haziran",
"JWT Expiration": "JWT Bitişi",
"JWT Token": "JWT Token",
"Keep Alive": "Canlı Tut",
"Keyboard shortcuts": "Klavye kısayolları",
"Knowledge": "",
"Language": "Dil",
"Last Active": "Son Aktivite",
"Light": "Açık",
"Listening...": "Dinleniyor...",
"Listening...": "",
"LLMs can make mistakes. Verify important information.": "LLM'ler hata yapabilir. Önemli bilgileri doğrulayın.",
"Local Models": "",
"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 Models": "Modelleri Yönet",
"Manage Ollama Models": "Ollama Modellerini Yönet",
"Manage Pipelines": "",
"Manage Pipelines": "Pipeline'ları Yönet",
"March": "Mart",
"Max Tokens (num_predict)": "",
"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şilebilecek hatalar burada gösterilecektir.",
"Memory": "Hatalar",
"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şılmaz. URL'ye sahip kullanıcılar paylaşılan sohbeti görüntüleyebilir.",
"Memories accessible by LLMs will be shown here.": "LLM'ler tarafından erişilebilen bellekler burada gösterilecektir.",
"Memory": "Bellek",
"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",
"Mirostat Eta": "Mirostat Eta",
......@@ -275,11 +307,12 @@
"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}} 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 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 ID",
"Model not selected": "Model seçilmedi",
"Model Params": "",
"Model Params": "Model Parametreleri",
"Model Whitelisting": "Model Beyaz Listeye Alma",
"Model(s) Whitelisted": "Model(ler) Beyaz Listeye Alındı",
"Modelfile Content": "Model Dosyası İçeriği",
......@@ -287,24 +320,27 @@
"More": "Daha Fazla",
"Name": "Ad",
"Name Tag": "Ad Etiketi",
"Name your model": "",
"Name your model": "Modelinizi Adlandırın",
"New Chat": "Yeni Sohbet",
"New Password": "Yeni Parola",
"No documents found": "",
"No results found": "Sonuç bulunamadı",
"No search query generated": "",
"No search results found": "",
"No search query generated": "Hiç arama sorgusu oluşturulmadı",
"No source available": "Kaynak mevcut değil",
"None": "",
"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)",
"October": "Ekim",
"Off": "Kapalı",
"Okay, Let's Go!": "Tamam, Hadi Başlayalım!",
"OLED Dark": "OLED Koyu",
"Ollama": "Ollama",
"Ollama API": "",
"Ollama API": "Ollama API",
"Ollama API disabled": "Ollama API'si devre dışı",
"Ollama API is disabled": "",
"Ollama Version": "Ollama Sürümü",
"On": "Açık",
"Only": "Yalnızca",
......@@ -327,10 +363,12 @@
"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 microphone: {{error}}": "Mikrofona erişim izni reddedildi: {{error}}",
"Personalization": "Kullanıcı Özelleştirme",
"Pipelines": "",
"Pipelines Valves": "",
"Personalization": "Kişiselleştirme",
"Pipelines": "Pipelinelar",
"Pipelines Valves": "Pipeline Valvleri",
"Plain text (.txt)": "Düz metin (.txt)",
"Playground": "Oyun Alanı",
"Positive attitude": "Olumlu yaklaşım",
......@@ -349,6 +387,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\")": "",
"Refused when it shouldn't have": "Reddedilmemesi gerekirken reddedildi",
"Regenerate": "Tekrar Oluştur",
"Release Notes": "Sürüm Notları",
......@@ -360,12 +399,14 @@
"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 Upload Directory": "",
"Reset Vector Storage": "Vektör Depolamayı Sıfırla",
"Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala",
"Role": "Rol",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"Running": "",
"Save": "Kaydet",
"Save & Create": "Kaydet ve Oluştur",
"Save & Update": "Kaydet ve Güncelle",
......@@ -375,45 +416,57 @@
"Scan for documents from {{path}}": "{{path}} dizininden belgeleri tarayın",
"Search": "Ara",
"Search a model": "Bir model ara",
"Search Chats": "",
"Search Chats": "Sohbetleri Ara",
"Search Documents": "Belgeleri Ara",
"Search Models": "",
"Search Models": "Modelleri Ara",
"Search Prompts": "Prompt Ara",
"Searched {{count}} sites_one": "",
"Searched {{count}} sites_other": "",
"Searching the web for '{{searchQuery}}'": "",
"Search Query Generation Prompt": "",
"Search Query Generation Prompt Length Threshold": "",
"Search Result Count": "Arama Sonucu Sayısı",
"Search Tools": "",
"Searched {{count}} sites_one": "Arandı {{count}} sites_one",
"Searched {{count}} sites_other": "Arandı {{count}} sites_other",
"Searching \"{{searchQuery}}\"": "",
"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": "",
"Select a base model": "Bir temel model seç",
"Select a engine": "",
"Select a mode": "Bir mod seç",
"Select a model": "Bir model seç",
"Select a pipeline": "",
"Select a pipeline url": "",
"Select a pipeline": "Bir pipeline seç",
"Select a pipeline url": "Bir pipeline URL'si seç",
"Select an Ollama instance": "Bir Ollama örneği seçin",
"Select Documents": "",
"Select model": "Model seç",
"Selected model(s) do not support image inputs": "",
"Select only one model to call": "",
"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": "",
"Serpstack API Key": "Serpstack API Anahtarı",
"Server connection verified": "Sunucu bağlantısı doğrulandı",
"Set as default": "Varsayılan olarak ayarla",
"Set Default Model": "Varsayılan Modeli Ayarla",
"Set embedding model (e.g. {{model}})": "Gömme modelini ayarlayın (örn. {{model}})",
"Set Image Size": "Görüntü Boyutunu Ayarla",
"Set Model": "Model Ayarla",
"Set reranking model (e.g. {{model}})": "Yeniden sıralama modelini ayarlayın (örn. {{model}})",
"Set Steps": "Adımları Ayarla",
"Set Task Model": "",
"Set Task Model": "Görev Modeli Ayarla",
"Set Voice": "Ses Ayarla",
"Settings": "Ayarlar",
"Settings saved successfully!": "Ayarlar başarıyla kaydedildi!",
"Settings updated successfully": "",
"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 shortcuts": "Kısayolları göster",
"Showcased creativity": "Sergilenen yaratıcılık",
"sidebar": "kenar çubuğu",
......@@ -424,8 +477,8 @@
"Source": "Kaynak",
"Speech recognition error: {{error}}": "Konuşma tanıma hatası: {{error}}",
"Speech-to-Text Engine": "Konuşmadan Metne Motoru",
"SpeechRecognition API is not supported in this browser.": "SpeechRecognition API bu tarayıcıda desteklenmiyor.",
"Stop Sequence": "Diziyi Durdur",
"STT Model": "",
"STT Settings": "STT Ayarları",
"Submit": "Gönder",
"Subtitle (e.g. about the Roman Empire)": "Alt başlık (örn. Roma İmparatorluğu hakkında)",
......@@ -444,7 +497,9 @@
"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 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 setting does not sync across browsers or devices.": "Bu ayar tarayıcılar veya cihazlar arasında senkronize edilmez.",
"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.",
......@@ -456,27 +511,36 @@
"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 chat input.": "sohbet girişine.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Bugün",
"Toggle settings": "Ayarları Aç/Kapat",
"Toggle sidebar": "Kenar Çubuğunu Aç/Kapat",
"Tools": "",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "Ollama'ya erişmede sorun mu yaşıyorsunuz?",
"TTS Model": "",
"TTS Settings": "TTS Ayarları",
"Type": "",
"TTS Voice": "",
"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.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Bilinmeyen Dosya Türü '{{file_type}}', ancak düz metin olarak kabul ediliyor ve işleniyor",
"Update and Copy Link": "Güncelle ve Bağlantıyı Kopyala",
"Update password": "Parolayı Güncelle",
"Upload a GGUF model": "Bir GGUF modeli yükle",
"Upload Files": "",
"Upload Files": "Dosyaları Yükle",
"Upload Pipeline": "",
"Upload Progress": "Yükleme İlerlemesi",
"URL Mode": "URL Modu",
"Use '#' in the prompt input to load and select your documents.": "Belgelerinizi yüklemek ve seçmek için promptda '#' kullanın.",
"Use Gravatar": "Gravatar Kullan",
"Use Initials": "Baş Harfleri Kullan",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "kullanıcı",
"User Permissions": "Kullanıcı İzinleri",
"Users": "Kullanıcılar",
......@@ -485,29 +549,34 @@
"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",
"Warning": "",
"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 Loader Settings": "Web Yükleyici Ayarları",
"Web Params": "Web Parametreleri",
"Web Search": "",
"Web Search": "Web Araması",
"Web Search Engine": "Web Arama Motoru",
"Webhook URL": "Webhook URL",
"WebUI Add-ons": "WebUI Eklentileri",
"WebUI Settings": "WebUI Ayarları",
"WebUI will make requests to": "WebUI, isteklerde bulunacak:",
"What’s New in": "Yenilikler:",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Geçmiş kapatıldığında, bu tarayıcıdaki yeni sohbetler hiçbir cihazınızdaki geçmişinizde görünmez.",
"Whisper (Local)": "Whisper (Yerel)",
"Whisper (Local)": "",
"Widescreen Mode": "",
"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 cannot clone a base model": "",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "",
"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 now logged in.": "Şimdi oturum açtınız.",
"You're now logged in.": "Şimdi giriş yaptınız.",
"Your account status is currently pending activation.": "",
"Youtube": "Youtube",
"Youtube Loader Settings": "Youtube Yükleyici Ayarları"
}
......@@ -3,19 +3,21 @@
"(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
"(latest)": "(остання)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{ models }}": "{{ models }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}: Ви не можете видалити базову модель.",
"{{modelName}} is thinking...": "{{modelName}} думає...",
"{{user}}'s Chats": "Чати {{user}}а",
"{{webUIName}} Backend Required": "Необхідно підключення бекенду {{webUIName}}",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Модель задач використовується при виконанні таких завдань, як генерація заголовків для чатів та пошукових запитів в Інтернеті",
"a user": "користувача",
"About": "Про програму",
"Account": "Обліковий запис",
"Account Activation Pending": "Очікування активації облікового запису",
"Accurate information": "Точна інформація",
"Active Users": "Активні користувачі",
"Add": "Додати",
"Add a model id": "",
"Add a short description about what this model does": "",
"Add a model id": "Додайте id моделі",
"Add a short description about what this model does": "Додайте короткий опис того, що робить ця модель",
"Add a short title for this prompt": "Додати коротку назву для цього промту",
"Add a tag": "Додайте тег",
"Add custom prompt": "Додати користувацьку підказку",
......@@ -28,15 +30,18 @@
"Add User": "Додати користувача",
"Adjusting these settings will apply changes universally to all users.": "Зміни в цих налаштуваннях будуть застосовані для всіх користувачів.",
"admin": "адмін",
"Admin Panel": "Панель адміністратора",
"Admin": "Адмін",
"Admin Panel": "Адмін-панель",
"Admin Settings": "Налаштування адміністратора",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
"Advanced Parameters": "Розширені параметри",
"Advanced Params": "",
"Advanced Params": "Розширені параметри",
"all": "всі",
"All Documents": "Усі документи",
"All Users": "Всі користувачі",
"Allow": "Дозволити",
"Allow Chat Deletion": "Дозволити видалення чату",
"Allow non-local voices": "Дозволити не локальні голоси",
"alphanumeric characters and hyphens": "алфавітно-цифрові символи та дефіси",
"Already have an account?": "Вже є обліковий запис?",
"an assistant": "асистента",
......@@ -48,7 +53,7 @@
"API keys": "Ключі API",
"April": "Квітень",
"Archive": "Архів",
"Archive All Chats": "",
"Archive All Chats": "Архівувати всі чати",
"Archived Chats": "Архівовані чати",
"are allowed - Activate this command by typing": "дозволено - активізуйте цю команду набором",
"Are you sure?": "Ви впевнені?",
......@@ -57,19 +62,22 @@
"Audio": "Аудіо",
"August": "Серпень",
"Auto-playback response": "Автоматичне відтворення відповіді",
"Auto-send input after 3 sec.": "Автоматична відправка через 3 сек.",
"AUTOMATIC1111 Base URL": "URL-адреса AUTOMATIC1111",
"AUTOMATIC1111 Base URL is required.": "Необхідна URL-адреса AUTOMATIC1111.",
"available!": "доступно!",
"Back": "Назад",
"Bad Response": "Неправильна відповідь",
"Banners": "",
"Base Model (From)": "",
"Banners": "Прапори",
"Base Model (From)": "Базова модель (від)",
"before": "до того, як",
"Being lazy": "Не поспішати",
"Brave Search API Key": "Ключ API пошуку Brave",
"Bypass SSL verification for Websites": "Обхід SSL-перевірки для веб-сайтів",
"Call": "Виклик",
"Call feature is not supported when using Web STT engine": "Функція виклику не підтримується при використанні Web STT (розпізнавання мовлення) рушія",
"Camera": "",
"Cancel": "Скасувати",
"Capabilities": "",
"Capabilities": "Можливості",
"Change Password": "Змінити пароль",
"Chat": "Чат",
"Chat Bubble UI": "Бульбашковий UI чату",
......@@ -85,33 +93,36 @@
"Chunk Params": "Параметри фрагментів",
"Chunk Size": "Розмір фрагменту",
"Citation": "Цитування",
"Clear memory": "Очистити пам'ять",
"Click here for help.": "Клацніть тут, щоб отримати допомогу.",
"Click here to": "Натисніть тут, щоб",
"Click here to select": "Натисніть тут, щоб вибрати",
"Click here to select a csv file.": "Натисніть тут, щоб вибрати csv-файл.",
"Click here to select a py file.": "Натисніть тут, щоб вибрати py-файл.",
"Click here to select documents.": "Натисніть тут, щоб вибрати документи.",
"click here.": "клацніть тут.",
"Click on the user role button to change a user's role.": "Натисніть кнопку ролі користувача, щоб змінити роль користувача.",
"Clone": "Клонувати",
"Close": "Закрити",
"Collection": "Колекція",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "URL-адреса ComfyUI",
"ComfyUI Base URL is required.": "Необхідно вказати URL-адресу ComfyUI.",
"Command": "Команда",
"Concurrent Requests": "Одночасні запити",
"Confirm Password": "Підтвердіть пароль",
"Connections": "З'єднання",
"Contact Admin for WebUI Access": "Зверніться до адміна для отримання доступу до WebUI",
"Content": "Зміст",
"Context Length": "Довжина контексту",
"Continue Response": "Продовжити відповідь",
"Conversation Mode": "Режим розмови",
"Copied shared chat URL to clipboard!": "Скопійовано URL-адресу спільного чату в буфер обміну!",
"Copy": "Копіювати",
"Copy last code block": "Копіювати останній блок коду",
"Copy last response": "Копіювати останню відповідь",
"Copy Link": "Копіювати посилання",
"Copying to clipboard was successful!": "Копіювання в буфер обміну виконано успішно!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':",
"Create a model": "",
"Create a model": "Створити модель",
"Create Account": "Створити обліковий запис",
"Create new key": "Створити новий ключ",
"Create new secret key": "Створити новий секретний ключ",
......@@ -120,38 +131,39 @@
"Current Model": "Поточна модель",
"Current Password": "Поточний пароль",
"Custom": "Налаштувати",
"Customize models for a specific purpose": "",
"Customize models for a specific purpose": "Налаштуйте моделі для конкретних цілей",
"Dark": "Темна",
"Dashboard": "Панель керування",
"Database": "База даних",
"December": "Грудень",
"Default": "За замовчуванням",
"Default (Automatic1111)": "За замовчуванням (Automatic1111)",
"Default (SentenceTransformers)": "За замовчуванням (SentenceTransformers)",
"Default (Web API)": "За замовчуванням (Web API)",
"Default Model": "",
"Default Model": "Модель за замовчуванням",
"Default model updated": "Модель за замовчуванням оновлено",
"Default Prompt Suggestions": "Пропозиції промтів замовчуванням",
"Default User Role": "Роль користувача за замовчуванням",
"delete": "видалити",
"Delete": "Видалити",
"Delete a model": "Видалити модель",
"Delete All Chats": "",
"Delete All Chats": "Видалити усі чати",
"Delete chat": "Видалити чат",
"Delete Chat": "Видалити чат",
"delete this link": "видалити це посилання",
"Delete User": "Видалити користувача",
"Deleted {{deleteModelTag}}": "Видалено {{deleteModelTag}}",
"Deleted {{name}}": "",
"Deleted {{name}}": "Видалено {{name}}",
"Description": "Опис",
"Didn't fully follow instructions": "Не повністю дотримувалися інструкцій",
"Disabled": "Вимкнено",
"Discover a model": "",
"Discover a model": "Знайдіть модель",
"Discover a prompt": "Знайти промт",
"Discover, download, and explore custom prompts": "Знайдіть, завантажте та досліджуйте налаштовані промти",
"Discover, download, and explore model presets": "Знайдіть, завантажте та досліджуйте налаштовані налаштування моделі",
"Dismissible": "Неприйнятно",
"Display the username instead of You in the Chat": "Показувати ім'я користувача замість 'Ви' в чаті",
"Document": "Документ",
"Document Settings": "Налаштування документа",
"Documentation": "Документація",
"Documents": "Документи",
"does not make any external connections, and your data stays securely on your locally hosted server.": "не встановлює жодних зовнішніх з'єднань, і ваші дані залишаються в безпеці на вашому локальному сервері.",
"Don't Allow": "Не дозволяти",
......@@ -166,24 +178,32 @@
"Edit Doc": "Редагувати документ",
"Edit User": "Редагувати користувача",
"Email": "Електронна пошта",
"Embedding Batch Size": "Розмір пакету під час вбудовування",
"Embedding Model": "Модель вбудовування",
"Embedding Model Engine": "Двигун модели встраивания ",
"Embedding Model Engine": "Рушій моделі вбудовування ",
"Embedding model set to \"{{embedding_model}}\"": "Встановлена модель вбудовування \"{{embedding_model}}\"",
"Enable Chat History": "Увімкнути історію чату",
"Enable Community Sharing": "",
"Enable Community Sharing": "Ввімкніть спільний доступ до спільноти",
"Enable New Sign Ups": "Дозволити нові реєстрації",
"Enabled": "Увімкнено",
"Enable Web Search": "Увімкнути веб-пошук",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Переконайтеся, що ваш CSV-файл містить 4 колонки в такому порядку: Ім'я, Email, Пароль, Роль.",
"Enter {{role}} message here": "Введіть повідомлення {{role}} тут",
"Enter a detail about yourself for your LLMs to recall": "Введіть відомості про себе для запам'ятовування вашими LLM.",
"Enter Brave Search API Key": "Введіть ключ API для пошуку Brave",
"Enter Chunk Overlap": "Введіть перекриття фрагменту",
"Enter Chunk Size": "Введіть розмір фрагменту",
"Enter Github Raw URL": "",
"Enter Github Raw URL": "Введіть Raw URL-адресу Github",
"Enter Google PSE API Key": "Введіть ключ API Google PSE",
"Enter Google PSE Engine Id": "Введіть Google PSE Engine Id",
"Enter Image Size (e.g. 512x512)": "Введіть розмір зображення (напр., 512x512)",
"Enter language codes": "Введіть мовні коди",
"Enter model tag (e.g. {{modelTag}})": "Введіть тег моделі (напр., {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Введіть кількість кроків (напр., 50)",
"Enter Score": "Введіть бал",
"Enter Searxng Query URL": "Введіть URL-адресу запиту Searxng",
"Enter Serper API Key": "Введіть ключ API Serper",
"Enter Serply API Key": "",
"Enter Serpstack API Key": "Введіть ключ API Serpstack",
"Enter stop sequence": "Введіть символ зупинки",
"Enter Top K": "Введіть Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Введіть URL-адресу (напр., http://127.0.0.1:7860/)",
......@@ -192,15 +212,20 @@
"Enter Your Full Name": "Введіть ваше ім'я",
"Enter Your Password": "Введіть ваш пароль",
"Enter Your Role": "Введіть вашу роль",
"Error": "",
"Error": "Помилка",
"Experimental": "Експериментальне",
"Export": "Експорт",
"Export All Chats (All Users)": "Експортувати всі чати (всі користувачі)",
"Export chat (.json)": "Експорт чату (.json)",
"Export Chats": "Експортувати чати",
"Export Documents Mapping": "Експортувати відображення документів",
"Export Models": "",
"Export Models": "Експорт моделей",
"Export Prompts": "Експортувати промти",
"Export Tools": "",
"External Models": "Зовнішні моделі",
"Failed to create API Key.": "Не вдалося створити API ключ.",
"Failed to read clipboard contents": "Не вдалося прочитати вміст буфера обміну",
"Failed to update settings": "Не вдалося оновити налаштування",
"February": "Лютий",
"Feel free to add specific details": "Не соромтеся додавати конкретні деталі",
"File Mode": "Файловий режим",
......@@ -210,13 +235,15 @@
"Focus chat input": "Фокус вводу чату",
"Followed instructions perfectly": "Бездоганно дотримувався інструкцій",
"Format your variables using square brackets like this:": "Форматуйте свої змінні квадратними дужками так:",
"Frequencey Penalty": "",
"Full Screen Mode": "Режим повного екрану",
"Frequency Penalty": "Штраф за частоту",
"General": "Загальні",
"General Settings": "Загальні налаштування",
"Generating search query": "",
"Generate Image": "Створити зображення",
"Generating search query": "Сформувати пошуковий запит",
"Generation Info": "Інформація про генерацію",
"Good Response": "Гарна відповідь",
"Google PSE API Key": "Ключ API Google PSE",
"Google PSE Engine Id": "Id рушія Google PSE",
"h:mm a": "h:mm a",
"has no conversations.": "не має розмов.",
"Hello, {{name}}": "Привіт, {{name}}",
......@@ -230,37 +257,42 @@
"Images": "Зображення",
"Import Chats": "Імпортувати чати",
"Import Documents Mapping": "Імпортувати відображення документів",
"Import Models": "",
"Import Models": "Імпорт моделей",
"Import Prompts": "Імпортувати промти",
"Import Tools": "",
"Include `--api` flag when running stable-diffusion-webui": "Включіть прапор `--api` при запуску stable-diffusion-webui",
"Info": "",
"Info": "Інфо",
"Input commands": "Команди вводу",
"Install from Github URL": "",
"Install from Github URL": "Встановіть з URL-адреси Github",
"Instant Auto-Send After Voice Transcription": "Миттєва автоматична відправка після транскрипції голосу",
"Interface": "Інтерфейс",
"Invalid Tag": "Недійсний тег",
"January": "Січень",
"join our Discord for help.": "приєднуйтеся до нашого Discord для допомоги.",
"JSON": "JSON",
"JSON Preview": "",
"JSON Preview": "Перегляд JSON",
"July": "Липень",
"June": "Червень",
"JWT Expiration": "Термін дії JWT",
"JWT Token": "Токен JWT",
"Keep Alive": "Зберегти активність",
"Keyboard shortcuts": "Клавіатурні скорочення",
"Knowledge": "",
"Language": "Мова",
"Last Active": "Остання активність",
"Light": "Світла",
"Listening...": "Слухаю...",
"Listening...": "",
"LLMs can make mistakes. Verify important information.": "LLMs можуть помилятися. Перевірте важливу інформацію.",
"Local Models": "Локальні моделі",
"LTR": "LTR",
"Made by OpenWebUI Community": "Зроблено спільнотою OpenWebUI",
"Make sure to enclose them with": "Переконайтеся, що вони закриті",
"Manage": "Керувати",
"Manage Models": "Керування моделями",
"Manage Ollama Models": "Керування моделями Ollama",
"Manage Pipelines": "",
"Manage Pipelines": "Управління Pipelines",
"March": "Березень",
"Max Tokens (num_predict)": "",
"Max Tokens (num_predict)": "Макс токенів (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Максимум 3 моделі можна завантажити одночасно. Будь ласка, спробуйте пізніше.",
"May": "Травень",
"Memories accessible by LLMs will be shown here.": "Пам'ять, яка доступна LLM, буде показана тут.",
......@@ -275,11 +307,12 @@
"Model '{{modelName}}' has been successfully downloaded.": "Модель '{{modelName}}' успішно завантажено.",
"Model '{{modelTag}}' is already in queue for downloading.": "Модель '{{modelTag}}' вже знаходиться в черзі на завантаження.",
"Model {{modelId}} not found": "Модель {{modelId}} не знайдено",
"Model {{modelName}} is not vision capable": "",
"Model {{modelName}} is not vision capable": "Модель {{modelName}} не здатна бачити",
"Model {{name}} is now {{status}}": "Модель {{name}} тепер має {{status}}",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Виявлено шлях до файлової системи моделі. Для оновлення потрібно вказати коротке ім'я моделі, не вдасться продовжити.",
"Model ID": "",
"Model ID": "ID моделі",
"Model not selected": "Модель не вибрана",
"Model Params": "",
"Model Params": "Параметри моделі",
"Model Whitelisting": "Модель білого списку",
"Model(s) Whitelisted": "Модель(і) білого списку",
"Modelfile Content": "Вміст файлу моделі",
......@@ -287,24 +320,27 @@
"More": "Більше",
"Name": "Ім'я",
"Name Tag": "Назва тегу",
"Name your model": "",
"Name your model": "Назвіть свою модель",
"New Chat": "Новий чат",
"New Password": "Новий пароль",
"No documents found": "",
"No results found": "Не знайдено жодного результату",
"No search query generated": "",
"No search results found": "",
"No search query generated": "Пошуковий запит не сформовано",
"No source available": "Джерело не доступне",
"None": "",
"None": "Нема",
"Not factually correct": "Не відповідає дійсності",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Примітка: Якщо ви встановите мінімальну кількість балів, пошук поверне лише документи з кількістю балів, більшою або рівною мінімальній кількості балів.",
"Notifications": "Сповіщення",
"November": "Листопад",
"num_thread (Ollama)": "num_thread (Ollama)",
"October": "Жовтень",
"Off": "Вимк",
"Okay, Let's Go!": "Гаразд, давайте почнемо!",
"OLED Dark": "Темний OLED",
"Ollama": "Ollama",
"Ollama API": "",
"Ollama API": "Ollama API",
"Ollama API disabled": "Ollama API вимкнено",
"Ollama API is disabled": "API Ollama вимкнено",
"Ollama Version": "Версія Ollama",
"On": "Увімк",
"Only": "Тільки",
......@@ -327,10 +363,12 @@
"PDF document (.pdf)": "PDF документ (.pdf)",
"PDF Extract Images (OCR)": "Розпізнавання зображень з PDF (OCR)",
"pending": "на розгляді",
"Permission denied when accessing media devices": "Відмовлено в доступі до медіапристроїв",
"Permission denied when accessing microphone": "Відмовлено у доступі до мікрофона",
"Permission denied when accessing microphone: {{error}}": "Доступ до мікрофона заборонено: {{error}}",
"Personalization": "Персоналізація",
"Pipelines": "",
"Pipelines Valves": "",
"Pipelines": "Pipelines",
"Pipelines Valves": "Pipelines Valves",
"Plain text (.txt)": "Простий текст (.txt)",
"Playground": "Майданчик",
"Positive attitude": "Позитивне ставлення",
......@@ -349,6 +387,7 @@
"Read Aloud": "Читати вголос",
"Record voice": "Записати голос",
"Redirecting you to OpenWebUI Community": "Перенаправляємо вас до спільноти OpenWebUI",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Називайте себе \"Користувач\" (наприклад, \"Користувач вивчає іспанську мову\")",
"Refused when it shouldn't have": "Відмовив, коли не мав би",
"Regenerate": "Регенерувати",
"Release Notes": "Нотатки до випуску",
......@@ -360,12 +399,14 @@
"Reranking Model": "Модель переранжування",
"Reranking model disabled": "Модель переранжування вимкнена",
"Reranking model set to \"{{reranking_model}}\"": "Модель переранжування встановлено на \"{{reranking_model}}\"",
"Reset Upload Directory": "Скинути каталог завантажень",
"Reset Vector Storage": "Скинути векторне сховище",
"Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну",
"Role": "Роль",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"Running": "Виконується",
"Save": "Зберегти",
"Save & Create": "Зберегти та створити",
"Save & Update": "Зберегти та оновити",
......@@ -375,47 +416,59 @@
"Scan for documents from {{path}}": "Сканування документів з {{path}}",
"Search": "Пошук",
"Search a model": "Шукати модель",
"Search Chats": "",
"Search Chats": "Пошук в чатах",
"Search Documents": "Пошук документів",
"Search Models": "",
"Search Models": "Пошук моделей",
"Search Prompts": "Пошук промтів",
"Searched {{count}} sites_one": "",
"Searched {{count}} sites_few": "",
"Searched {{count}} sites_many": "",
"Searched {{count}} sites_other": "",
"Searching the web for '{{searchQuery}}'": "",
"Search Query Generation Prompt": "",
"Search Query Generation Prompt Length Threshold": "",
"Search Result Count": "Кількість результатів пошуку",
"Search Tools": "",
"Searched {{count}} sites_one": "Переглянуто {{count}} сайт",
"Searched {{count}} sites_few": "Переглянуто {{count}} сайти",
"Searched {{count}} sites_many": "Переглянуто {{count}} сайтів",
"Searched {{count}} sites_other": "Переглянуто {{count}} сайтів",
"Searching \"{{searchQuery}}\"": "",
"Searxng Query URL": "URL-адреса запиту Searxng",
"See readme.md for instructions": "Див. readme.md для інструкцій",
"See what's new": "Подивіться, що нового",
"Seed": "Сід",
"Select a base model": "",
"Select a base model": "Вибрати базову модель",
"Select a engine": "Виберіть рушій",
"Select a mode": "Оберіть режим",
"Select a model": "Виберіть модель",
"Select a pipeline": "",
"Select a pipeline url": "",
"Select a pipeline": "Виберіть pipeline",
"Select a pipeline url": "Виберіть адресу pipeline",
"Select an Ollama instance": "Виберіть екземпляр Ollama",
"Select Documents": "",
"Select model": "Вибрати модель",
"Selected model(s) do not support image inputs": "",
"Select only one model to call": "Виберіть лише одну модель для виклику",
"Selected model(s) do not support image inputs": "Вибрані модель(і) не підтримують вхідні зображення",
"Send": "Надіслати",
"Send a Message": "Надіслати повідомлення",
"Send message": "Надіслати повідомлення",
"September": "Вересень",
"Serper API Key": "Ключ API Serper",
"Serply API Key": "",
"Serpstack API Key": "Ключ API Serpstack",
"Server connection verified": "З'єднання з сервером підтверджено",
"Set as default": "Встановити за замовчуванням",
"Set Default Model": "Встановити модель за замовчуванням",
"Set embedding model (e.g. {{model}})": "Встановити модель вбудовування (напр, {{model}})",
"Set Image Size": "Встановити розмір зображення",
"Set Model": "Встановити модель",
"Set reranking model (e.g. {{model}})": "Встановити модель переранжування (напр., {{model}})",
"Set Steps": "Встановити кроки",
"Set Task Model": "",
"Set Task Model": "Встановити модель задач",
"Set Voice": "Встановити голос",
"Settings": "Налаштування",
"Settings saved successfully!": "Налаштування успішно збережено!",
"Settings updated successfully": "Налаштування успішно оновлені",
"Share": "Поділитися",
"Share Chat": "Поділитися чатом",
"Share to OpenWebUI Community": "Поділитися зі спільнотою OpenWebUI",
"short-summary": "короткий зміст",
"Show": "Показати",
"Show Admin Details in Account Pending Overlay": "Відобразити дані адміна у вікні очікування облікового запису",
"Show shortcuts": "Показати клавіатурні скорочення",
"Showcased creativity": "Продемонстрований креатив",
"sidebar": "бокова панель",
......@@ -426,8 +479,8 @@
"Source": "Джерело",
"Speech recognition error: {{error}}": "Помилка розпізнавання мови: {{error}}",
"Speech-to-Text Engine": "Система розпізнавання мови",
"SpeechRecognition API is not supported in this browser.": "SpeechRecognition API не підтримується в цьому браузері.",
"Stop Sequence": "Символ зупинки",
"STT Model": "Модель STT ",
"STT Settings": "Налаштування STT",
"Submit": "Надіслати",
"Subtitle (e.g. about the Roman Empire)": "Підзаголовок (напр., про Римську імперію)",
......@@ -446,7 +499,9 @@
"Thanks for your feedback!": "Дякуємо за ваш відгук!",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Оцінка повинна бути в діапазоні від 0.0 (0%) до 1.0 (100%).",
"Theme": "Тема",
"Thinking...": "",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Це забезпечує збереження ваших цінних розмов у безпечному бекенд-сховищі. Дякуємо!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Це експериментальна функція, вона може працювати не так, як очікувалося, і може бути змінена в будь-який час.",
"This setting does not sync across browsers or devices.": "Це налаштування не синхронізується між браузерами або пристроями.",
"Thorough explanation": "Детальне пояснення",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Порада: Оновіть кілька слотів змінних послідовно, натискаючи клавішу табуляції у вікні чату після кожної заміни.",
......@@ -458,27 +513,36 @@
"to": "в",
"To access the available model names for downloading,": "Щоб отримати доступ до назв доступних для завантаження моделей,",
"To access the GGUF models available for downloading,": "Щоб отримати доступ до моделей GGUF, які можна завантажити,,",
"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 chat input.": "в чаті.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Сьогодні",
"Toggle settings": "Переключити налаштування",
"Toggle sidebar": "Переключити бокову панель",
"Tools": "",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "Проблеми з доступом до Ollama?",
"TTS Model": "Модель TTS",
"TTS Settings": "Налаштування TTS",
"Type": "",
"TTS Voice": "Голос TTS",
"Type": "Тип",
"Type Hugging Face Resolve (Download) URL": "Введіть URL ресурсу Hugging Face Resolve (завантаження)",
"Uh-oh! There was an issue connecting to {{provider}}.": "Ой! Виникла проблема при підключенні до {{provider}}.",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Невідомий тип файлу '{{file_type}}', але приймається та обробляється як звичайний текст",
"Update and Copy Link": "Оновлення та копіювання посилання",
"Update password": "Оновити пароль",
"Upload a GGUF model": "Завантажити GGUF модель",
"Upload Files": "",
"Upload Files": "Завантажити файли",
"Upload Pipeline": "Завантаження Pipeline",
"Upload Progress": "Прогрес завантаження",
"URL Mode": "Режим URL-адреси",
"Use '#' in the prompt input to load and select your documents.": "Для введення промтів до веб-сторінок (URL) або вибору документів, будь ласка, використовуйте символ '#'.",
"Use Gravatar": "Змінити аватар",
"Use Initials": "Використовувати ініціали",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "користувач",
"User Permissions": "Права користувача",
"Users": "Користувачі",
......@@ -487,29 +551,34 @@
"variable": "змінна",
"variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.",
"Version": "Версія",
"Warning": "",
"Warning": "Увага!",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Попередження: Якщо ви оновлюєте або змінюєте модель вбудовування, вам потрібно буде повторно імпортувати всі документи.",
"Web": "Веб",
"Web API": "Веб-API",
"Web Loader Settings": "Налаштування веб-завантажувача",
"Web Params": "Налаштування веб-завантажувача",
"Web Search": "",
"Web Search": "Веб-пошук",
"Web Search Engine": "Веб-пошукова система",
"Webhook URL": "URL веб-запиту",
"WebUI Add-ons": "Додатки WebUI",
"WebUI Settings": "Налаштування WebUI",
"WebUI will make requests to": "WebUI буде робити запити до",
"What’s New in": "Що нового в",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Коли історія вимкнена, нові чати в цьому браузері не будуть відображатися в історії на жодному з ваших пристроїв.",
"Whisper (Local)": "Whisper (локально)",
"Whisper (Local)": "Whisper (Локально)",
"Widescreen Mode": "Широкоекранний режим",
"Workspace": "Робочий простір",
"Write a prompt suggestion (e.g. Who are you?)": "Напишіть промт (напр., Хто ти?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Напишіть стислий зміст у 50 слів, який узагальнює [тема або ключове слово].",
"Yesterday": "Вчора",
"You": "Ви",
"You cannot clone a base model": "",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Ви можете налаштувати ваші взаємодії з мовними моделями, додавши спогади через кнопку 'Керувати' внизу, що зробить їх більш корисними та персоналізованими для вас.",
"You cannot clone a base model": "Базову модель не можна клонувати",
"You have no archived conversations.": "У вас немає архівованих розмов.",
"You have shared this chat": "Ви поділилися цим чатом",
"You're a helpful assistant.": "Ви корисний асистент.",
"You're now logged in.": "Ви увійшли в систему.",
"Your account status is currently pending activation.": "Статус вашого облікового запису наразі очікує на активацію.",
"Youtube": "Youtube",
"Youtube Loader Settings": "Налаштування завантажувача Youtube"
}
......@@ -3,18 +3,20 @@
"(Beta)": "(Beta)",
"(e.g. `sh webui.sh --api`)": "(vd: `sh webui.sh --api`)",
"(latest)": "(mới nhất)",
"{{ models }}": "",
"{{ models }}": "{{ mô hình }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}: Bạn không thể xóa base model",
"{{modelName}} is thinking...": "{{modelName}} đang suy nghĩ...",
"{{user}}'s Chats": "{{user}}'s Chats",
"{{webUIName}} Backend Required": "{{webUIName}} Yêu cầu Backend",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Mô hình tác vụ được sử dụng khi thực hiện các tác vụ như tạo tiêu đề cho cuộc trò chuyện và truy vấn tìm kiếm trên web",
"a user": "người sử dụng",
"About": "Giới thiệu",
"Account": "Tài khoản",
"Account Activation Pending": "Tài khoản đang chờ kích hoạt",
"Accurate information": "Thông tin chính xác",
"Active Users": "Người dùng đang hoạt động",
"Add": "Thêm",
"Add a model id": "",
"Add a model id": "Thêm model id",
"Add a short description about what this model does": "Thêm mô tả ngắn về những khả năng của model",
"Add a short title for this prompt": "Thêm tiêu đề ngắn cho prompt này",
"Add a tag": "Thêm thẻ (tag)",
......@@ -28,15 +30,18 @@
"Add User": "Thêm người dùng",
"Adjusting these settings will apply changes universally to all users.": "Các thay đổi cài đặt này sẽ áp dụng cho tất cả người sử dụng.",
"admin": "quản trị viên",
"Admin": "Quản trị",
"Admin Panel": "Trang Quản trị",
"Admin Settings": "Cài đặt hệ thống",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
"Advanced Parameters": "Các tham số Nâng cao",
"Advanced Params": "",
"Advanced Params": "Các tham số Nâng cao",
"all": "tất cả",
"All Documents": "Tất cả tài liệu",
"All Users": "Danh sách người sử dụng",
"Allow": "Cho phép",
"Allow Chat Deletion": "Cho phép Xóa nội dung chat",
"Allow non-local voices": "",
"alphanumeric characters and hyphens": "ký tự số và gạch nối",
"Already have an account?": "Bạn đã có tài khoản?",
"an assistant": "trợ lý",
......@@ -57,17 +62,20 @@
"Audio": "Âm thanh",
"August": "Tháng 8",
"Auto-playback response": "Tự động phát lại phản hồi (Auto-playback)",
"Auto-send input after 3 sec.": "Tự động gửi đầu vào sau 3 giây.",
"AUTOMATIC1111 Base URL": "Đường dẫn kết nối tới AUTOMATIC1111 (Base URL)",
"AUTOMATIC1111 Base URL is required.": "Base URL của AUTOMATIC1111 là bắt buộc.",
"available!": "có sẵn!",
"Back": "Quay lại",
"Bad Response": "Trả lời KHÔNG tốt",
"Banners": "",
"Base Model (From)": "",
"Banners": "Biểu ngữ",
"Base Model (From)": "Mô hình cơ sở (từ)",
"before": "trước",
"Being lazy": "Lười biếng",
"Brave Search API Key": "Khóa API tìm kiếm dũng cảm",
"Bypass SSL verification for Websites": "Bỏ qua xác thực SSL cho các trang web",
"Call": "Gọi",
"Call feature is not supported when using Web STT engine": "Tính năng gọi điện không được hỗ trợ khi sử dụng công cụ Web STT",
"Camera": "",
"Cancel": "Hủy bỏ",
"Capabilities": "Năng lực",
"Change Password": "Đổi Mật khẩu",
......@@ -85,32 +93,35 @@
"Chunk Params": "Tham số khối (chunk)",
"Chunk Size": "Kích thước khối (size)",
"Citation": "Trích dẫn",
"Clear memory": "Xóa bộ nhớ",
"Click here for help.": "Bấm vào đây để được trợ giúp.",
"Click here to": "Nhấn vào đây để",
"Click here to select": "Bấm vào đây để chọn",
"Click here to select a csv file.": "Nhấn vào đây để chọn tệp csv",
"Click here to select a py file.": "Nhấn vào đây để chọn tệp py",
"Click here to select documents.": "Bấm vào đây để chọn tài liệu.",
"click here.": "bấm vào đây.",
"Click on the user role button to change a user's role.": "Bấm vào nút trong cột VAI TRÒ để thay đổi quyền của người sử dụng.",
"Clone": "Nhân bản",
"Close": "Đóng",
"Collection": "Tổng hợp mọi tài liệu",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "ComfyUI Base URL",
"ComfyUI Base URL is required.": "Base URL của ComfyUI là bắt buộc.",
"Command": "Lệnh",
"Concurrent Requests": "Các truy vấn đồng thời",
"Confirm Password": "Xác nhận Mật khẩu",
"Connections": "Kết nối",
"Contact Admin for WebUI Access": "Liên hệ với Quản trị viên để được cấp quyền truy cập",
"Content": "Nội dung",
"Context Length": "Độ dài ngữ cảnh (Context Length)",
"Continue Response": "Tiếp tục trả lời",
"Conversation Mode": "Chế độ hội thoại",
"Copied shared chat URL to clipboard!": "Đã sao chép link chia sẻ trò chuyện vào clipboard!",
"Copy": "Sao chép",
"Copy last code block": "Sao chép khối mã cuối cùng",
"Copy last response": "Sao chép phản hồi cuối cùng",
"Copy Link": "Sao chép link",
"Copying to clipboard was successful!": "Sao chép vào clipboard thành công!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "Tạo một cụm từ súc tích, 3-5 từ làm tiêu đề cho truy vấn sau, tuân thủ nghiêm ngặt giới hạn 3-5 từ và tránh sử dụng từ 'tiêu đề':",
"Create a model": "Tạo model",
"Create Account": "Tạo Tài khoản",
"Create new key": "Tạo key mới",
......@@ -122,13 +133,13 @@
"Custom": "Tùy chỉnh",
"Customize models for a specific purpose": "Tùy chỉnh model cho những mục đích riêng",
"Dark": "Tối",
"Dashboard": "",
"Database": "Cơ sở dữ liệu",
"December": "Tháng 12",
"Default": "Mặc định",
"Default (Automatic1111)": "Mặc định (Automatic1111)",
"Default (SentenceTransformers)": "Mặc định (SentenceTransformers)",
"Default (Web API)": "Mặc định (Web API)",
"Default Model": "",
"Default Model": "Model mặc định",
"Default model updated": "Mô hình mặc định đã được cập nhật",
"Default Prompt Suggestions": "Đề xuất prompt mặc định",
"Default User Role": "Vai trò mặc định",
......@@ -144,14 +155,15 @@
"Deleted {{name}}": "Đã xóa {{name}}",
"Description": "Mô tả",
"Didn't fully follow instructions": "Không tuân theo chỉ dẫn một cách đầy đủ",
"Disabled": "Đã vô hiệu hóa",
"Discover a model": "Khám phá model",
"Discover a prompt": "Khám phá thêm prompt mới",
"Discover, download, and explore custom prompts": "Tìm kiếm, tải về và khám phá thêm các prompt tùy chỉnh",
"Discover, download, and explore model presets": "Tìm kiếm, tải về và khám phá thêm các thiết lập mô hình sẵn",
"Dismissible": "Có thể loại bỏ",
"Display the username instead of You in the Chat": "Hiển thị tên người sử dụng thay vì 'Bạn' trong nội dung chat",
"Document": "Tài liệu",
"Document Settings": "Cấu hình kho tài liệu",
"Documentation": "Tài liệu",
"Documents": "Tài liệu",
"does not make any external connections, and your data stays securely on your locally hosted server.": "không thực hiện bất kỳ kết nối ngoài nào, và dữ liệu của bạn vẫn được lưu trữ an toàn trên máy chủ lưu trữ cục bộ của bạn.",
"Don't Allow": "Không Cho phép",
......@@ -166,24 +178,32 @@
"Edit Doc": "Thay đổi tài liệu",
"Edit User": "Thay đổi thông tin người sử dụng",
"Email": "Email",
"Embedding Batch Size": "",
"Embedding Model": "Mô hình embedding",
"Embedding Model Engine": "Trình xử lý embedding",
"Embedding model set to \"{{embedding_model}}\"": "Mô hình embedding đã được thiết lập thành \"{{embedding_model}}\"",
"Enable Chat History": "Bật Lịch sử chat",
"Enable Community Sharing": "",
"Enable Community Sharing": "Kích hoạt Chia sẻ Cộng đồng",
"Enable New Sign Ups": "Cho phép đăng ký mới",
"Enabled": "Đã bật",
"Enable Web Search": "Kích hoạt tìm kiếm Web",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Đảm bảo tệp CSV của bạn bao gồm 4 cột theo thứ tự sau: Name, Email, Password, Role.",
"Enter {{role}} message here": "Nhập yêu cầu của {{role}} ở đây",
"Enter a detail about yourself for your LLMs to recall": "Nhập chi tiết về bản thân của bạn để LLMs có thể nhớ",
"Enter Brave Search API Key": "Nhập API key cho Brave Search",
"Enter Chunk Overlap": "Nhập Chunk chồng lấn (overlap)",
"Enter Chunk Size": "Nhập Kích thước Chunk",
"Enter Github Raw URL": "",
"Enter Github Raw URL": "Nhập URL cho Github Raw",
"Enter Google PSE API Key": "Nhập Google PSE API Key",
"Enter Google PSE Engine Id": "Nhập Google PSE Engine Id",
"Enter Image Size (e.g. 512x512)": "Nhập Kích thước ảnh (vd: 512x512)",
"Enter language codes": "Nhập mã ngôn ngữ",
"Enter model tag (e.g. {{modelTag}})": "Nhập thẻ mô hình (vd: {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "Nhập số Steps (vd: 50)",
"Enter Score": "Nhập Score",
"Enter Searxng Query URL": "Nhập Query URL cho Searxng",
"Enter Serper API Key": "Nhập Serper API Key",
"Enter Serply API Key": "Nhập Serply API Key",
"Enter Serpstack API Key": "Nhập Serpstack API Key",
"Enter stop sequence": "Nhập stop sequence",
"Enter Top K": "Nhập Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "Nhập URL (vd: http://127.0.0.1:7860/)",
......@@ -194,13 +214,18 @@
"Enter Your Role": "Nhập vai trò của bạn",
"Error": "Lỗi",
"Experimental": "Thử nghiệm",
"Export": "Xuất khẩu",
"Export All Chats (All Users)": "Tải về tất cả nội dung chat (tất cả mọi người)",
"Export chat (.json)": "Tải chat (.json)",
"Export Chats": "Tải nội dung chat về máy",
"Export Documents Mapping": "Tải cấu trúc tài liệu về máy",
"Export Models": "",
"Export Models": "Tải Models về máy",
"Export Prompts": "Tải các prompt về máy",
"Export Tools": "",
"External Models": "Các model ngoài",
"Failed to create API Key.": "Lỗi khởi tạo API Key",
"Failed to read clipboard contents": "Không thể đọc nội dung clipboard",
"Failed to update settings": "Lỗi khi cập nhật các cài đặt",
"February": "Tháng 2",
"Feel free to add specific details": "Mô tả chi tiết về chất lượng của câu hỏi và phương án trả lời",
"File Mode": "Chế độ Tệp văn bản",
......@@ -210,13 +235,15 @@
"Focus chat input": "Tập trung vào nội dung chat",
"Followed instructions perfectly": "Tuân theo chỉ dẫn một cách hoàn hảo",
"Format your variables using square brackets like this:": "Định dạng các biến của bạn bằng cách sử dụng dấu ngoặc vuông như thế này:",
"Frequencey Penalty": "",
"Full Screen Mode": "Chế độ Toàn màn hình",
"Frequency Penalty": "Hình phạt tần số",
"General": "Cài đặt chung",
"General Settings": "Cấu hình chung",
"Generating search query": "",
"Generate Image": "Sinh ảnh",
"Generating search query": "Tạo truy vấn tìm kiếm",
"Generation Info": "Thông tin chung",
"Good Response": "Trả lời tốt",
"Google PSE API Key": "Khóa API Google PSE",
"Google PSE Engine Id": "ID công cụ Google PSE",
"h:mm a": "h:mm a",
"has no conversations.": "không có hội thoại",
"Hello, {{name}}": "Xin chào {{name}}",
......@@ -232,35 +259,40 @@
"Import Documents Mapping": "Nạp cấu trúc tài liệu",
"Import Models": "Nạp model",
"Import Prompts": "Nạp các prompt lên hệ thống",
"Import Tools": "",
"Include `--api` flag when running stable-diffusion-webui": "Bao gồm flag `--api` khi chạy stable-diffusion-webui",
"Info": "Thông tin",
"Input commands": "Nhập các câu lệnh",
"Install from Github URL": "",
"Install from Github URL": "Cài đặt từ Github URL",
"Instant Auto-Send After Voice Transcription": "Tự động gửi ngay lập tức sau khi phiên dịch giọng nói",
"Interface": "Giao diện",
"Invalid Tag": "Tag không hợp lệ",
"January": "Tháng 1",
"join our Discord for help.": "tham gia Discord của chúng tôi để được trợ giúp.",
"JSON": "JSON",
"JSON Preview": "",
"JSON Preview": "Xem trước JSON",
"July": "Tháng 7",
"June": "Tháng 6",
"JWT Expiration": "JWT Hết hạn",
"JWT Token": "Token JWT",
"Keep Alive": "Giữ kết nối",
"Keyboard shortcuts": "Phím tắt",
"Knowledge": "Kiến thức",
"Language": "Ngôn ngữ",
"Last Active": "Truy cập gần nhất",
"Light": "Sáng",
"Listening...": "Đang nghe...",
"LLMs can make mistakes. Verify important information.": "Hệ thống có thể tạo ra nội dung không chính xác hoặc sai. Hãy kiểm chứng kỹ lưỡng thông tin trước khi tiếp nhận và sử dụng.",
"Local Models": "",
"LTR": "LTR",
"Made by OpenWebUI Community": "Được tạo bởi Cộng đồng OpenWebUI",
"Make sure to enclose them with": "Hãy chắc chắn bao quanh chúng bằng",
"Manage": "Quản lý",
"Manage Models": "Quản lý mô hình",
"Manage Ollama Models": "Quản lý mô hình với Ollama",
"Manage Pipelines": "",
"Manage Pipelines": "Quản lý Pipelines",
"March": "Tháng 3",
"Max Tokens (num_predict)": "",
"Max Tokens (num_predict)": "Tokens tối đa (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "Tối đa 3 mô hình có thể được tải xuống cùng lúc. Vui lòng thử lại sau.",
"May": "Tháng 5",
"Memories accessible by LLMs will be shown here.": "Memory có thể truy cập bởi LLMs sẽ hiển thị ở đây.",
......@@ -275,11 +307,12 @@
"Model '{{modelName}}' has been successfully downloaded.": "Mô hình '{{modelName}}' đã được tải xuống thành công.",
"Model '{{modelTag}}' is already in queue for downloading.": "Mô hình '{{modelTag}}' đã có trong hàng đợi để tải xuống.",
"Model {{modelId}} not found": "Không tìm thấy Mô hình {{modelId}}",
"Model {{modelName}} is not vision capable": "",
"Model {{modelName}} is not vision capable": "Model {{modelName}} không có khả năng nhìn",
"Model {{name}} is now {{status}}": "Model {{name}} bây giờ là {{status}}",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Đường dẫn hệ thống tệp mô hình được phát hiện. Tên viết tắt mô hình là bắt buộc để cập nhật, không thể tiếp tục.",
"Model ID": "",
"Model ID": "ID mẫu",
"Model not selected": "Chưa chọn Mô hình",
"Model Params": "",
"Model Params": "Mô hình Params",
"Model Whitelisting": "Whitelist mô hình",
"Model(s) Whitelisted": "các mô hình được cho vào danh sách Whitelist",
"Modelfile Content": "Nội dung Tệp Mô hình",
......@@ -290,21 +323,24 @@
"Name your model": "Tên model",
"New Chat": "Tạo chat mới",
"New Password": "Mật khẩu mới",
"No documents found": "Không tìm thấy tài liệu nào",
"No results found": "Không tìm thấy kết quả",
"No search query generated": "",
"No search results found": "",
"No search query generated": "Không có truy vấn tìm kiếm nào được tạo ra",
"No source available": "Không có nguồn",
"None": "",
"None": "Không ai",
"Not factually correct": "Không chính xác so với thực tế",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Lưu ý: Nếu bạn đặt điểm (Score) tối thiểu thì tìm kiếm sẽ chỉ trả về những tài liệu có điểm lớn hơn hoặc bằng điểm tối thiểu.",
"Notifications": "Thông báo trên máy tính (Notification)",
"November": "Tháng 11",
"num_thread (Ollama)": "num_thread (Ollama)",
"October": "Tháng 10",
"Off": "Tắt",
"Okay, Let's Go!": "Được rồi, Bắt đầu thôi!",
"OLED Dark": "OLED Dark",
"Ollama": "Ollama",
"Ollama API": "",
"Ollama API": "Ollama API",
"Ollama API disabled": "API Ollama bị vô hiệu hóa",
"Ollama API is disabled": "Ollama API đang bị vô hiệu hóa",
"Ollama Version": "Phiên bản Ollama",
"On": "Bật",
"Only": "Only",
......@@ -327,6 +363,8 @@
"PDF document (.pdf)": "Tập tin PDF (.pdf)",
"PDF Extract Images (OCR)": "Trích xuất ảnh từ PDF (OCR)",
"pending": "đang chờ phê duyệt",
"Permission denied when accessing media devices": "Quyền truy cập các thiết bị đa phương tiện bị từ chối",
"Permission denied when accessing microphone": "Quyền truy cập micrô bị từ chối",
"Permission denied when accessing microphone: {{error}}": "Quyền truy cập micrô bị từ chối: {{error}}",
"Personalization": "Cá nhân hóa",
"Pipelines": "",
......@@ -349,6 +387,7 @@
"Read Aloud": "Đọc ra loa",
"Record voice": "Ghi âm",
"Redirecting you to OpenWebUI Community": "Đang chuyển hướng bạn đến Cộng đồng OpenWebUI",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Hãy coi bản thân mình như \"Người dùng\" (ví dụ: \"Người dùng đang học Tiếng Tây Ban Nha\")",
"Refused when it shouldn't have": "Từ chối trả lời mà nhẽ không nên làm vậy",
"Regenerate": "Tạo sinh lại câu trả lời",
"Release Notes": "Mô tả những cập nhật mới",
......@@ -360,12 +399,14 @@
"Reranking Model": "Reranking Model",
"Reranking model disabled": "Reranking model disabled",
"Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"",
"Reset Upload Directory": "",
"Reset Vector Storage": "Cài đặt lại Vector Storage",
"Response AutoCopy to Clipboard": "Tự động Sao chép Phản hồi vào clipboard",
"Role": "Vai trò",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"Running": "Đang chạy",
"Save": "Lưu",
"Save & Create": "Lưu & Tạo",
"Save & Update": "Lưu & Cập nhật",
......@@ -379,40 +420,52 @@
"Search Documents": "Tìm tài liệu",
"Search Models": "Tìm model",
"Search Prompts": "Tìm prompt",
"Searched {{count}} sites_other": "",
"Searching the web for '{{searchQuery}}'": "",
"Search Query Generation Prompt": "Prompt tạo câu truy vấn, tìm kiếm",
"Search Query Generation Prompt Length Threshold": "Ngưỡng độ dài prompt tạo câu truy vấn, tìm kiếm",
"Search Result Count": "Số kết quả tìm kiếm",
"Search Tools": "",
"Searched {{count}} sites_other": "Đã tìm {{count}} sites_other",
"Searching \"{{searchQuery}}\"": "Đang tìm \"{{searchQuery}}\"",
"Searxng Query URL": "URL truy vấn Searxng",
"See readme.md for instructions": "Xem readme.md để biết hướng dẫn",
"See what's new": "Xem những cập nhật mới",
"Seed": "Seed",
"Select a base model": "Chọn một base model",
"Select a engine": "Chọn dịch vụ",
"Select a mode": "Chọn một chế độ",
"Select a model": "Chọn mô hình",
"Select a pipeline": "",
"Select a pipeline url": "",
"Select a pipeline": "Chọn một quy trình",
"Select a pipeline url": "Chọn url quy trình",
"Select an Ollama instance": "Chọn một thực thể Ollama",
"Select Documents": "Chọn tài liệu",
"Select model": "Chọn model",
"Selected model(s) do not support image inputs": "",
"Select only one model to call": "Chọn model để gọi",
"Selected model(s) do not support image inputs": "Model được lựa chọn không hỗ trợ đầu vào là hình ảnh",
"Send": "Gửi",
"Send a Message": "Gửi yêu cầu",
"Send message": "Gửi yêu cầu",
"September": "Tháng 9",
"Serper API Key": "Khóa API Serper",
"Serply API Key": "",
"Serpstack API Key": "Khóa API Serpstack",
"Server connection verified": "Kết nối máy chủ đã được xác minh",
"Set as default": "Đặt làm mặc định",
"Set Default Model": "Đặt Mô hình Mặc định",
"Set embedding model (e.g. {{model}})": "Thiết lập mô hình embedding (ví dụ: {{model}})",
"Set Image Size": "Đặt Kích thước ảnh",
"Set Model": "Thiết lập mô hình",
"Set reranking model (e.g. {{model}})": "Thiết lập mô hình reranking (ví dụ: {{model}})",
"Set Steps": "Đặt Số Bước",
"Set Task Model": "",
"Set Task Model": "Đặt Mô hình Tác vụ",
"Set Voice": "Đặt Giọng nói",
"Settings": "Cài đặt",
"Settings saved successfully!": "Cài đặt đã được lưu thành công!",
"Settings updated successfully": "Các cài đặt đã được cập nhật thành công",
"Share": "Chia sẻ",
"Share Chat": "Chia sẻ Chat",
"Share to OpenWebUI Community": "Chia sẻ đến Cộng đồng OpenWebUI",
"short-summary": "tóm tắt ngắn",
"Show": "Hiển thị",
"Show Admin Details in Account Pending Overlay": "Hiển thị thông tin của Quản trị viên trên màn hình hiển thị Tài khoản đang chờ xử lý",
"Show shortcuts": "Hiển thị phím tắt",
"Showcased creativity": "Thể hiện sự sáng tạo",
"sidebar": "thanh bên",
......@@ -423,8 +476,8 @@
"Source": "Nguồn",
"Speech recognition error: {{error}}": "Lỗi nhận dạng giọng nói: {{error}}",
"Speech-to-Text Engine": "Công cụ Nhận dạng Giọng nói",
"SpeechRecognition API is not supported in this browser.": "Trình duyệt này không hỗ trợ API Nhận dạng Giọng nói.",
"Stop Sequence": "Trình tự Dừng",
"STT Model": "",
"STT Settings": "Cài đặt Nhận dạng Giọng nói",
"Submit": "Gửi",
"Subtitle (e.g. about the Roman Empire)": "Phụ đề (ví dụ: về Đế chế La Mã)",
......@@ -443,7 +496,9 @@
"Thanks for your feedback!": "Cám ơn bạn đã gửi phản hồi!",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Điểm (score) phải có giá trị từ 0,0 (0%) đến 1,0 (100%).",
"Theme": "Chủ đề",
"Thinking...": "Đang suy luận...",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Điều này đảm bảo rằng các nội dung chat có giá trị của bạn được lưu an toàn vào cơ sở dữ liệu backend của bạn. Cảm ơn bạn!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Đây là tính năng thử nghiệm, có thể không hoạt động như mong đợi và có thể thay đổi bất kỳ lúc nào.",
"This setting does not sync across browsers or devices.": "Cài đặt này không đồng bộ hóa trên các trình duyệt hoặc thiết bị.",
"Thorough explanation": "Giải thích kỹ lưỡng",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Mẹo: Cập nhật nhiều khe biến liên tiếp bằng cách nhấn phím tab trong đầu vào trò chuyện sau mỗi việc thay thế.",
......@@ -455,14 +510,20 @@
"to": " - ",
"To access the available model names for downloading,": "Để truy cập các tên mô hình có sẵn để tải xuống,",
"To access the GGUF models available for downloading,": "Để truy cập các mô hình GGUF có sẵn để tải xuống,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Để truy cập vui lòng liên hệ với quản trị viên.",
"To add documents here, upload them to the \"Documents\" workspace first.": "Để thêm tài liệu, trước tiên hãy upload chúng lên khu vực \"Tài liệu\".",
"to chat input.": "đến đầu vào trò chuyện.",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "Hôm nay",
"Toggle settings": "Bật/tắt cài đặt",
"Toggle sidebar": "Bật/tắt thanh bên",
"Tools": "",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "Gặp vấn đề khi truy cập Ollama?",
"TTS Model": "",
"TTS Settings": "Cài đặt Chuyển văn bản thành Giọng nói",
"TTS Voice": "",
"Type": "Kiểu",
"Type Hugging Face Resolve (Download) URL": "Nhập URL Hugging Face Resolve (Tải xuống)",
"Uh-oh! There was an issue connecting to {{provider}}.": "Ồ! Đã xảy ra sự cố khi kết nối với {{provider}}.",
......@@ -470,12 +531,15 @@
"Update and Copy Link": "Cập nhật và sao chép link",
"Update password": "Cập nhật mật khẩu",
"Upload a GGUF model": "Tải lên mô hình GGUF",
"Upload Files": "",
"Upload Files": "Tải tệp lên máy chủ",
"Upload Pipeline": "",
"Upload Progress": "Tiến trình tải tệp lên hệ thống",
"URL Mode": "Chế độ URL",
"Use '#' in the prompt input to load and select your documents.": "Sử dụng '#' trong đầu vào của prompt để tải về và lựa chọn tài liệu của bạn cần truy vấn.",
"Use Gravatar": "Sử dụng Gravatar",
"Use Initials": "Sử dụng tên viết tắt",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "Người sử dụng",
"User Permissions": "Phân quyền sử dụng",
"Users": "người sử dụng",
......@@ -487,26 +551,31 @@
"Warning": "Cảnh báo",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Cảnh báo: Nếu cập nhật hoặc thay đổi embedding model, bạn sẽ cần cập nhật lại tất cả tài liệu.",
"Web": "Web",
"Web API": "",
"Web Loader Settings": "Cài đặt Web Loader",
"Web Params": "Web Params",
"Web Search": "",
"Web Search": "Tìm kiếm Web",
"Web Search Engine": "Chức năng Tìm kiếm Web",
"Webhook URL": "Webhook URL",
"WebUI Add-ons": "Tiện ích WebUI",
"WebUI Settings": "Cài đặt WebUI",
"WebUI will make requests to": "WebUI sẽ thực hiện các yêu cầu đến",
"What’s New in": "Thông tin mới về",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "Khi chế độ lịch sử chat đã tắt, các nội dung chat mới trên trình duyệt này sẽ không xuất hiện trên bất kỳ thiết bị nào của bạn.",
"Whisper (Local)": "Whisper (Local)",
"Whisper (Local)": "",
"Widescreen Mode": "Chế độ màn hình rộng",
"Workspace": "Workspace",
"Write a prompt suggestion (e.g. Who are you?)": "Hãy viết một prompt (vd: Bạn là ai?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Viết một tóm tắt trong vòng 50 từ cho [chủ đề hoặc từ khóa].",
"Yesterday": "Hôm qua",
"You": "Bạn",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Bạn có thể cá nhân hóa các tương tác của mình với LLM bằng cách thêm bộ nhớ thông qua nút 'Quản lý' bên dưới, làm cho chúng hữu ích hơn và phù hợp với bạn hơn.",
"You cannot clone a base model": "Bạn không thể nhân bản base model",
"You have no archived conversations.": "Bạn chưa lưu trữ một nội dung chat nào",
"You have shared this chat": "Bạn vừa chia sẻ chat này",
"You're a helpful assistant.": "Bạn là một trợ lý hữu ích.",
"You're now logged in.": "Bạn đã đăng nhập.",
"Your account status is currently pending activation.": "Tài khoản của bạn hiện đang ở trạng thái chờ kích hoạt.",
"Youtube": "Youtube",
"Youtube Loader Settings": "Cài đặt Youtube Loader"
}
......@@ -3,20 +3,22 @@
"(Beta)": "(测试版)",
"(e.g. `sh webui.sh --api`)": "(例如 `sh webui.sh --api`)",
"(latest)": "(最新版)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{ models }}": "{{ models }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}:您不能删除基础模型",
"{{modelName}} is thinking...": "{{modelName}} 正在思考...",
"{{user}}'s Chats": "{{user}} 的聊天记录",
"{{user}}'s Chats": "{{user}} 的对话记录",
"{{webUIName}} Backend Required": "需要 {{webUIName}} 后端",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "任务模型用于执行生成对话标题和网络搜索查询等任务",
"a user": "用户",
"About": "关于",
"Account": "账户",
"Accurate information": "准确信息",
"Account": "账号",
"Account Activation Pending": "账号待激活",
"Accurate information": "提供的信息很准确",
"Active Users": "当前在线用户",
"Add": "添加",
"Add a model id": "",
"Add a short description about what this model does": "",
"Add a short title for this prompt": "为这个提示词添加一个简短的标题",
"Add a model id": "添加一个模型 ID",
"Add a short description about what this model does": "添加有关该模型功能的简短描述",
"Add a short title for this prompt": "为提示词添加一个简短的标题",
"Add a tag": "添加标签",
"Add custom prompt": "添加自定义提示词",
"Add Docs": "添加文档",
......@@ -28,56 +30,62 @@
"Add User": "添加用户",
"Adjusting these settings will apply changes universally to all users.": "调整这些设置将会对所有用户应用更改。",
"admin": "管理员",
"Admin": "管理员联系方式",
"Admin Panel": "管理员面板",
"Admin Settings": "管理员设置",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
"Advanced Parameters": "高级参数",
"Advanced Params": "",
"Advanced Params": "高级参数",
"all": "所有",
"All Documents": "所有文档",
"All Users": "所有用户",
"Allow": "允许",
"Allow Chat Deletion": "允许删除聊天记录",
"Allow non-local voices": "允许调用非本地音色",
"alphanumeric characters and hyphens": "字母数字字符和连字符",
"Already have an account?": "已经有账户了吗?",
"Already have an account?": "已经有账号了?",
"an assistant": "助手",
"and": "和",
"and create a new shared link.": "创建一个新的享链接。",
"API Base URL": "API 基础 URL",
"and create a new shared link.": "创建一个新的享链接。",
"API Base URL": "API 基础地址",
"API Key": "API 密钥",
"API Key created.": "API 密钥已创建。",
"API keys": "API 密钥",
"April": "四月",
"Archive": "档",
"Archive All Chats": "",
"Archived Chats": "聊天记录存档",
"Archive": "档",
"Archive All Chats": "归档所有对话记录",
"Archived Chats": "已归档对话",
"are allowed - Activate this command by typing": "允许 - 通过输入来激活这个命令",
"Are you sure?": "确定?",
"Are you sure?": "是否确定?",
"Attach file": "添加文件",
"Attention to detail": "注重细节",
"Audio": "音",
"Audio": "音",
"August": "八月",
"Auto-playback response": "自动播放回应",
"Auto-send input after 3 sec.": "3 秒后自动发送输入",
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 基础 URL",
"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基础 URL。",
"available!": "可用!",
"Auto-playback response": "自动念出回复内容",
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 基础地址",
"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基础地址。",
"available!": "版本可用!",
"Back": "返回",
"Bad Response": "不良响应",
"Banners": "",
"Base Model (From)": "",
"before": "之前",
"Bad Response": "点踩回复",
"Banners": "公告横幅",
"Base Model (From)": "基础模型 (来自)",
"before": "对话",
"Being lazy": "懒惰",
"Brave Search API Key": "Brave Search API 密钥",
"Bypass SSL verification for Websites": "绕过网站的 SSL 验证",
"Call": "呼叫",
"Call feature is not supported when using Web STT engine": "使用 Web 语音转文字引擎时不支持呼叫功能。",
"Camera": "摄像头",
"Cancel": "取消",
"Capabilities": "",
"Capabilities": "能力",
"Change Password": "更改密码",
"Chat": "聊天",
"Chat Bubble UI": "聊天气泡 UI",
"Chat direction": "聊天方向",
"Chat History": "聊天历史",
"Chat History is off for this browser.": "此浏览器已关闭聊天历史功能。",
"Chats": "聊天",
"Check Again": "再次检查",
"Chat": "对话",
"Chat Bubble UI": "气泡样式对话",
"Chat direction": "对话文字方向",
"Chat History": "对话历史记录",
"Chat History is off for this browser.": "此浏览器已关闭对话历史记录功能。",
"Chats": "对话",
"Check Again": "刷新重试",
"Check for updates": "检查更新",
"Checking for updates...": "正在检查更新...",
"Choose a model before saving...": "保存前选择一个模型...",
......@@ -85,34 +93,37 @@
"Chunk Params": "块参数 (Chunk Params)",
"Chunk Size": "块大小 (Chunk Size)",
"Citation": "引文",
"Clear memory": "清除记忆",
"Click here for help.": "点击这里获取帮助。",
"Click here to": "单击此处",
"Click here to": "单击",
"Click here to select": "点击这里选择",
"Click here to select a csv file.": "单击此处选择 csv 文件。",
"Click here to select documents.": "点击这里选择文档。",
"Click here to select a py file.": "单击此处选择 py 文件。",
"Click here to select documents.": "单击选择文档",
"click here.": "点击这里。",
"Click on the user role button to change a user's role.": "点击用户角色按钮以更改用户的角色。",
"Click on the user role button to change a user's role.": "点击角色前方的组别按钮以更改用户所属权限组。",
"Clone": "复制",
"Close": "关闭",
"Collection": "收藏",
"Collection": "集合",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "ComfyUI Base URL",
"ComfyUI Base URL is required.": "ComfyUI Base URL 是必需的。",
"ComfyUI Base URL": "ComfyUI 基础地址",
"ComfyUI Base URL is required.": "ComfyUI 基础地址为必需填写。",
"Command": "命令",
"Concurrent Requests": "并发请求",
"Confirm Password": "确认密码",
"Connections": "连接",
"Connections": "外部连接",
"Contact Admin for WebUI Access": "请联系管理员以获取访问权限",
"Content": "内容",
"Context Length": "上下文长度",
"Continue Response": "继续回复",
"Conversation Mode": "对话模式",
"Copied shared chat URL to clipboard!": "已复制共享聊天 URL 到剪贴板!",
"Continue Response": "继续生成",
"Copied shared chat URL to clipboard!": "已复制此对话分享链接至剪贴板!",
"Copy": "复制",
"Copy last code block": "复制最后一个代码块",
"Copy last response": "复制最后一次回复",
"Copy last code block": "复制最后一个代码块中的代码",
"Copy last response": "复制最后一次回复内容",
"Copy Link": "复制链接",
"Copying to clipboard was successful!": "复制到剪贴板成功!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "为以下查询创建一个简洁的、3-5 个词的短语作为标题,严格遵守 3-5 个词的限制并避免使用“标题”一词:",
"Create a model": "",
"Create Account": "创建账户",
"Copying to clipboard was successful!": "成功复制到剪贴板!",
"Create a model": "创建一个模型",
"Create Account": "创建账号",
"Create new key": "创建新密钥",
"Create new secret key": "创建新安全密钥",
"Created at": "创建于",
......@@ -120,202 +131,227 @@
"Current Model": "当前模型",
"Current Password": "当前密码",
"Custom": "自定义",
"Customize models for a specific purpose": "",
"Customize models for a specific purpose": "定制专用目的模型",
"Dark": "暗色",
"Dashboard": "仪表板",
"Database": "数据库",
"December": "十二月",
"Default": "默认",
"Default (Automatic1111)": "默认(Automatic1111)",
"Default (SentenceTransformers)": "默认(SentenceTransformers)",
"Default (Web API)": "默认(Web API)",
"Default Model": "",
"Default Model": "默认模型",
"Default model updated": "默认模型已更新",
"Default Prompt Suggestions": "默认提示词建议",
"Default User Role": "默认用户角色",
"delete": "删除",
"Delete": "删除",
"Delete a model": "删除一个模型",
"Delete All Chats": "",
"Delete chat": "删除聊天",
"Delete Chat": "删除聊天",
"delete this link": "删除这个链接",
"Delete All Chats": "删除所有对话记录",
"Delete chat": "删除对话记录",
"Delete Chat": "删除对话记录",
"delete this link": "此处删除这个链接",
"Delete User": "删除用户",
"Deleted {{deleteModelTag}}": "已删除{{deleteModelTag}}",
"Deleted {{name}}": "",
"Deleted {{deleteModelTag}}": "已删除 {{deleteModelTag}}",
"Deleted {{name}}": "已删除 {{name}}",
"Description": "描述",
"Didn't fully follow instructions": "没有完全遵指示",
"Disabled": "禁用",
"Discover a model": "",
"Discover a prompt": "探索提示词",
"Discover, download, and explore custom prompts": "发现、下载并探索自定义提示词",
"Discover, download, and explore model presets": "发现、下载并探索模型预设",
"Display the username instead of You in the Chat": "在聊天中显示用户名而不是“你”",
"Didn't fully follow instructions": "没有完全遵指示",
"Discover a model": "发现更多模型",
"Discover a prompt": "发现更多提示词",
"Discover, download, and explore custom prompts": "发现、下载并探索更多自定义提示词",
"Discover, download, and explore model presets": "发现、下载并探索更多模型预设",
"Dismissible": "是否可关闭",
"Display the username instead of You in the Chat": "在对话中显示用户名而不是“你”",
"Document": "文档",
"Document Settings": "文档设置",
"Documentation": "帮助文档",
"Documents": "文档",
"does not make any external connections, and your data stays securely on your locally hosted server.": "不进行任何外部连接,您的数据安全地存储在您的本地服务器上。",
"does not make any external connections, and your data stays securely on your locally hosted server.": "不会与外部建立任何连接,您的数据安全地存储在本地托管的服务器上。",
"Don't Allow": "不允许",
"Don't have an account?": "没有账?",
"Don't like the style": "不喜欢这个风",
"Don't have an account?": "没有账?",
"Don't like the style": "不喜欢这个风",
"Download": "下载",
"Download canceled": "下载已取消",
"Download Database": "下载数据库",
"Drop any files here to add to the conversation": "拖动文件到此处以添加到对话中",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s','10m'。有效的时间单位是's', 'm', 'h'。",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s','10m'。有效的时间单位是秒:'s',分:'m',时:'h'。",
"Edit": "编辑",
"Edit Doc": "编辑文档",
"Edit User": "编辑用户",
"Email": "电子邮件",
"Embedding Model": "嵌入模型",
"Embedding Model Engine": "嵌入模型引擎",
"Embedding model set to \"{{embedding_model}}\"": "嵌入模型设置为 \"{{embedding_model}}\"",
"Enable Chat History": "启用聊天历史",
"Enable Community Sharing": "",
"Enable New Sign Ups": "启用新注册",
"Enabled": "启用",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮件、密码、角色。",
"Email": "电子邮箱",
"Embedding Batch Size": "嵌入层批处理大小 (Embedding Batch Size)",
"Embedding Model": "语义向量模型",
"Embedding Model Engine": "语义向量模型引擎",
"Embedding model set to \"{{embedding_model}}\"": "语义向量模型设置为 \"{{embedding_model}}\"",
"Enable Chat History": "启用对话历史记录",
"Enable Community Sharing": "启用分享至社区",
"Enable New Sign Ups": "允许新用户注册",
"Enable Web Search": "启用网络搜索",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "确保您的 CSV 文件按以下顺序包含 4 列: 姓名、电子邮箱、密码、角色。",
"Enter {{role}} message here": "在此处输入 {{role}} 信息",
"Enter a detail about yourself for your LLMs to recall": "输入 LLM 可以记住的信息",
"Enter a detail about yourself for your LLMs to recall": "输入一个关于你自己的详细信息,方便你的大语言模型记住这些内容",
"Enter Brave Search API Key": "输入 Brave Search API 密钥",
"Enter Chunk Overlap": "输入块重叠 (Chunk Overlap)",
"Enter Chunk Size": "输入块大小 (Chunk Size)",
"Enter Github Raw URL": "",
"Enter Image Size (e.g. 512x512)": "输入图片大小 (例如 512x512)",
"Enter Github Raw URL": "输入 Github Raw 地址",
"Enter Google PSE API Key": "输入 Google PSE API 密钥",
"Enter Google PSE Engine Id": "输入 Google PSE 引擎 ID",
"Enter Image Size (e.g. 512x512)": "输入图像分辨率 (例如:512x512)",
"Enter language codes": "输入语言代码",
"Enter model tag (e.g. {{modelTag}})": "输入模型标签 (例如{{modelTag}})",
"Enter Number of Steps (e.g. 50)": "输入步数 (例如 50)",
"Enter Score": "输入分",
"Enter stop sequence": "输入停止序列",
"Enter model tag (e.g. {{modelTag}})": "输入模型标签 (例如:{{modelTag}})",
"Enter Number of Steps (e.g. 50)": "输入步骤数 (Steps) (例如:50)",
"Enter Score": "输入评分",
"Enter Searxng Query URL": "输入 Searxng 查询地址",
"Enter Serper API Key": "输入 Serper API 密钥",
"Enter Serply API Key": "",
"Enter Serpstack API Key": "输入 Serpstack API 密钥",
"Enter stop sequence": "输入停止序列 (Stop Sequence)",
"Enter Top K": "输入 Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "输入 URL (例如 http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "输入 URL (例如 http://localhost:11434)",
"Enter Your Email": "输入您的电子邮",
"Enter Your Full Name": "输入您的名",
"Enter URL (e.g. http://127.0.0.1:7860/)": "输入地址 (例如http://127.0.0.1:7860/)",
"Enter URL (e.g. http://localhost:11434)": "输入地址 (例如http://localhost:11434)",
"Enter Your Email": "输入您的电子邮",
"Enter Your Full Name": "输入您的名",
"Enter Your Password": "输入您的密码",
"Enter Your Role": "输入您的角色",
"Error": "",
"Enter Your Role": "输入您的权限组",
"Error": "错误",
"Experimental": "实验性",
"Export All Chats (All Users)": "导出所有聊天(所有用户)",
"Export Chats": "导出聊天",
"Export": "导出",
"Export All Chats (All Users)": "导出所有用户对话",
"Export chat (.json)": "JSON 文件 (.json)",
"Export Chats": "导出对话",
"Export Documents Mapping": "导出文档映射",
"Export Models": "",
"Export Models": "导出模型",
"Export Prompts": "导出提示词",
"Export Tools": "导出工具",
"External Models": "外部模型",
"Failed to create API Key.": "无法创建 API 密钥。",
"Failed to read clipboard contents": "无法读取剪贴板内容",
"Failed to update settings": "无法更新设置",
"February": "二月",
"Feel free to add specific details": "请随意添加具体细节",
"Feel free to add specific details": "欢迎补充具体细节",
"File Mode": "文件模式",
"File not found.": "文件未找到。",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "检测到指纹欺骗: 无法使用姓名缩写作为头像。默认使用默认个人形象。",
"Fluidly stream large external response chunks": "流畅地传输大型外部响应块",
"Focus chat input": "聚焦聊天输入",
"Followed instructions perfectly": "完全遵循说明",
"Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "检测到指纹伪造:无法使用姓名缩写作为头像。默认使用默认个人形象。",
"Fluidly stream large external response chunks": "流畅地传输外部大型响应块数据",
"Focus chat input": "聚焦对话输入",
"Followed instructions perfectly": "完全按照指示执行",
"Format your variables using square brackets like this:": "使用这样的方括号格式化你的变量:",
"Frequencey Penalty": "",
"Full Screen Mode": "全屏模式",
"Frequency Penalty": "频率惩罚",
"General": "通用",
"General Settings": "通用设置",
"Generating search query": "",
"Generate Image": "生成图像",
"Generating search query": "生成搜索查询",
"Generation Info": "生成信息",
"Good Response": "反应良好",
"h:mm a": "h:mm a",
"Good Response": "点赞回复",
"Google PSE API Key": "Google PSE API 密钥",
"Google PSE Engine Id": "Google PSE 引擎 ID",
"h:mm a": "HH:mm",
"has no conversations.": "没有对话。",
"Hello, {{name}}": "你好,{{name}}",
"Help": "帮助",
"Hide": "隐藏",
"How can I help you today?": "今天能帮你做什么?",
"How can I help you today?": "今天能帮你做什么?",
"Hybrid Search": "混合搜索",
"Image Generation (Experimental)": "图像生成(实验性)",
"Image Generation Engine": "图像生成引擎",
"Image Settings": "图像设置",
"Images": "图像",
"Import Chats": "导入聊天",
"Import Chats": "导入对话记录",
"Import Documents Mapping": "导入文档映射",
"Import Models": "",
"Import Prompts": "导入提示",
"Import Models": "导入模型",
"Import Prompts": "导入提示词",
"Import Tools": "导入工具",
"Include `--api` flag when running stable-diffusion-webui": "运行 stable-diffusion-webui 时包含 `--api` 标志",
"Info": "",
"Info": "信息",
"Input commands": "输入命令",
"Install from Github URL": "",
"Install from Github URL": "从 Github URL 安装",
"Instant Auto-Send After Voice Transcription": "语音转录文字后即时自动发送",
"Interface": "界面",
"Invalid Tag": "无效标签",
"January": "一月",
"join our Discord for help.": "加入我们的 Discord 寻求帮助。",
"JSON": "JSON",
"JSON Preview": "",
"JSON Preview": "JSON 预览",
"July": "七月",
"June": "六月",
"JWT Expiration": "JWT 过期",
"JWT Token": "JWT 令牌",
"Keep Alive": "保持活动",
"Keyboard shortcuts": "键盘快捷键",
"Knowledge": "知识库",
"Language": "语言",
"Last Active": "最后活跃",
"Last Active": "最后在线时间",
"Light": "浅色",
"Listening...": "监听中...",
"LLMs can make mistakes. Verify important information.": "LLM 可能会生成错误信息,请验证重要信息。",
"LTR": "LTR",
"Listening...": "正在倾听...",
"LLMs can make mistakes. Verify important information.": "大语言模型可能会生成误导性错误信息,请对关键信息加以验证。",
"Local Models": "本地模型",
"LTR": "从左至右",
"Made by OpenWebUI Community": "由 OpenWebUI 社区制作",
"Make sure to enclose them with": "确保将它们包含在内",
"Manage": "管理",
"Manage Models": "管理模型",
"Manage Ollama Models": "管理 Ollama 模型",
"Manage Pipelines": "",
"Manage Pipelines": "管理 Pipeline",
"March": "三月",
"Max Tokens (num_predict)": "",
"Max Tokens (num_predict)": "最多 Token (num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同时下载 3 个模型,请稍后重试。",
"May": "五月",
"Memories accessible by LLMs will be shown here.": "LLMs 可以访问的记忆将显示在这里。",
"Memories accessible by LLMs will be shown here.": "大语言模型可访问的记忆将在此显示。",
"Memory": "记忆",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "创建链接后发送的消息不会被共享。具有 URL 的用户将能够查看共享聊天。",
"Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "创建链接后发送的消息不会被共享。具有 URL 的用户将能够查看共享对话。",
"Minimum Score": "最低分",
"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": "YYYY年 MM DD",
"MMMM DD, YYYY HH:mm": "YYYY年 MM DD HH:mm",
"Model '{{modelName}}' has been successfully downloaded.": "模型'{{modelName}}'已成功下载。",
"Model '{{modelTag}}' is already in queue for downloading.": "模型'{{modelTag}}'已在下载队列中。",
"Model {{modelId}} not found": "未找到模型{{modelId}}",
"Model {{modelName}} is not vision capable": "",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径。模型简名是更新所必需的,无法继续。",
"Model ID": "",
"Model {{modelId}} not found": "未找到模型 {{modelId}}",
"Model {{modelName}} is not vision capable": "模型 {{modelName}} 不支持视觉功能",
"Model {{name}} is now {{status}}": "模型 {{name}} 现在是 {{status}}",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径,无法继续进行。更新操作需要提供模型简称。",
"Model ID": "模型 ID",
"Model not selected": "未选择模型",
"Model Params": "",
"Model Params": "模型参数",
"Model Whitelisting": "白名单模型",
"Model(s) Whitelisted": "模型已加入白名单",
"Modelfile Content": "模型文件内容",
"Models": "模型",
"More": "更多",
"Name": "名称",
"Name Tag": "名称标签",
"Name your model": "",
"New Chat": "新聊天",
"Name Tag": "标签",
"Name your model": "为您的模型命名",
"New Chat": "新对话",
"New Password": "新密码",
"No documents found": "未找到文档",
"No results found": "未找到结果",
"No search query generated": "",
"No search results found": "",
"No search query generated": "未生成搜索查询",
"No source available": "没有可用来源",
"None": "",
"Not factually correct": "事实不符",
"None": "",
"Not factually correct": "事实并非如此",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "注意:如果设置了最低分数,搜索只会返回分数大于或等于最低分数的文档。",
"Notifications": "桌面通知",
"November": "十一月",
"num_thread (Ollama)": "num_thread(Ollama)",
"October": "十月",
"Off": "关闭",
"Okay, Let's Go!": "好的,我们开始吧!",
"OLED Dark": "黑色",
"Okay, Let's Go!": "确认,开始使用!",
"OLED Dark": "黑色",
"Ollama": "Ollama",
"Ollama API": "",
"Ollama API": "Ollama API",
"Ollama API disabled": "Ollama API 已禁用",
"Ollama API is disabled": "Ollama API 已禁用",
"Ollama Version": "Ollama 版本",
"On": "开",
"On": "开",
"Only": "仅",
"Only alphanumeric characters and hyphens are allowed in the command string.": "命令字符串中只允许使用英文字母,数字 (0-9) 以及连字符 (-)。",
"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.": "哎呀!请稍等!您的文件在处理中。我们正在将它们做得尽善尽美,请耐心等待,一旦准备好我们会通知您。",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "哎呀!看起来 URL 无效。请仔细检查后再试一次。",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "哎呀!您正在使用不支持的方法(仅前端)。请从后端提供 WebUI。",
"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.": "糟糕!请稍等!您的文件在处理中。我们正在努力让它们达到最佳效果。请耐心等待,准备好我们会通知您。",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "糟糕!此链接似乎为无效链接。请检查后重试。",
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "糟糕!你正在使用不支持的方法(仅前端)。请从后端提供 WebUI 服务。",
"Open": "打开",
"Open AI": "Open AI",
"Open AI (Dall-E)": "Open AI (Dall-E)",
"Open new chat": "打开新聊天",
"Open new chat": "打开新对话",
"OpenAI": "OpenAI",
"OpenAI API": "OpenAI API",
"OpenAI API Config": "OpenAI API 配置",
......@@ -326,32 +362,35 @@
"Password": "密码",
"PDF document (.pdf)": "PDF 文档 (.pdf)",
"PDF Extract Images (OCR)": "PDF 图像处理 (使用 OCR)",
"pending": "待定",
"Permission denied when accessing microphone: {{error}}": "访问麦克风时权限被拒绝:{{error}}",
"pending": "待激活",
"Permission denied when accessing media devices": "申请媒体设备权限被拒绝",
"Permission denied when accessing microphone": "申请麦克风权限被拒绝",
"Permission denied when accessing microphone: {{error}}": "申请麦克风权限被拒绝:{{error}}",
"Personalization": "个性化",
"Pipelines": "",
"Pipelines Valves": "",
"Pipelines": "Pipeline",
"Pipelines Valves": "Pipeline 值",
"Plain text (.txt)": "TXT 文档 (.txt)",
"Playground": "AI 对话游乐场",
"Positive attitude": "积极态度",
"Positive attitude": "积极态度",
"Previous 30 days": "过去 30 天",
"Previous 7 days": "过去 7 天",
"Profile Image": "用户头像",
"Prompt": "提示词",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示(例如:告诉我一个关于罗马帝国的趣事)",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示(例如:给我讲一个关于罗马帝国的趣事)",
"Prompt Content": "提示词内容",
"Prompt suggestions": "提示词建议",
"Prompts": "提示词",
"Pull \"{{searchValue}}\" from Ollama.com": "从 Ollama.com 拉取 \"{{searchValue}}\"",
"Pull a model from Ollama.com": "从 Ollama.com 拉取一个模型",
"Query Params": "查询参数",
"RAG Template": "RAG 模板",
"RAG Template": "RAG 提示词模板",
"Read Aloud": "朗读",
"Record voice": "录音",
"Redirecting you to OpenWebUI Community": "正在将您重定向到 OpenWebUI 社区",
"Refused when it shouldn't have": "在不该拒绝时拒绝",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "使用\"User\" (用户) 来指代自己(例如:“User 正在学习西班牙语”)",
"Refused when it shouldn't have": "无理拒绝",
"Regenerate": "重新生成",
"Release Notes": "发布说明",
"Release Notes": "更新日志",
"Remove": "移除",
"Remove Model": "移除模型",
"Rename": "重命名",
......@@ -360,61 +399,75 @@
"Reranking Model": "重排模型",
"Reranking model disabled": "重排模型已禁用",
"Reranking model set to \"{{reranking_model}}\"": "重排模型设置为 \"{{reranking_model}}\"",
"Reset Upload Directory": "重置上传目录",
"Reset Vector Storage": "重置向量存储",
"Response AutoCopy to Clipboard": "自动复制回到剪贴板",
"Role": "角色",
"Response AutoCopy to Clipboard": "自动复制回到剪贴板",
"Role": "权限组",
"Rosé Pine": "Rosé Pine",
"Rosé Pine Dawn": "Rosé Pine Dawn",
"RTL": "RTL",
"RTL": "从右至左",
"Running": "运行中",
"Save": "保存",
"Save & Create": "保存并创建",
"Save & Update": "保存并更新",
"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": "不再支持直接将聊天记录保存到浏览器存储。请点击下面的按钮下载并删除您的聊天记录。别担心,您可以通过轻松地将聊天记录重新导入到后",
"Scan": "扫描",
"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": "我们不再支持将聊天记录直接保存到浏览器存储空间。请点击下面的按钮下载并删除您的聊天记录。别担心,您可以轻松地将聊天记录重新导入到后台。",
"Scan": "立即扫描",
"Scan complete!": "扫描完成!",
"Scan for documents from {{path}}": "从 {{path}} 扫描文档",
"Search": "搜索",
"Search a model": "搜索模型",
"Search Chats": "",
"Search Chats": "搜索对话",
"Search Documents": "搜索文档",
"Search Models": "",
"Search Models": "搜索模型",
"Search Prompts": "搜索提示词",
"Searched {{count}} sites_other": "",
"Searching the web for '{{searchQuery}}'": "",
"Search Query Generation Prompt": "搜索查询生成提示",
"Search Query Generation Prompt Length Threshold": "搜索查询生成提示长度阈值",
"Search Result Count": "搜索结果数量",
"Search Tools": "搜索工具",
"Searched {{count}} sites_other": "检索到 {{count}} 个网站",
"Searching \"{{searchQuery}}\"": "搜索 \"{{searchQuery}}\" 中",
"Searxng Query URL": "Searxng 查询 URL",
"See readme.md for instructions": "查看 readme.md 以获取说明",
"See what's new": "查看最新内容",
"Seed": "种子",
"Select a base model": "",
"See what's new": "查阅最新更新内容",
"Seed": "种子 (Seed)",
"Select a base model": "选择一个基础模型",
"Select a engine": "选择一个搜索引擎",
"Select a mode": "选择一个模式",
"Select a model": "选择一个模型",
"Select a pipeline": "",
"Select a pipeline url": "",
"Select a pipeline": "选择一个管道",
"Select a pipeline url": "选择一个管道 URL",
"Select an Ollama instance": "选择一个 Ollama 实例",
"Select Documents": "选择文档",
"Select model": "选择模型",
"Selected model(s) do not support image inputs": "",
"Select only one model to call": "请仅选择一个模型来呼叫",
"Selected model(s) do not support image inputs": "已选择的模型不支持发送图像",
"Send": "发送",
"Send a Message": "发送消息",
"Send a Message": "输入消息",
"Send message": "发送消息",
"September": "九月",
"Serper API Key": "Serper API 密钥",
"Serply API Key": "Serply API 密钥",
"Serpstack API Key": "Serpstack API 密钥",
"Server connection verified": "已验证服务器连接",
"Set as default": "设为默认",
"Set Default Model": "设置默认模型",
"Set embedding model (e.g. {{model}})": "设置嵌入模型(例如 {{model}})",
"Set Image Size": "设置图片大小",
"Set Model": "设置模型",
"Set reranking model (e.g. {{model}})": "设置重排模型(例如 {{model}})",
"Set embedding model (e.g. {{model}})": "设置语义向量模型 (例如:{{model}})",
"Set Image Size": "设置图片分辨率",
"Set reranking model (e.g. {{model}})": "设置重排模型 (例如:{{model}})",
"Set Steps": "设置步骤",
"Set Task Model": "",
"Set Voice": "设置音",
"Set Task Model": "设置任务模型",
"Set Voice": "设置音",
"Settings": "设置",
"Settings saved successfully!": "设置已保存",
"Settings updated successfully": "设置成功更新",
"Share": "分享",
"Share Chat": "分享聊天",
"Share Chat": "分享对话",
"Share to OpenWebUI Community": "分享到 OpenWebUI 社区",
"short-summary": "简短总结",
"Show": "显示",
"Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息",
"Show shortcuts": "显示快捷方式",
"Showcased creativity": "展示创意",
"Showcased creativity": "很有创意",
"sidebar": "侧边栏",
"Sign in": "登录",
"Sign Out": "登出",
......@@ -422,60 +475,71 @@
"Signing in": "正在登录",
"Source": "来源",
"Speech recognition error: {{error}}": "语音识别错误:{{error}}",
"Speech-to-Text Engine": "语音转文引擎",
"SpeechRecognition API is not supported in this browser.": "此浏览器不支持 SpeechRecognition API。",
"Stop Sequence": "停止序列",
"STT Settings": "语音转文设置",
"Speech-to-Text Engine": "语音转文引擎",
"Stop Sequence": "停止序列 (Stop Sequence)",
"STT Model": "语音转文本模型",
"STT Settings": "语音转文设置",
"Submit": "提交",
"Subtitle (e.g. about the Roman Empire)": "副标题(关于罗马帝国的副标题)",
"Subtitle (e.g. about the Roman Empire)": "副标题(例如:关于罗马帝国的副标题)",
"Success": "成功",
"Successfully updated.": "成功更新。",
"Suggested": "建议",
"System": "系统",
"System Prompt": "系统提示",
"System Prompt": "系统提示",
"Tags": "标签",
"Tell us more:": "告诉我们更多信息",
"Temperature": "温度",
"Tell us more:": "告诉我们更多细节",
"Temperature": "温度 (Temperature)",
"Template": "模板",
"Text Completion": "文本完成",
"Text-to-Speech Engine": "文本转语音引擎",
"Tfs Z": "Tfs Z",
"Thanks for your feedback!": "感谢的反馈!",
"Thanks for your feedback!": "感谢的反馈!",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分值应介于 0.0(0%)和 1.0(100%)之间。",
"Theme": "主题",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "这确保了您宝贵的对话被安全保存到后端数据库中。谢谢!",
"Thinking...": "正在思考...",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "这将确保您的宝贵对话被安全地保存到后台数据库中。感谢!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "这是一个实验功能,可能不会如预期那样工作,而且可能随时发生变化。",
"This setting does not sync across browsers or devices.": "此设置不会在浏览器或设备之间同步。",
"Thorough explanation": "详尽的解释",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:在每次替换后,在聊天输入中按 Tab 键可以连续更新多个变量。",
"Thorough explanation": "解释较为详细",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:在每次替换后,在对话输入中按 Tab 键可以连续更新多个变量。",
"Title": "标题",
"Title (e.g. Tell me a fun fact)": "标题(例如 告诉我一个有趣的事实)",
"Title Auto-Generation": "标题自动生成",
"Title (e.g. Tell me a fun fact)": "标题(例如 给我讲一个有趣的事实)",
"Title Auto-Generation": "自动生成标题",
"Title cannot be an empty string.": "标题不能为空字符串。",
"Title Generation Prompt": "自动生成标题的提示词",
"Title Generation Prompt": "用于自动生成标题的提示词",
"to": "到",
"To access the available model names for downloading,": "要访问可下载的模型名称,",
"To access the GGUF models available for downloading,": "要访问可下载的 GGUF 模型,",
"to chat input.": "到聊天输入。",
"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 chat input.": "到对话输入。",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "今天",
"Toggle settings": "切换设置",
"Toggle sidebar": "切换侧边栏",
"Tools": "工具",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "访问 Ollama 时遇到问题?",
"TTS Model": "文本转语音模型",
"TTS Settings": "文本转语音设置",
"Type": "",
"TTS Voice": "文本转语音音色",
"Type": "类型",
"Type Hugging Face Resolve (Download) URL": "输入 Hugging Face 解析(下载)URL",
"Uh-oh! There was an issue connecting to {{provider}}.": "哎呀!连接到{{provider}}时出现问题。",
"Uh-oh! There was an issue connecting to {{provider}}.": "糟糕!连接到 {{provider}} 时出现问题。",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知文件类型'{{file_type}}',将视为纯文本进行处理",
"Update and Copy Link": "更新和复制链接",
"Update password": "更新密码",
"Upload a GGUF model": "上传一个 GGUF 模型",
"Upload Files": "",
"Upload Files": "上传文件",
"Upload Pipeline": "上传 Pipeline",
"Upload Progress": "上传进度",
"URL Mode": "URL 模式",
"Use '#' in the prompt input to load and select your documents.": "在提示输入中使用'#'来加载和选择你的文档。",
"Use Gravatar": "使用 Gravatar",
"Use Initials": "使用首字母缩写",
"Use '#' in the prompt input to load and select your documents.": "在输入框中输入'#'号来选择并附带你的文档。",
"Use Gravatar": "使用来自 Gravatar 的头像",
"Use Initials": "使用首个字符作为头像",
"use_mlock (Ollama)": "use_mlock(Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "用户",
"User Permissions": "用户权限",
"Users": "用户",
......@@ -484,29 +548,34 @@
"variable": "变量",
"variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。",
"Version": "版本",
"Warning": "",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告: 如果更新或更改 embedding 模型,则需要重新导入所有文档。",
"Warning": "警告",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您修改了语义向量模型,则需要重新导入所有文档。",
"Web": "网页",
"Web Loader Settings": "Web 加载器设置",
"Web Params": "Web 参数",
"Web Search": "",
"Web API": "网页 API",
"Web Loader Settings": "网页爬取设置",
"Web Params": "网络爬取设置",
"Web Search": "网络搜索",
"Web Search Engine": "Web 搜索引擎",
"Webhook URL": "Webhook URL",
"WebUI Add-ons": "WebUI 件",
"WebUI Add-ons": "WebUI 附加组件",
"WebUI Settings": "WebUI 设置",
"WebUI will make requests to": "WebUI 将请求",
"What’s New in": "最新变化",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "当历史记录被关闭时,这个浏览器上的新聊天不会出现在你任何设备的历史记录中。",
"Whisper (Local)": "Whisper(本地)",
"What’s New in": "最近更新内容于",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "当关闭历史记录功能时,在此浏览器上新的对话记录将不会同步到您其他设备的历史记录中。",
"Whisper (Local)": "Whisper (本地)",
"Widescreen Mode": "宽屏模式",
"Workspace": "工作空间",
"Write a prompt suggestion (e.g. Who are you?)": "写一个提示建议(例如:你是谁?)",
"Write a prompt suggestion (e.g. Who are you?)": "写一个提示建议(例如:你是谁?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "用 50 个字写一个总结 [主题或关键词]。",
"Yesterday": "昨天",
"You": "你",
"You cannot clone a base model": "",
"You have no archived conversations.": "你没有存档的对话。",
"You have shared this chat": "你分享了这次聊天",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "通过点击下方的“管理”按钮,你可以添加记忆,以个性化大语言模型的互动,使其更有用,更符合你的需求。",
"You cannot clone a base model": "你不能复制基础模型",
"You have no archived conversations.": "你没有已归档的对话。",
"You have shared this chat": "你之前已经分享过此",
"You're a helpful assistant.": "你是一个有帮助的助手。",
"You're now logged in.": "已登录。",
"Youtube": "Youtube",
"Youtube Loader Settings": "Youtube 加载器设置"
"Your account status is currently pending activation.": "您的账号当前状态为待激活。",
"Youtube": "YouTube",
"Youtube Loader Settings": "YouTube 爬取设置"
}
......@@ -3,19 +3,21 @@
"(Beta)": "(測試版)",
"(e.g. `sh webui.sh --api`)": "(例如 `sh webui.sh --api`)",
"(latest)": "(最新版)",
"{{ models }}": "",
"{{ owner }}: You cannot delete a base model": "",
"{{ models }}": "{{ models }}",
"{{ owner }}: You cannot delete a base model": "{{ owner }}:你無法刪除基本模型",
"{{modelName}} is thinking...": "{{modelName}} 正在思考...",
"{{user}}'s Chats": "{{user}} 的聊天",
"{{webUIName}} Backend Required": "需要 {{webUIName}} 後台",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "",
"A task model is used when performing tasks such as generating titles for chats and web search queries": "在執行任務時使用任務模型,例如為聊天和網絡搜索查詢生成標題",
"a user": "使用者",
"About": "關於",
"Account": "帳號",
"Account Activation Pending": "",
"Accurate information": "準確信息",
"Active Users": "",
"Add": "新增",
"Add a model id": "",
"Add a short description about what this model does": "",
"Add a model id": "新增模型 ID",
"Add a short description about what this model does": "為這個模型添加一個簡短描述",
"Add a short title for this prompt": "為這個提示詞添加一個簡短的標題",
"Add a tag": "新增標籤",
"Add custom prompt": "新增自定義提示詞",
......@@ -28,15 +30,18 @@
"Add User": "新增用户",
"Adjusting these settings will apply changes universally to all users.": "調整這些設定將對所有使用者進行更改。",
"admin": "管理員",
"Admin": "",
"Admin Panel": "管理員控制台",
"Admin Settings": "管理設定",
"Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "",
"Advanced Parameters": "進階參數",
"Advanced Params": "",
"Advanced Params": "進階參數",
"all": "所有",
"All Documents": "所有文件",
"All Users": "所有使用者",
"Allow": "允許",
"Allow Chat Deletion": "允許刪除聊天紀錄",
"Allow non-local voices": "",
"alphanumeric characters and hyphens": "英文字母、數字(0~9)和連字符(-)",
"Already have an account?": "已經有帳號了嗎?",
"an assistant": "助手",
......@@ -48,7 +53,7 @@
"API keys": "API Keys",
"April": "4月",
"Archive": "存檔",
"Archive All Chats": "",
"Archive All Chats": "存檔所有聊天紀錄",
"Archived Chats": "聊天記錄存檔",
"are allowed - Activate this command by typing": "是允許的 - 透過輸入",
"Are you sure?": "你確定嗎?",
......@@ -57,19 +62,22 @@
"Audio": "音訊",
"August": "8月",
"Auto-playback response": "自動播放回答",
"Auto-send input after 3 sec.": "3 秒後自動傳送輸入內容",
"AUTOMATIC1111 Base URL": "AUTOMATIC1111 基本 URL",
"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基本 URL",
"available!": "可以使用!",
"Back": "返回",
"Bad Response": "錯誤回應",
"Banners": "",
"Base Model (From)": "",
"Banners": "橫幅",
"Base Model (From)": "基本模型(來自)",
"before": "前",
"Being lazy": "懶人模式",
"Brave Search API Key": "搜尋 API Key",
"Bypass SSL verification for Websites": "跳過 SSL 驗證",
"Call": "",
"Call feature is not supported when using Web STT engine": "",
"Camera": "",
"Cancel": "取消",
"Capabilities": "",
"Capabilities": "功能",
"Change Password": "修改密碼",
"Chat": "聊天",
"Chat Bubble UI": "聊天氣泡介面",
......@@ -85,33 +93,36 @@
"Chunk Params": "Chunk 參數",
"Chunk Size": "Chunk 大小",
"Citation": "引文",
"Clear memory": "",
"Click here for help.": "點擊這裡尋找幫助。",
"Click here to": "點擊這裡",
"Click here to select": "點擊這裡選擇",
"Click here to select a csv file.": "點擊這裡選擇 csv 檔案。",
"Click here to select a py file.": "",
"Click here to select documents.": "點擊這裡選擇文件。",
"click here.": "點擊這裡。",
"Click on the user role button to change a user's role.": "點擊使用者 Role 按鈕以更改使用者的 Role。",
"Clone": "複製",
"Close": "關閉",
"Collection": "收藏",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "ComfyUI 基本 URL",
"ComfyUI Base URL is required.": "需要 ComfyUI 基本 URL",
"Command": "命令",
"Concurrent Requests": "同時請求",
"Confirm Password": "確認密碼",
"Connections": "連線",
"Contact Admin for WebUI Access": "",
"Content": "內容",
"Context Length": "上下文長度",
"Continue Response": "繼續回答",
"Conversation Mode": "對話模式",
"Copied shared chat URL to clipboard!": "已複製共享聊天連結到剪貼簿!",
"Copy": "複製",
"Copy last code block": "複製最後一個程式碼區塊",
"Copy last response": "複製最後一個回答",
"Copy Link": "複製連結",
"Copying to clipboard was successful!": "成功複製到剪貼簿!",
"Create a concise, 3-5 word phrase as a header for the following query, strictly adhering to the 3-5 word limit and avoiding the use of the word 'title':": "為以下的查詢建立一個簡潔、3-5 個詞的短語作為標題,嚴格遵守 3-5 個詞的限制,避免使用「標題」這個詞:",
"Create a model": "",
"Create a model": "建立模型",
"Create Account": "建立帳號",
"Create new key": "建立新密鑰",
"Create new secret key": "建立新密鑰",
......@@ -120,38 +131,39 @@
"Current Model": "目前模型",
"Current Password": "目前密碼",
"Custom": "自訂",
"Customize models for a specific purpose": "",
"Customize models for a specific purpose": "為特定目的自定義模型",
"Dark": "暗色",
"Dashboard": "",
"Database": "資料庫",
"December": "12月",
"Default": "預設",
"Default (Automatic1111)": "預設(Automatic1111)",
"Default (SentenceTransformers)": "預設(SentenceTransformers)",
"Default (Web API)": "預設(Web API)",
"Default Model": "",
"Default Model": "預設模型",
"Default model updated": "預設模型已更新",
"Default Prompt Suggestions": "預設提示詞建議",
"Default User Role": "預設用戶 Role",
"delete": "刪除",
"Delete": "刪除",
"Delete a model": "刪除一個模型",
"Delete All Chats": "",
"Delete All Chats": "刪除所有聊天紀錄",
"Delete chat": "刪除聊天紀錄",
"Delete Chat": "刪除聊天紀錄",
"delete this link": "刪除此連結",
"Delete User": "刪除用戶",
"Deleted {{deleteModelTag}}": "已刪除 {{deleteModelTag}}",
"Deleted {{name}}": "",
"Deleted {{name}}": "已刪除 {{name}}",
"Description": "描述",
"Didn't fully follow instructions": "無法完全遵循指示",
"Disabled": "已停用",
"Discover a model": "",
"Discover a model": "發現新模型",
"Discover a prompt": "發現新提示詞",
"Discover, download, and explore custom prompts": "發現、下載並探索他人設置的提示詞",
"Discover, download, and explore model presets": "發現、下載並探索他人設置的模型",
"Dismissible": "",
"Display the username instead of You in the Chat": "在聊天中顯示使用者名稱而不是「你」",
"Document": "文件",
"Document Settings": "文件設定",
"Documentation": "",
"Documents": "文件",
"does not make any external connections, and your data stays securely on your locally hosted server.": "不會與外部溝通,你的數據會安全地留在你的本機伺服器上。",
"Don't Allow": "不允許",
......@@ -166,24 +178,32 @@
"Edit Doc": "編輯文件",
"Edit User": "編輯使用者",
"Email": "電子郵件",
"Embedding Batch Size": "",
"Embedding Model": "嵌入模型",
"Embedding Model Engine": "嵌入模型引擎",
"Embedding model set to \"{{embedding_model}}\"": "嵌入模型已設定為 \"{{embedding_model}}\"",
"Enable Chat History": "啟用聊天歷史",
"Enable Community Sharing": "",
"Enable Community Sharing": "啟用社區分享",
"Enable New Sign Ups": "允許註冊新帳號",
"Enabled": "啟用",
"Enable Web Search": "啟用網絡搜索",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "請確保你的 CSV 檔案包含這四個欄位,並按照此順序:名稱、電子郵件、密碼、角色。",
"Enter {{role}} message here": "在這裡輸入 {{role}} 訊息",
"Enter a detail about yourself for your LLMs to recall": "輸入 LLM 記憶的詳細內容",
"Enter Brave Search API Key": "輸入 Brave Search API Key",
"Enter Chunk Overlap": "輸入 Chunk Overlap",
"Enter Chunk Size": "輸入 Chunk 大小",
"Enter Github Raw URL": "",
"Enter Github Raw URL": "輸入 Github Raw URL",
"Enter Google PSE API Key": "輸入 Google PSE API Key",
"Enter Google PSE Engine Id": "輸入 Google PSE Engine Id",
"Enter Image Size (e.g. 512x512)": "輸入圖片大小(例如 512x512)",
"Enter language codes": "輸入語言代碼",
"Enter model tag (e.g. {{modelTag}})": "輸入模型標籤(例如 {{modelTag}})",
"Enter Number of Steps (e.g. 50)": "輸入步數(例如 50)",
"Enter Score": "輸入分數",
"Enter Searxng Query URL": "輸入 Searxng 查詢 URL",
"Enter Serper API Key": "輸入 Serper API Key",
"Enter Serply API Key": "",
"Enter Serpstack API Key": "輸入 Serpstack API Key",
"Enter stop sequence": "輸入停止序列",
"Enter Top K": "輸入 Top K",
"Enter URL (e.g. http://127.0.0.1:7860/)": "輸入 URL(例如 http://127.0.0.1:7860/)",
......@@ -192,15 +212,20 @@
"Enter Your Full Name": "輸入你的全名",
"Enter Your Password": "輸入你的密碼",
"Enter Your Role": "輸入你的角色",
"Error": "",
"Error": "錯誤",
"Experimental": "實驗功能",
"Export": "出口",
"Export All Chats (All Users)": "匯出所有聊天紀錄(所有使用者)",
"Export chat (.json)": "",
"Export Chats": "匯出聊天紀錄",
"Export Documents Mapping": "匯出文件映射",
"Export Models": "",
"Export Models": "匯出模型",
"Export Prompts": "匯出提示詞",
"Export Tools": "",
"External Models": "",
"Failed to create API Key.": "無法創建 API 金鑰。",
"Failed to read clipboard contents": "無法讀取剪貼簿內容",
"Failed to update settings": "",
"February": "2月",
"Feel free to add specific details": "請自由添加詳細內容。",
"File Mode": "檔案模式",
......@@ -210,13 +235,15 @@
"Focus chat input": "聚焦聊天輸入框",
"Followed instructions perfectly": "完全遵循指示",
"Format your variables using square brackets like this:": "像這樣使用方括號來格式化你的變數:",
"Frequencey Penalty": "",
"Full Screen Mode": "全螢幕模式",
"Frequency Penalty": "頻率懲罰",
"General": "常用",
"General Settings": "常用設定",
"Generating search query": "",
"Generate Image": "",
"Generating search query": "生成搜索查詢",
"Generation Info": "生成信息",
"Good Response": "優秀的回應",
"Google PSE API Key": "Google PSE API Key",
"Google PSE Engine Id": "Google PSE Engine Id",
"h:mm a": "h:mm a",
"has no conversations.": "沒有對話",
"Hello, {{name}}": "你好,{{name}}",
......@@ -230,37 +257,42 @@
"Images": "圖片",
"Import Chats": "匯入聊天紀錄",
"Import Documents Mapping": "匯入文件映射",
"Import Models": "",
"Import Models": "匯入模型",
"Import Prompts": "匯入提示詞",
"Import Tools": "",
"Include `--api` flag when running stable-diffusion-webui": "在運行 stable-diffusion-webui 時加上 `--api` 標誌",
"Info": "",
"Info": "資訊",
"Input commands": "輸入命令",
"Install from Github URL": "",
"Install from Github URL": "從 Github URL 安裝",
"Instant Auto-Send After Voice Transcription": "",
"Interface": "介面",
"Invalid Tag": "無效標籤",
"January": "1月",
"join our Discord for help.": "加入我們的 Discord 尋找幫助。",
"JSON": "JSON",
"JSON Preview": "",
"JSON Preview": "JSON 預覽",
"July": "7月",
"June": "6月",
"JWT Expiration": "JWT 過期時間",
"JWT Token": "JWT Token",
"Keep Alive": "保持活躍",
"Keyboard shortcuts": "鍵盤快速鍵",
"Knowledge": "",
"Language": "語言",
"Last Active": "最後活動",
"Light": "亮色",
"Listening...": "正在聽取...",
"Listening...": "",
"LLMs can make mistakes. Verify important information.": "LLM 可能會產生錯誤。請驗證重要資訊。",
"Local Models": "",
"LTR": "LTR",
"Made by OpenWebUI Community": "由 OpenWebUI 社區製作",
"Make sure to enclose them with": "請確保變數有被以下符號框住:",
"Manage": "",
"Manage Models": "管理模組",
"Manage Ollama Models": "管理 Ollama 模型",
"Manage Pipelines": "",
"Manage Pipelines": "管理管道",
"March": "3月",
"Max Tokens (num_predict)": "",
"Max Tokens (num_predict)": "最大 Token(num_predict)",
"Maximum of 3 models can be downloaded simultaneously. Please try again later.": "最多可以同時下載 3 個模型。請稍後再試。",
"May": "5月",
"Memories accessible by LLMs will be shown here.": "LLM 記憶將會顯示在此處。",
......@@ -275,11 +307,12 @@
"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' 模型已成功下載。",
"Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' 模型已經在下載佇列中。",
"Model {{modelId}} not found": "找不到 {{modelId}} 模型",
"Model {{modelName}} is not vision capable": "",
"Model {{modelName}} is not vision capable": "{{modelName}} 模型不適用於視覺",
"Model {{name}} is now {{status}}": "{{name}} 模型現在是 {{status}}",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "模型文件系統路徑已檢測。需要更新模型短名,無法繼續。",
"Model ID": "",
"Model ID": "模型 ID",
"Model not selected": "未選擇模型",
"Model Params": "",
"Model Params": "模型參數",
"Model Whitelisting": "白名單模型",
"Model(s) Whitelisted": "模型已加入白名單",
"Modelfile Content": "Modelfile 內容",
......@@ -287,24 +320,27 @@
"More": "更多",
"Name": "名稱",
"Name Tag": "名稱標籤",
"Name your model": "",
"Name your model": "請輸入模型名稱",
"New Chat": "新增聊天",
"New Password": "新密碼",
"No documents found": "",
"No results found": "沒有找到結果",
"No search query generated": "",
"No search results found": "",
"No search query generated": "沒有生成搜索查詢",
"No source available": "沒有可用的來源",
"None": "",
"None": "",
"Not factually correct": "與真實資訊不相符",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "註:如果設置最低分數,則搜索將只返回分數大於或等於最低分數的文檔。",
"Notifications": "桌面通知",
"November": "11月",
"num_thread (Ollama)": "num_thread(奧拉馬)",
"October": "10 月",
"Off": "關閉",
"Okay, Let's Go!": "好的,啟動吧!",
"OLED Dark": "`",
"Ollama": "Ollama",
"Ollama API": "",
"Ollama API": "Ollama API",
"Ollama API disabled": "Ollama API 已禁用",
"Ollama API is disabled": "",
"Ollama Version": "Ollama 版本",
"On": "開啟",
"Only": "僅有",
......@@ -327,10 +363,12 @@
"PDF document (.pdf)": "PDF 文件 (.pdf)",
"PDF Extract Images (OCR)": "PDF 圖像擷取(OCR 光學文字辨識)",
"pending": "待審查",
"Permission denied when accessing media devices": "",
"Permission denied when accessing microphone": "",
"Permission denied when accessing microphone: {{error}}": "存取麥克風時被拒絕權限:{{error}}",
"Personalization": "個人化",
"Pipelines": "",
"Pipelines Valves": "",
"Pipelines": "管線",
"Pipelines Valves": "管線阀门",
"Plain text (.txt)": "純文字 (.txt)",
"Playground": "AI 對話遊樂場",
"Positive attitude": "積極態度",
......@@ -349,6 +387,7 @@
"Read Aloud": "讀出",
"Record voice": "錄音",
"Redirecting you to OpenWebUI Community": "將你重新導向到 OpenWebUI 社群",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "",
"Refused when it shouldn't have": "拒絕時不該拒絕",
"Regenerate": "重新生成",
"Release Notes": "發布說明",
......@@ -360,12 +399,14 @@
"Reranking Model": "重新排序模型",
"Reranking model disabled": "重新排序模型已禁用",
"Reranking model set to \"{{reranking_model}}\"": "重新排序模型設定為 \"{{reranking_model}}\"",
"Reset Upload Directory": "",
"Reset Vector Storage": "重置向量儲存空間",
"Response AutoCopy to Clipboard": "自動複製回答到剪貼簿",
"Role": "Role",
"Rosé Pine": "玫瑰松",
"Rosé Pine Dawn": "黎明玫瑰松",
"RTL": "RTL",
"Running": "",
"Save": "儲存",
"Save & Create": "儲存並建立",
"Save & Update": "儲存並更新",
......@@ -375,44 +416,56 @@
"Scan for documents from {{path}}": "從 {{path}} 掃描文件",
"Search": "搜尋",
"Search a model": "搜尋模型",
"Search Chats": "",
"Search Chats": "搜尋聊天",
"Search Documents": "搜尋文件",
"Search Models": "",
"Search Models": "搜尋模型",
"Search Prompts": "搜尋提示詞",
"Searched {{count}} sites_other": "",
"Searching the web for '{{searchQuery}}'": "",
"Search Query Generation Prompt": "",
"Search Query Generation Prompt Length Threshold": "",
"Search Result Count": "搜尋結果數量",
"Search Tools": "",
"Searched {{count}} sites_other": "掃描 {{count}} 個網站_其他",
"Searching \"{{searchQuery}}\"": "",
"Searxng Query URL": "Searxng 查詢 URL",
"See readme.md for instructions": "查看 readme.md 獲取指南",
"See what's new": "查看最新內容",
"Seed": "種子",
"Select a base model": "",
"Select a base model": "選擇基礎模型",
"Select a engine": "",
"Select a mode": "選擇模式",
"Select a model": "選擇一個模型",
"Select a pipeline": "",
"Select a pipeline url": "",
"Select a pipeline": "選擇管道",
"Select a pipeline url": "選擇管道 URL",
"Select an Ollama instance": "選擇 Ollama 實例",
"Select Documents": "",
"Select model": "選擇模型",
"Selected model(s) do not support image inputs": "",
"Select only one model to call": "",
"Selected model(s) do not support image inputs": "已選擇模型不支持圖像輸入",
"Send": "傳送",
"Send a Message": "傳送訊息",
"Send message": "傳送訊息",
"September": "九月",
"Serper API Key": "Serper API Key",
"Serply API Key": "",
"Serpstack API Key": "Serpstack API Key",
"Server connection verified": "已驗證伺服器連線",
"Set as default": "設為預設",
"Set Default Model": "設定預設模型",
"Set embedding model (e.g. {{model}})": "設定嵌入模型(例如:{{model}})",
"Set Image Size": "設定圖片大小",
"Set Model": "設定模型",
"Set reranking model (e.g. {{model}})": "設定重新排序模型(例如:{{model}})",
"Set Steps": "設定步數",
"Set Task Model": "",
"Set Task Model": "設定任務模型",
"Set Voice": "設定語音",
"Settings": "設定",
"Settings saved successfully!": "成功儲存設定",
"Settings updated successfully": "",
"Share": "分享",
"Share Chat": "分享聊天",
"Share to OpenWebUI Community": "分享到 OpenWebUI 社群",
"short-summary": "簡短摘要",
"Show": "顯示",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "顯示快速鍵",
"Showcased creativity": "展示創造性",
"sidebar": "側邊欄",
......@@ -423,8 +476,8 @@
"Source": "來源",
"Speech recognition error: {{error}}": "語音識別錯誤:{{error}}",
"Speech-to-Text Engine": "語音轉文字引擎",
"SpeechRecognition API is not supported in this browser.": "此瀏覽器不支持 SpeechRecognition API。",
"Stop Sequence": "停止序列",
"STT Model": "",
"STT Settings": "語音轉文字設定",
"Submit": "提交",
"Subtitle (e.g. about the Roman Empire)": "標題(例如:關於羅馬帝國)",
......@@ -443,7 +496,9 @@
"Thanks for your feedback!": "感謝你的回饋!",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "分數應該介於 0.0(0%)和 1.0(100%)之間。",
"Theme": "主題",
"Thinking...": "",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "這確保你寶貴的對話安全地儲存到你的後台資料庫。謝謝!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
"This setting does not sync across browsers or devices.": "此設定不會在瀏覽器或裝置間同步。",
"Thorough explanation": "詳細說明",
"Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:透過在每次替換後在聊天輸入框中按 Tab 鍵連續更新多個變數。",
......@@ -455,27 +510,36 @@
"to": "到",
"To access the available model names for downloading,": "若想查看可供下載的模型名稱,",
"To access the GGUF models available for downloading,": "若想查看可供下載的 GGUF 模型名稱,",
"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 chat input.": "到聊天輸入框來啟動此命令。",
"To select toolkits here, add them to the \"Tools\" workspace first.": "",
"Today": "今天",
"Toggle settings": "切換設定",
"Toggle sidebar": "切換側邊欄",
"Tools": "",
"Top K": "Top K",
"Top P": "Top P",
"Trouble accessing Ollama?": "存取 Ollama 時遇到問題?",
"TTS Model": "",
"TTS Settings": "文字轉語音設定",
"Type": "",
"TTS Voice": "",
"Type": "類型",
"Type Hugging Face Resolve (Download) URL": "輸入 Hugging Face 解析後的(下載)URL",
"Uh-oh! There was an issue connecting to {{provider}}.": "哎呀!連線到 {{provider}} 時出現問題。",
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知的文件類型 '{{file_type}}',但接受並視為純文字",
"Update and Copy Link": "更新並複製連結",
"Update password": "更新密碼",
"Upload a GGUF model": "上傳一個 GGUF 模型",
"Upload Files": "",
"Upload Files": "上傳文件",
"Upload Pipeline": "",
"Upload Progress": "上傳進度",
"URL Mode": "URL 模式",
"Use '#' in the prompt input to load and select your documents.": "在輸入框中輸入 '#' 以載入並選擇你的文件。",
"Use Gravatar": "使用 Gravatar",
"Use Initials": "使用初始头像",
"use_mlock (Ollama)": "use_mlock(奧拉馬)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "使用者",
"User Permissions": "使用者權限",
"Users": "使用者",
......@@ -484,29 +548,34 @@
"variable": "變數",
"variable to have them replaced with clipboard content.": "變數將替換為剪貼簿內容",
"Version": "版本",
"Warning": "",
"Warning": "警告",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果更新或更改你的嵌入模型,則需要重新導入所有文件",
"Web": "網頁",
"Web API": "",
"Web Loader Settings": "Web 載入器設定",
"Web Params": "Web 參數",
"Web Search": "",
"Web Search": "Web 搜尋",
"Web Search Engine": "Web 搜尋引擎",
"Webhook URL": "Webhook URL",
"WebUI Add-ons": "WebUI 擴充套件",
"WebUI Settings": "WebUI 設定",
"WebUI will make requests to": "WebUI 將會存取",
"What’s New in": "全新內容",
"When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "當歷史被關閉時,這個瀏覽器上的新聊天將不會出現在任何裝置的歷史記錄中",
"Whisper (Local)": "Whisper(本機)",
"Whisper (Local)": "",
"Widescreen Mode": "",
"Workspace": "工作區",
"Write a prompt suggestion (e.g. Who are you?)": "寫一個提示詞建議(例如:你是誰?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "寫一個 50 字的摘要來概括 [主題或關鍵詞]。",
"Yesterday": "昨天",
"You": "你",
"You cannot clone a base model": "",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "",
"You cannot clone a base model": "你不能複製基礎模型",
"You have no archived conversations.": "你沒有任何已封存的對話",
"You have shared this chat": "你已分享此聊天",
"You're a helpful assistant.": "你是一位善於協助他人的助手。",
"You're now logged in.": "已登入。",
"Your account status is currently pending activation.": "",
"Youtube": "Youtube",
"Youtube Loader Settings": "Youtube 載入器設定"
}
......@@ -2,6 +2,7 @@ import { APP_NAME } from '$lib/constants';
import { type Writable, writable } from 'svelte/store';
import type { GlobalModelConfig, ModelConfig } from '$lib/apis';
import type { Banner } from '$lib/types';
import type { Socket } from 'socket.io-client';
// Backend
export const WEBUI_NAME = writable(APP_NAME);
......@@ -13,29 +14,20 @@ export const MODEL_DOWNLOAD_POOL = writable({});
export const mobile = writable(false);
export const socket: Writable<null | Socket> = writable(null);
export const activeUserCount: Writable<null | number> = writable(null);
export const USAGE_POOL: Writable<null | string[]> = writable(null);
export const theme = writable('system');
export const chatId = writable('');
export const chats = writable([]);
export const tags = writable([]);
export const models: Writable<Model[]> = writable([]);
export const modelfiles = writable([]);
export const models: Writable<Model[]> = writable([]);
export const prompts: Writable<Prompt[]> = writable([]);
export const documents = writable([
{
collection_name: 'collection_name',
filename: 'filename',
name: 'name',
title: 'title'
},
{
collection_name: 'collection_name1',
filename: 'filename1',
name: 'name1',
title: 'title1'
}
]);
export const documents: Writable<Document[]> = writable([]);
export const tools = writable([]);
export const banners: Writable<Banner[]> = writable([]);
......@@ -45,6 +37,7 @@ export const showSidebar = writable(false);
export const showSettings = writable(false);
export const showArchivedChats = writable(false);
export const showChangelog = writable(false);
export const showCallOverlay = writable(false);
export type Model = OpenAIModel | OllamaModel;
......@@ -111,6 +104,7 @@ type AudioSettings = {
TTSEngine?: string;
speaker?: string;
model?: string;
nonLocalVoices?: boolean;
};
type TitleSettings = {
......@@ -128,6 +122,13 @@ type Prompt = {
timestamp: number;
};
type Document = {
collection_name: string;
filename: string;
name: string;
title: string;
};
type Config = {
status: boolean;
name: string;
......
import { promptTemplate } from '$lib/utils/index';
import { titleGenerationTemplate } from '$lib/utils/index';
import { expect, test } from 'vitest';
test('promptTemplate correctly replaces {{prompt}} placeholder', () => {
test('titleGenerationTemplate correctly replaces {{prompt}} placeholder', () => {
const template = 'Hello {{prompt}}!';
const prompt = 'world';
const expected = 'Hello world!';
const actual = promptTemplate(template, prompt);
const actual = titleGenerationTemplate(template, prompt);
expect(actual).toBe(expected);
});
test('promptTemplate correctly replaces {{prompt:start:<length>}} placeholder', () => {
test('titleGenerationTemplate correctly replaces {{prompt:start:<length>}} placeholder', () => {
const template = 'Hello {{prompt:start:3}}!';
const prompt = 'world';
const expected = 'Hello wor!';
const actual = promptTemplate(template, prompt);
const actual = titleGenerationTemplate(template, prompt);
expect(actual).toBe(expected);
});
test('promptTemplate correctly replaces {{prompt:end:<length>}} placeholder', () => {
test('titleGenerationTemplate correctly replaces {{prompt:end:<length>}} placeholder', () => {
const template = 'Hello {{prompt:end:3}}!';
const prompt = 'world';
const expected = 'Hello rld!';
const actual = promptTemplate(template, prompt);
const actual = titleGenerationTemplate(template, prompt);
expect(actual).toBe(expected);
});
test('promptTemplate correctly replaces {{prompt:middletruncate:<length>}} placeholder when prompt length is greater than length', () => {
test('titleGenerationTemplate correctly replaces {{prompt:middletruncate:<length>}} placeholder when prompt length is greater than length', () => {
const template = 'Hello {{prompt:middletruncate:4}}!';
const prompt = 'world';
const expected = 'Hello wo...ld!';
const actual = promptTemplate(template, prompt);
const actual = titleGenerationTemplate(template, prompt);
expect(actual).toBe(expected);
});
test('promptTemplate correctly replaces {{prompt:middletruncate:<length>}} placeholder when prompt length is less than or equal to length', () => {
test('titleGenerationTemplate correctly replaces {{prompt:middletruncate:<length>}} placeholder when prompt length is less than or equal to length', () => {
const template = 'Hello {{prompt:middletruncate:5}}!';
const prompt = 'world';
const expected = 'Hello world!';
const actual = promptTemplate(template, prompt);
const actual = titleGenerationTemplate(template, prompt);
expect(actual).toBe(expected);
});
test('promptTemplate returns original template when no placeholders are present', () => {
test('titleGenerationTemplate returns original template when no placeholders are present', () => {
const template = 'Hello world!';
const prompt = 'world';
const expected = 'Hello world!';
const actual = promptTemplate(template, prompt);
const actual = titleGenerationTemplate(template, prompt);
expect(actual).toBe(expected);
});
test('promptTemplate does not replace placeholders inside of replaced placeholders', () => {
test('titleGenerationTemplate does not replace placeholders inside of replaced placeholders', () => {
const template = 'Hello {{prompt}}!';
const prompt = 'World, {{prompt}} injection';
const expected = 'Hello World, {{prompt}} injection!';
const actual = promptTemplate(template, prompt);
const actual = titleGenerationTemplate(template, prompt);
expect(actual).toBe(expected);
});
test('promptTemplate correctly replaces multiple placeholders', () => {
test('titleGenerationTemplate correctly replaces multiple placeholders', () => {
const template = 'Hello {{prompt}}! This is {{prompt:start:3}}!';
const prompt = 'world';
const expected = 'Hello world! This is wor!';
const actual = promptTemplate(template, prompt);
const actual = titleGenerationTemplate(template, prompt);
expect(actual).toBe(expected);
});
......@@ -449,6 +449,42 @@ export const blobToFile = (blob, fileName) => {
return file;
};
/**
* @param {string} template - The template string containing placeholders.
* @returns {string} The template string with the placeholders replaced by the prompt.
*/
export const promptTemplate = (
template: string,
user_name?: string,
current_location?: string
): string => {
// Get the current date
const currentDate = new Date();
// Format the date to YYYY-MM-DD
const formattedDate =
currentDate.getFullYear() +
'-' +
String(currentDate.getMonth() + 1).padStart(2, '0') +
'-' +
String(currentDate.getDate()).padStart(2, '0');
// Replace {{CURRENT_DATE}} in the template with the formatted date
template = template.replace('{{CURRENT_DATE}}', formattedDate);
if (user_name) {
// Replace {{USER_NAME}} in the template with the user's name
template = template.replace('{{USER_NAME}}', user_name);
}
if (current_location) {
// Replace {{CURRENT_LOCATION}} in the template with the current location
template = template.replace('{{CURRENT_LOCATION}}', current_location);
}
return template;
};
/**
* This function is used to replace placeholders in a template string with the provided prompt.
* The placeholders can be in the following formats:
......@@ -461,8 +497,8 @@ export const blobToFile = (blob, fileName) => {
* @param {string} prompt - The string to replace the placeholders with.
* @returns {string} The template string with the placeholders replaced by the prompt.
*/
export const promptTemplate = (template: string, prompt: string): string => {
return template.replace(
export const titleGenerationTemplate = (template: string, prompt: string): string => {
template = template.replace(
/{{prompt}}|{{prompt:start:(\d+)}}|{{prompt:end:(\d+)}}|{{prompt:middletruncate:(\d+)}}/g,
(match, startLength, endLength, middleLength) => {
if (match === '{{prompt}}') {
......@@ -482,6 +518,10 @@ export const promptTemplate = (template: string, prompt: string): string => {
return '';
}
);
template = promptTemplate(template);
return template;
};
export const approximateToHumanReadable = (nanoseconds: number) => {
......
......@@ -8,11 +8,14 @@
import { goto } from '$app/navigation';
import { getModels as _getModels } from '$lib/apis';
import { getOllamaVersion } from '$lib/apis/ollama';
import { getPrompts } from '$lib/apis/prompts';
import { getAllChatTags } from '$lib/apis/chats';
import { getPrompts } from '$lib/apis/prompts';
import { getDocs } from '$lib/apis/documents';
import { getAllChatTags } from '$lib/apis/chats';
import { getTools } from '$lib/apis/tools';
import { getBanners } from '$lib/apis/configs';
import { getUserSettings } from '$lib/apis/users';
import {
user,
......@@ -24,29 +27,22 @@
tags,
banners,
showChangelog,
config
config,
showCallOverlay,
tools
} from '$lib/stores';
import { REQUIRED_OLLAMA_VERSION, WEBUI_API_BASE_URL } from '$lib/constants';
import { compareVersion } from '$lib/utils';
import SettingsModal from '$lib/components/chat/SettingsModal.svelte';
import Sidebar from '$lib/components/layout/Sidebar.svelte';
import ShortcutsModal from '$lib/components/chat/ShortcutsModal.svelte';
import ChangelogModal from '$lib/components/ChangelogModal.svelte';
import Tooltip from '$lib/components/common/Tooltip.svelte';
import { getBanners } from '$lib/apis/configs';
import { getUserSettings } from '$lib/apis/users';
import AccountPending from '$lib/components/layout/Overlay/AccountPending.svelte';
const i18n = getContext('i18n');
let ollamaVersion = '';
let loaded = false;
let showShortcutsButtonElement: HTMLButtonElement;
let DB = null;
let localDBChats = [];
let showShortcuts = false;
const getModels = async () => {
return _getModels(localStorage.token);
};
......@@ -73,7 +69,10 @@
// IndexedDB Not Found
}
const userSettings = await getUserSettings(localStorage.token);
const userSettings = await getUserSettings(localStorage.token).catch((error) => {
console.error(error);
return null;
});
if (userSettings) {
await settings.set(userSettings.ui);
......@@ -91,6 +90,9 @@
(async () => {
documents.set(await getDocs(localStorage.token));
})(),
(async () => {
tools.set(await getTools(localStorage.token));
})(),
(async () => {
banners.set(await getBanners(localStorage.token));
})(),
......@@ -160,7 +162,7 @@
if (isCtrlPressed && event.key === '/') {
event.preventDefault();
console.log('showShortcuts');
showShortcutsButtonElement.click();
document.getElementById('show-shortcuts-button')?.click();
}
});
......@@ -175,69 +177,16 @@
});
</script>
<div class=" hidden lg:flex fixed bottom-0 right-0 px-2 py-2 z-10">
<Tooltip content={$i18n.t('Help')} placement="left">
<button
id="show-shortcuts-button"
bind:this={showShortcutsButtonElement}
class="text-gray-600 dark:text-gray-300 bg-gray-300/20 size-5 flex items-center justify-center text-[0.7rem] rounded-full"
on:click={() => {
showShortcuts = !showShortcuts;
}}
>
?
</button>
</Tooltip>
</div>
<ShortcutsModal bind:show={showShortcuts} />
<SettingsModal bind:show={$showSettings} />
<ChangelogModal bind:show={$showChangelog} />
<div class="app relative">
<div
class=" text-gray-700 dark:text-gray-100 bg-white dark:bg-gray-900 min-h-screen overflow-auto flex flex-row"
class=" text-gray-700 dark:text-gray-100 bg-white dark:bg-gray-900 h-screen max-h-[100dvh] overflow-auto flex flex-row"
>
{#if loaded}
{#if !['user', 'admin'].includes($user.role)}
<div class="fixed w-full h-full flex z-[999]">
<div
class="absolute w-full h-full backdrop-blur-lg bg-white/10 dark:bg-gray-900/50 flex justify-center"
>
<div class="m-auto pb-10 flex flex-col justify-center">
<div class="max-w-md">
<div class="text-center dark:text-white text-2xl font-medium z-50">
Account Activation Pending<br /> Contact Admin for WebUI Access
</div>
<div class=" mt-4 text-center text-sm dark:text-gray-200 w-full">
Your account status is currently pending activation. To access the WebUI, please
reach out to the administrator. Admins can manage user statuses from the Admin
Panel.
</div>
<div class=" mt-6 mx-auto relative group w-fit">
<button
class="relative z-20 flex px-5 py-2 rounded-full bg-white border border-gray-100 dark:border-none hover:bg-gray-100 text-gray-700 transition font-medium text-sm"
on:click={async () => {
location.href = '/';
}}
>
{$i18n.t('Check Again')}
</button>
<button
class="text-xs text-center w-full mt-2 text-gray-400 underline"
on:click={async () => {
localStorage.removeItem('token');
location.href = '/auth';
}}>{$i18n.t('Sign Out')}</button
>
</div>
</div>
</div>
</div>
</div>
<AccountPending />
{:else if localDBChats.length > 0}
<div class="fixed w-full h-full flex z-50">
<div
......
<script lang="ts">
import Chat from '$lib/components/chat/Chat.svelte';
import Help from '$lib/components/layout/Help.svelte';
</script>
<Help />
<Chat />
......@@ -14,7 +14,11 @@
</title>
</svelte:head>
<div class=" flex flex-col w-full min-h-screen max-h-screen">
<div
class=" flex flex-col w-full min-h-screen max-h-screen {$showSidebar
? 'md:max-w-[calc(100%-260px)]'
: ''}"
>
<div class=" px-4 pt-3 mt-0.5 mb-1">
<div class=" flex items-center gap-1">
<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-start flex flex-none items-center">
......@@ -30,29 +34,29 @@
</div>
</button>
</div>
<div class="flex items-center text-xl font-semibold">{$i18n.t('Workspace')}</div>
<div class="flex items-center text-xl font-semibold">{$i18n.t('Admin Panel')}</div>
</div>
</div>
<!-- <div class="px-4 my-1">
<div class="px-4 my-1">
<div
class="flex scrollbar-none overflow-x-auto w-fit text-center text-sm font-medium rounded-xl bg-transparent/10 p-1"
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/models')
class="min-w-fit rounded-lg p-1.5 px-3 {['/admin', '/admin/'].includes($page.url.pathname)
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/models">{$i18n.t('Models')}</a
href="/admin">{$i18n.t('Dashboard')}</a
>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/prompts')
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/admin/settings')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/prompts">{$i18n.t('Prompts')}</a
href="/admin/settings">{$i18n.t('Settings')}</a
>
<a
<!-- <a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/documents')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
......@@ -66,9 +70,9 @@
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/playground">{$i18n.t('Playground')}</a
>
> -->
</div>
</div> -->
</div>
<hr class=" my-2 dark:border-gray-850" />
......
......@@ -11,12 +11,8 @@
import { toast } from 'svelte-sonner';
import { updateUserRole, getUsers, deleteUserById } from '$lib/apis/users';
import { getSignUpEnabledStatus, toggleSignUpEnabledStatus } from '$lib/apis/auths';
import MenuLines from '$lib/components/icons/MenuLines.svelte';
import EditUserModal from '$lib/components/admin/EditUserModal.svelte';
import SettingsModal from '$lib/components/admin/SettingsModal.svelte';
import Pagination from '$lib/components/common/Pagination.svelte';
import ChatBubbles from '$lib/components/icons/ChatBubbles.svelte';
import Tooltip from '$lib/components/common/Tooltip.svelte';
......@@ -34,7 +30,6 @@
let page = 1;
let showSettingsModal = false;
let showAddUserModal = false;
let showUserChatsModal = false;
......@@ -100,7 +95,6 @@
}}
/>
<UserChatsModal bind:show={showUserChatsModal} user={selectedUser} />
<SettingsModal bind:show={showSettingsModal} />
{#if loaded}
<div class="mt-0.5 mb-3 gap-1 flex flex-col md:flex-row justify-between">
......@@ -118,7 +112,7 @@
/>
<div class="flex gap-0.5">
<Tooltip content="Add User">
<Tooltip content={$i18n.t('Add User')}>
<button
class=" px-2 py-2 rounded-xl border border-gray-200 dark:border-gray-600 dark:border-0 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition font-medium text-sm flex items-center space-x-1"
on:click={() => {
......@@ -137,28 +131,6 @@
</svg>
</button>
</Tooltip>
<Tooltip content={$i18n.t('Admin Settings')}>
<button
class=" px-2 py-2 rounded-xl border border-gray-200 dark:border-gray-600 dark:border-0 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition font-medium text-sm flex items-center space-x-1"
on:click={() => {
showSettingsModal = !showSettingsModal;
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
fill-rule="evenodd"
d="M6.955 1.45A.5.5 0 0 1 7.452 1h1.096a.5.5 0 0 1 .497.45l.17 1.699c.484.12.94.312 1.356.562l1.321-1.081a.5.5 0 0 1 .67.033l.774.775a.5.5 0 0 1 .034.67l-1.08 1.32c.25.417.44.873.561 1.357l1.699.17a.5.5 0 0 1 .45.497v1.096a.5.5 0 0 1-.45.497l-1.699.17c-.12.484-.312.94-.562 1.356l1.082 1.322a.5.5 0 0 1-.034.67l-.774.774a.5.5 0 0 1-.67.033l-1.322-1.08c-.416.25-.872.44-1.356.561l-.17 1.699a.5.5 0 0 1-.497.45H7.452a.5.5 0 0 1-.497-.45l-.17-1.699a4.973 4.973 0 0 1-1.356-.562L4.108 13.37a.5.5 0 0 1-.67-.033l-.774-.775a.5.5 0 0 1-.034-.67l1.08-1.32a4.971 4.971 0 0 1-.561-1.357l-1.699-.17A.5.5 0 0 1 1 8.548V7.452a.5.5 0 0 1 .45-.497l1.699-.17c.12-.484.312-.94.562-1.356L2.629 4.107a.5.5 0 0 1 .034-.67l.774-.774a.5.5 0 0 1 .67-.033L5.43 3.71a4.97 4.97 0 0 1 1.356-.561l.17-1.699ZM6 8c0 .538.212 1.026.558 1.385l.057.057a2 2 0 0 0 2.828-2.828l-.058-.056A2 2 0 0 0 6 8Z"
clip-rule="evenodd"
/>
</svg>
</button>
</Tooltip>
</div>
</div>
</div>
......@@ -189,7 +161,7 @@
}
})
.slice((page - 1) * 20, page * 20) as user}
<tr class="bg-white border-b dark:bg-gray-900 dark:border-gray-700 text-xs">
<tr class="bg-white border-b dark:bg-gray-900 dark:border-gray-850 text-xs">
<td class="px-3 py-2 min-w-[7rem] w-28">
<button
class=" flex items-center gap-2 text-xs px-3 py-0.5 rounded-lg {user.role ===
......@@ -303,6 +275,31 @@
</svg>
</button>
</Tooltip>
{:else}
<Tooltip content={$i18n.t('Edit User')}>
<button
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
on:click={async () => {
showEditUserModal = !showEditUserModal;
selectedUser = user;
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125"
/>
</svg>
</button>
</Tooltip>
{/if}
</div>
</td>
......
<script>
import Settings from '$lib/components/admin/Settings.svelte';
</script>
<Settings />
......@@ -14,7 +14,11 @@
</title>
</svelte:head>
<div class=" flex flex-col w-full min-h-screen max-h-screen">
<div
class=" flex flex-col w-full min-h-screen max-h-screen {$showSidebar
? 'md:max-w-[calc(100%-260px)]'
: ''}"
>
<div class=" px-4 pt-3 mt-0.5 mb-1">
<div class=" flex items-center gap-1">
<div class="{$showSidebar ? 'md:hidden' : ''} mr-1 self-start flex flex-none items-center">
......@@ -61,6 +65,15 @@
{$i18n.t('Documents')}
</a>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/tools')
? 'bg-gray-50 dark:bg-gray-850'
: ''} transition"
href="/workspace/tools"
>
{$i18n.t('Tools')}
</a>
<a
class="min-w-fit rounded-lg p-1.5 px-3 {$page.url.pathname.includes('/workspace/playground')
? 'bg-gray-50 dark:bg-gray-850'
......
......@@ -2,7 +2,7 @@
import { v4 as uuidv4 } from 'uuid';
import { toast } from 'svelte-sonner';
import { goto } from '$app/navigation';
import { settings, user, config, models } from '$lib/stores';
import { settings, user, config, models, tools } from '$lib/stores';
import { onMount, tick, getContext } from 'svelte';
import { addNewModel, getModelById, getModelInfos } from '$lib/apis/models';
......@@ -10,6 +10,10 @@
import AdvancedParams from '$lib/components/chat/Settings/Advanced/AdvancedParams.svelte';
import Checkbox from '$lib/components/common/Checkbox.svelte';
import Tags from '$lib/components/common/Tags.svelte';
import Knowledge from '$lib/components/workspace/Models/Knowledge.svelte';
import ToolsSelector from '$lib/components/workspace/Models/ToolsSelector.svelte';
import { stringify } from 'postcss';
const i18n = getContext('i18n');
......@@ -29,11 +33,6 @@
let id = '';
let name = '';
let params = {};
let capabilities = {
vision: true
};
let info = {
id: '',
base_model_id: null,
......@@ -52,14 +51,21 @@
}
};
let params = {};
let capabilities = {
vision: true
};
let toolIds = [];
let knowledge = [];
$: if (name) {
id = name.replace(/\s+/g, '-').toLowerCase();
}
let baseModel = null;
$: {
baseModel = $models.find((m) => m.id === info.base_model_id);
console.log(baseModel);
const addUsage = (base_model_id) => {
const baseModel = $models.find((m) => m.id === base_model_id);
if (baseModel) {
if (baseModel.owned_by === 'openai') {
capabilities.usage = baseModel.info?.meta?.capabilities?.usage ?? false;
......@@ -68,7 +74,7 @@
}
capabilities = capabilities;
}
}
};
const submitHandler = async () => {
loading = true;
......@@ -76,7 +82,29 @@
info.id = id;
info.name = name;
info.meta.capabilities = capabilities;
if (knowledge.length > 0) {
info.meta.knowledge = knowledge;
} else {
if (info.meta.knowledge) {
delete info.meta.knowledge;
}
}
if (toolIds.length > 0) {
info.meta.toolIds = toolIds;
} else {
if (info.meta.toolIds) {
delete info.meta.toolIds;
}
}
info.params.stop = params.stop ? params.stop.split(',').filter((s) => s.trim()) : null;
Object.keys(info.params).forEach((key) => {
if (info.params[key] === '' || info.params[key] === null) {
delete info.params[key];
}
});
if ($models.find((m) => m.id === info.id)) {
toast.error(
......@@ -101,9 +129,9 @@
});
if (res) {
await models.set(await getModels(localStorage.token));
toast.success('Model created successfully!');
await goto('/workspace/models');
await models.set(await getModels(localStorage.token));
}
}
......@@ -117,27 +145,42 @@
id = model.id;
if (model.info.base_model_id) {
const base_model = $models
.filter((m) => !m?.preset)
.find((m) =>
[model.info.base_model_id, `${model.info.base_model_id}:latest`].includes(m.id)
);
console.log('base_model', base_model);
if (!base_model) {
model.info.base_model_id = null;
} else if ($models.find((m) => m.id === `${model.info.base_model_id}:latest`)) {
model.info.base_model_id = `${model.info.base_model_id}:latest`;
}
}
params = { ...params, ...model?.info?.params };
params.stop = params?.stop ? (params?.stop ?? []).join(',') : null;
capabilities = { ...capabilities, ...(model?.info?.meta?.capabilities ?? {}) };
toolIds = model?.info?.meta?.toolIds ?? [];
info = {
...info,
...model.info
};
console.log(info);
};
onMount(async () => {
window.addEventListener('message', async (event) => {
if (
![
'https://ollamahub.com',
'https://www.ollamahub.com',
'https://openwebui.com',
'https://www.openwebui.com',
'http://localhost:5173'
].includes(event.origin)
!['https://openwebui.com', 'https://www.openwebui.com', 'http://localhost:5173'].includes(
event.origin
)
)
return;
......@@ -230,7 +273,7 @@
<button
class="flex space-x-1"
on:click={() => {
history.back();
goto('/workspace/models');
}}
>
<div class=" self-center">
......@@ -249,7 +292,7 @@
</div>
<div class=" self-center font-medium text-sm">{$i18n.t('Back')}</div>
</button>
<!-- <hr class="my-3 dark:border-gray-700" /> -->
<!-- <hr class="my-3 dark:border-gray-850" /> -->
<form
class="flex flex-col max-w-2xl mx-auto mt-4 mb-10"
......@@ -262,7 +305,7 @@
<button
class=" {info.meta.profile_image_url
? ''
: 'p-6'} rounded-full dark:bg-gray-700 border border-dashed border-gray-200"
: 'p-4'} rounded-full dark:bg-gray-700 border border-dashed border-gray-200 flex items-center"
type="button"
on:click={() => {
filesInputElement.click();
......@@ -272,7 +315,7 @@
<img
src={info.meta.profile_image_url}
alt="modelfile profile"
class=" rounded-full w-20 h-20 object-cover"
class=" rounded-full size-16 object-cover"
/>
{:else}
<svg
......@@ -328,6 +371,9 @@
class="px-3 py-1.5 text-sm w-full bg-transparent border dark:border-gray-600 outline-none rounded-lg"
placeholder="Select a base model (e.g. llama3, gpt-4o)"
bind:value={info.base_model_id}
on:change={(e) => {
addUsage(e.target.value);
}}
required
>
<option value={null} class=" text-gray-900">{$i18n.t('Select a base model')}</option>
......@@ -338,18 +384,40 @@
</div>
</div>
<div class="my-2">
<div class=" text-sm font-semibold mb-2">{$i18n.t('Description')}</div>
<div class="my-1">
<div class="flex w-full justify-between items-center mb-1">
<div class=" self-center text-sm font-semibold">{$i18n.t('Description')}</div>
<div>
<button
class="p-1 text-xs flex rounded transition"
type="button"
on:click={() => {
if (info.meta.description === null) {
info.meta.description = '';
} else {
info.meta.description = null;
}
}}
>
{#if info.meta.description === null}
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else}
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if}
</button>
</div>
{#if info.meta.description !== null}
<input
class="px-3 py-1.5 text-sm w-full bg-transparent border dark:border-gray-600 outline-none rounded-lg"
placeholder={$i18n.t('Add a short description about what this model does')}
bind:value={info.meta.description}
/>
</div>
{/if}
</div>
<hr class=" dark:border-gray-850 my-1" />
<div class="my-2">
<div class="flex w-full justify-between">
<div class=" self-center text-sm font-semibold">{$i18n.t('Model Params')}</div>
......@@ -391,6 +459,7 @@
{#if showAdvanced}
<div class="my-2">
<AdvancedParams
admin={true}
bind:params
on:change={(e) => {
info.params = { ...info.params, ...params };
......@@ -401,7 +470,9 @@
</div>
</div>
<div class="my-2">
<hr class=" dark:border-gray-850 my-1" />
<div class="my-1">
<div class="flex w-full justify-between items-center">
<div class="flex w-full justify-between items-center">
<div class=" self-center text-sm font-semibold">{$i18n.t('Prompt suggestions')}</div>
......@@ -492,7 +563,15 @@
</div>
<div class="my-2">
<div class="flex w-full justify-between">
<Knowledge bind:knowledge />
</div>
<div class="my-2">
<ToolsSelector bind:selectedToolIds={toolIds} tools={$tools} />
</div>
<div class="my-1">
<div class="flex w-full justify-between mb-1">
<div class=" self-center text-sm font-semibold">{$i18n.t('Capabilities')}</div>
</div>
<div class="flex flex-col">
......@@ -505,7 +584,7 @@
}}
/>
<div class=" py-1.5 text-sm w-full capitalize">
<div class=" py-0.5 text-sm w-full capitalize">
{$i18n.t(capability)}
</div>
</div>
......@@ -513,7 +592,30 @@
</div>
</div>
<div class="my-2 text-gray-500">
<div class="my-1">
<div class="flex w-full justify-between items-center">
<div class=" self-center text-sm font-semibold">{$i18n.t('Tags')}</div>
</div>
<div class="mt-2">
<Tags
tags={info?.meta?.tags ?? []}
deleteTag={(tagName) => {
info.meta.tags = info.meta.tags.filter((tag) => tag.name !== tagName);
}}
addTag={(tagName) => {
console.log(tagName);
if (!(info?.meta?.tags ?? null)) {
info.meta.tags = [{ name: tagName }];
} else {
info.meta.tags = [...info.meta.tags, { name: tagName }];
}
}}
/>
</div>
</div>
<div class="my-2 text-gray-300 dark:text-gray-700">
<div class="flex w-full justify-between mb-2">
<div class=" self-center text-sm font-semibold">{$i18n.t('JSON Preview')}</div>
......
......@@ -5,7 +5,7 @@
import { onMount, getContext } from 'svelte';
import { page } from '$app/stores';
import { settings, user, config, models } from '$lib/stores';
import { settings, user, config, models, tools } from '$lib/stores';
import { splitStream } from '$lib/utils';
import { getModelInfos, updateModelById } from '$lib/apis/models';
......@@ -13,6 +13,9 @@
import AdvancedParams from '$lib/components/chat/Settings/Advanced/AdvancedParams.svelte';
import { getModels } from '$lib/apis';
import Checkbox from '$lib/components/common/Checkbox.svelte';
import Tags from '$lib/components/common/Tags.svelte';
import Knowledge from '$lib/components/workspace/Models/Knowledge.svelte';
import ToolsSelector from '$lib/components/workspace/Models/ToolsSelector.svelte';
const i18n = getContext('i18n');
......@@ -44,7 +47,8 @@
meta: {
profile_image_url: '/favicon.png',
description: '',
suggestion_prompts: null
suggestion_prompts: null,
tags: []
},
params: {
system: ''
......@@ -52,25 +56,49 @@
};
let params = {};
let capabilities = {
vision: true
};
let knowledge = [];
let toolIds = [];
const updateHandler = async () => {
loading = true;
info.id = id;
info.name = name;
info.meta.capabilities = capabilities;
if (knowledge.length > 0) {
info.meta.knowledge = knowledge;
} else {
if (info.meta.knowledge) {
delete info.meta.knowledge;
}
}
if (toolIds.length > 0) {
info.meta.toolIds = toolIds;
} else {
if (info.meta.toolIds) {
delete info.meta.toolIds;
}
}
info.params.stop = params.stop ? params.stop.split(',').filter((s) => s.trim()) : null;
Object.keys(info.params).forEach((key) => {
if (info.params[key] === '' || info.params[key] === null) {
delete info.params[key];
}
});
const res = await updateModelById(localStorage.token, info.id, info);
if (res) {
await models.set(await getModels(localStorage.token));
toast.success('Model updated successfully');
await goto('/workspace/models');
await models.set(await getModels(localStorage.token));
}
loading = false;
......@@ -105,7 +133,19 @@
}
params = { ...params, ...model?.info?.params };
params.stop = params?.stop ? (params?.stop ?? []).join(',') : null;
params.stop = params?.stop
? (typeof params.stop === 'string' ? params.stop.split(',') : params?.stop ?? []).join(
','
)
: null;
if (model?.info?.meta?.knowledge) {
knowledge = [...model?.info?.meta?.knowledge];
}
if (model?.info?.meta?.toolIds) {
toolIds = [...model?.info?.meta?.toolIds];
}
if (model?.owned_by === 'openai') {
capabilities.usage = false;
......@@ -114,6 +154,7 @@
if (model?.info?.meta?.capabilities) {
capabilities = { ...capabilities, ...model?.info?.meta?.capabilities };
}
console.log(model);
} else {
goto('/workspace/models');
......@@ -193,7 +234,7 @@
<button
class="flex space-x-1"
on:click={() => {
history.back();
goto('/workspace/models');
}}
>
<div class=" self-center">
......@@ -223,26 +264,26 @@
<div class="flex justify-center my-4">
<div class="self-center">
<button
class=" {info?.meta?.profile_image_url
class=" {info.meta.profile_image_url
? ''
: 'p-6'} rounded-full dark:bg-gray-700 border border-dashed border-gray-200"
: 'p-4'} rounded-full dark:bg-gray-700 border border-dashed border-gray-200 flex items-center"
type="button"
on:click={() => {
filesInputElement.click();
}}
>
{#if info?.meta?.profile_image_url}
{#if info.meta.profile_image_url}
<img
src={info?.meta?.profile_image_url}
src={info.meta.profile_image_url}
alt="modelfile profile"
class=" rounded-full w-20 h-20 object-cover"
class=" rounded-full size-16 object-cover"
/>
{:else}
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="currentColor"
class="w-8"
class="size-8"
>
<path
fill-rule="evenodd"
......@@ -255,9 +296,9 @@
</div>
</div>
<div class="my-2 flex space-x-2">
<div class="mt-2 my-1 flex space-x-2">
<div class="flex-1">
<div class=" text-sm font-semibold mb-2">{$i18n.t('Name')}*</div>
<div class=" text-sm font-semibold mb-1">{$i18n.t('Name')}*</div>
<div>
<input
......@@ -270,7 +311,7 @@
</div>
<div class="flex-1">
<div class=" text-sm font-semibold mb-2">{$i18n.t('Model ID')}*</div>
<div class=" text-sm font-semibold mb-1">{$i18n.t('Model ID')}*</div>
<div>
<input
......@@ -285,8 +326,8 @@
</div>
{#if model.preset}
<div class="my-2">
<div class=" text-sm font-semibold mb-2">{$i18n.t('Base Model (From)')}</div>
<div class="my-1">
<div class=" text-sm font-semibold mb-1">{$i18n.t('Base Model (From)')}</div>
<div>
<select
......@@ -304,18 +345,40 @@
</div>
{/if}
<div class="my-2">
<div class=" text-sm font-semibold mb-2">{$i18n.t('Description')}</div>
<div class="my-1">
<div class="flex w-full justify-between items-center">
<div class=" self-center text-sm font-semibold">{$i18n.t('Description')}</div>
<button
class="p-1 text-xs flex rounded transition"
type="button"
on:click={() => {
if (info.meta.description === null) {
info.meta.description = '';
} else {
info.meta.description = null;
}
}}
>
{#if info.meta.description === null}
<span class="ml-2 self-center">{$i18n.t('Default')}</span>
{:else}
<span class="ml-2 self-center">{$i18n.t('Custom')}</span>
{/if}
</button>
</div>
<div>
{#if info.meta.description !== null}
<input
class="px-3 py-1.5 text-sm w-full bg-transparent border dark:border-gray-600 outline-none rounded-lg"
class="mt-1 px-3 py-1.5 text-sm w-full bg-transparent border dark:border-gray-600 outline-none rounded-lg"
placeholder={$i18n.t('Add a short description about what this model does')}
bind:value={info.meta.description}
/>
</div>
{/if}
</div>
<hr class=" dark:border-gray-850 my-1" />
<div class="my-2">
<div class="flex w-full justify-between">
<div class=" self-center text-sm font-semibold">{$i18n.t('Model Params')}</div>
......@@ -359,6 +422,7 @@
{#if showAdvanced}
<div class="my-2">
<AdvancedParams
admin={true}
bind:params
on:change={(e) => {
info.params = { ...info.params, ...params };
......@@ -369,6 +433,8 @@
</div>
</div>
<hr class=" dark:border-gray-850 my-1" />
<div class="my-2">
<div class="flex w-full justify-between items-center">
<div class="flex w-full justify-between items-center">
......@@ -460,7 +526,15 @@
</div>
<div class="my-2">
<div class="flex w-full justify-between">
<Knowledge bind:knowledge />
</div>
<div class="my-2">
<ToolsSelector bind:selectedToolIds={toolIds} tools={$tools} />
</div>
<div class="my-2">
<div class="flex w-full justify-between mb-1">
<div class=" self-center text-sm font-semibold">{$i18n.t('Capabilities')}</div>
</div>
<div class="flex flex-col">
......@@ -473,7 +547,7 @@
}}
/>
<div class=" py-1.5 text-sm w-full capitalize">
<div class=" py-0.5 text-sm w-full capitalize">
{$i18n.t(capability)}
</div>
</div>
......@@ -481,7 +555,30 @@
</div>
</div>
<div class="my-2 text-gray-500">
<div class="my-1">
<div class="flex w-full justify-between items-center">
<div class=" self-center text-sm font-semibold">{$i18n.t('Tags')}</div>
</div>
<div class="mt-2">
<Tags
tags={info?.meta?.tags ?? []}
deleteTag={(tagName) => {
info.meta.tags = info.meta.tags.filter((tag) => tag.name !== tagName);
}}
addTag={(tagName) => {
console.log(tagName);
if (!(info?.meta?.tags ?? null)) {
info.meta.tags = [{ name: tagName }];
} else {
info.meta.tags = [...info.meta.tags, { name: tagName }];
}
}}
/>
</div>
</div>
<div class="my-2 text-gray-300 dark:text-gray-700">
<div class="flex w-full justify-between mb-2">
<div class=" self-center text-sm font-semibold">{$i18n.t('JSON Preview')}</div>
......
......@@ -57,13 +57,9 @@
onMount(async () => {
window.addEventListener('message', async (event) => {
if (
![
'https://ollamahub.com',
'https://www.ollamahub.com',
'https://openwebui.com',
'https://www.openwebui.com',
'http://localhost:5173'
].includes(event.origin)
!['https://openwebui.com', 'https://www.openwebui.com', 'http://localhost:5173'].includes(
event.origin
)
)
return;
const prompt = JSON.parse(event.data);
......
<script>
import Tools from '$lib/components/workspace/Tools.svelte';
</script>
<Tools />
<script>
import { goto } from '$app/navigation';
import { createNewTool, getTools } from '$lib/apis/tools';
import ToolkitEditor from '$lib/components/workspace/Tools/ToolkitEditor.svelte';
import { tools } from '$lib/stores';
import { onMount } from 'svelte';
import { toast } from 'svelte-sonner';
let mounted = false;
let clone = false;
let tool = null;
const saveHandler = async (data) => {
console.log(data);
const res = await createNewTool(localStorage.token, {
id: data.id,
name: data.name,
meta: data.meta,
content: data.content
}).catch((error) => {
toast.error(error);
return null;
});
if (res) {
toast.success('Tool created successfully');
tools.set(await getTools(localStorage.token));
await goto('/workspace/tools');
}
};
onMount(() => {
if (sessionStorage.tool) {
tool = JSON.parse(sessionStorage.tool);
sessionStorage.removeItem('tool');
console.log(tool);
clone = true;
}
mounted = true;
});
</script>
{#if mounted}
<ToolkitEditor
id={tool?.id ?? ''}
name={tool?.name ?? ''}
meta={tool?.meta ?? { description: '' }}
content={tool?.content ?? ''}
{clone}
on:save={(e) => {
saveHandler(e.detail);
}}
/>
{/if}
<script>
import { goto } from '$app/navigation';
import { page } from '$app/stores';
import { getToolById, getTools, updateToolById } from '$lib/apis/tools';
import Spinner from '$lib/components/common/Spinner.svelte';
import ToolkitEditor from '$lib/components/workspace/Tools/ToolkitEditor.svelte';
import { tools } from '$lib/stores';
import { onMount } from 'svelte';
import { toast } from 'svelte-sonner';
let tool = null;
const saveHandler = async (data) => {
console.log(data);
const res = await updateToolById(localStorage.token, tool.id, {
id: data.id,
name: data.name,
meta: data.meta,
content: data.content
}).catch((error) => {
toast.error(error);
return null;
});
if (res) {
toast.success('Tool updated successfully');
tools.set(await getTools(localStorage.token));
// await goto('/workspace/tools');
}
};
onMount(async () => {
console.log('mounted');
const id = $page.url.searchParams.get('id');
if (id) {
tool = await getToolById(localStorage.token, id).catch((error) => {
toast.error(error);
goto('/workspace/tools');
return null;
});
console.log(tool);
}
});
</script>
{#if tool}
<ToolkitEditor
edit={true}
id={tool.id}
name={tool.name}
meta={tool.meta}
content={tool.content}
on:save={(e) => {
saveHandler(e.detail);
}}
/>
{:else}
<div class="flex items-center justify-center h-full">
<div class=" pb-16">
<Spinner />
</div>
</div>
{/if}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment