From 204484d8e728f086ea3cf07580bf7daef0c98b47 Mon Sep 17 00:00:00 2001 From: ByoungGyu Lee Date: Sat, 20 Sep 2025 20:40:50 +0900 Subject: [PATCH 01/33] i18n(ko-KR): Updated korean translations. --- src/lib/i18n/locales/ko-KR/translation.json | 74 ++++++++++----------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 537e1002ce..5eb1fc752d 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -14,14 +14,14 @@ "{{COUNT}} extracted lines": "", "{{COUNT}} hidden lines": "숨겨진 줄 {{COUNT}}개", "{{COUNT}} Replies": "답글 {{COUNT}}개", - "{{COUNT}} Sources": "", + "{{COUNT}} Sources": "{{COUNT}} 소스", "{{COUNT}} words": "{{COUNT}} 단어", "{{LOCALIZED_DATE}} at {{LOCALIZED_TIME}}": "", - "{{model}} download has been canceled": "", + "{{model}} download has been canceled": "{{model}} 다운로드가 취소되었습니다.", "{{user}}'s Chats": "{{user}}의 채팅", "{{webUIName}} Backend Required": "{{webUIName}} 백엔드가 필요합니다.", "*Prompt node ID(s) are required for image generation": "이미지 생성에는 프롬프트 노드 ID가 필요합니다.", - "1 Source": "", + "1 Source": "소스1", "A new version (v{{LATEST_VERSION}}) is now available.": "새로운 버전 (v{{LATEST_VERSION}})을 사용할 수 있습니다.", "A task model is used when performing tasks such as generating titles for chats and web search queries": "작업 모델은 채팅 및 웹 검색 쿼리에 대한 제목 생성 등의 작업 수행 시 사용됩니다.", "a user": "사용자", @@ -32,10 +32,10 @@ "Accessible to all users": "모든 사용자가 이용할 수 있음", "Account": "계정", "Account Activation Pending": "계정 활성화 대기", - "accurate": "", + "accurate": "정확도", "Accurate information": "정확한 정보", - "Action": "액션", - "Action not found": "", + "Action": "작업", + "Action not found": "작업을 찾을 수 없습니다.", "Action Required for Chat Log Storage": "채팅 로그 저장을 위해 조치가 필요합니다", "Actions": "작업", "Activate": "활성화", @@ -186,8 +186,8 @@ "Beta": "베타", "Bing Search V7 Endpoint": "Bing Search V7 엔드포인트", "Bing Search V7 Subscription Key": "Bing Search V7 구독 키", - "Bio": "", - "Birth Date": "", + "Bio": "소개", + "Birth Date": "생년월일", "BM25 Weight": "BM25 가중치", "Bocha Search API Key": "Bocha Search API 키", "Bold": "굵게", @@ -285,7 +285,7 @@ "ComfyUI Base URL is required.": "ComfyUI 기본 URL이 필요합니다.", "ComfyUI Workflow": "ComfyUI 워크플로", "ComfyUI Workflow Nodes": "ComfyUI 워크플로 노드", - "Comma separated Node Ids (e.g. 1 or 1,2)": "", + "Comma separated Node Ids (e.g. 1 or 1,2)": "쉼표로 구분된 노드 아이디(예: 1 또는 1,2)", "Command": "명령", "Comment": "주석", "Completions": "완성됨", @@ -295,7 +295,7 @@ "Configure": "구성", "Confirm": "확인", "Confirm Password": "비밀번호 확인", - "Confirm your action": "액션 확인", + "Confirm your action": "작업 확인", "Confirm your new password": "새로운 비밀번호를 한 번 더 입력해 주세요", "Confirm Your Password": "비밀번호를 확인해주세요", "Connect to your own OpenAI compatible API endpoints.": "OpenAI 호환 API 엔드포인트에 연결합니다.", @@ -358,7 +358,7 @@ "Custom Parameter Value": "사용자 정의 매개변수 값", "Danger Zone": "위험 기능", "Dark": "다크", - "Data Controls": "", + "Data Controls": "데이터 제어", "Database": "데이터베이스", "Datalab Marker API": "Datalab Marker API", "Datalab Marker API Key required.": "Datalab Marker API 키가 필요합니다.", @@ -368,10 +368,10 @@ "Default": "기본값", "Default (Open AI)": "기본값 (Open AI)", "Default (SentenceTransformers)": "기본값 (SentenceTransformers)", - "Default action buttons will be used.": "기본 액션 버튼이 사용됩니다.", + "Default action buttons will be used.": "기본 작업 버튼이 사용됩니다.", "Default description enabled": "기본 설명 활성화됨", "Default Features": "", - "Default Filters": "", + "Default Filters": "기본 필터", "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model's built-in tool-calling capabilities, but requires the model to inherently support this feature.": "기본 모드는 실행 전에 도구를 한 번 호출하여 더 다양한 모델에서 작동합니다. 기본 모드는 모델에 내장된 도구 호출 기능을 활용하지만, 모델이 이 기능을 본질적으로 지원해야 합니다.", "Default Model": "기본 모델", "Default model updated": "기본 모델이 업데이트되었습니다.", @@ -612,8 +612,8 @@ "Enter Top K Reranker": "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 value": "", - "Enter value (true/false)": "", + "Enter value": "값 입력", + "Enter value (true/false)": "값 입력(true/false)", "Enter Yacy Password": "Yacy 비밀번호 입력", "Enter Yacy URL (e.g. http://yacy.example.com:8090)": "Yacy URL 입력(예: http://yacy.example.com:8090)", "Enter Yacy Username": "Yacy 사용자 이름 입력", @@ -621,7 +621,7 @@ "Enter your current password": "현재 비밀번호를 입력해 주세요", "Enter Your Email": "이메일 입력", "Enter Your Full Name": "전체 이름 입력", - "Enter your gender": "", + "Enter your gender": "성별 입력", "Enter your message": "메세지 입력", "Enter your name": "이름 입력", "Enter Your Name": "이름 입력", @@ -674,7 +674,7 @@ "External": "외부", "External Document Loader URL required.": "외부 문서 로더 URL이 필요합니다.", "External Task Model": "외부 작업 모델", - "External Tools": "", + "External Tools": "외부 도구", "External Web Loader API Key": "외부 웹 로더 API 키", "External Web Loader URL": "외부 웹 로더 URL", "External Web Search API Key": "외부 웹 검색 API 키", @@ -1013,7 +1013,7 @@ "More": "더보기", "More Concise": "더 간결하게", "More Options": "추가 설정", - "Move": "", + "Move": "이동", "Name": "이름", "Name and ID are required, please fill them out": "", "Name your knowledge base": "지식 기반 이름을 지정하세요", @@ -1048,7 +1048,7 @@ "No models found": "모델 없음", "No models selected": "모델 선택 안됨", "No Notes": "노트 없음", - "No notes found": "", + "No notes found": "노트를 찾을 수 없음", "No results": "결과 없음", "No results found": "결과 없음", "No search query generated": "검색어가 생성되지 않았습니다.", @@ -1062,7 +1062,7 @@ "None": "없음", "Not factually correct": "사실상 맞지 않음", "Not helpful": "도움이 되지않음", - "Note": "", + "Note": "노트", "Note deleted successfully": "노트가 성공적으로 삭제되었습니다", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "참고: 최소 점수를 설정하면, 검색 결과로 최소 점수 이상의 점수를 가진 문서만 반환합니다.", "Notes": "노트", @@ -1095,7 +1095,7 @@ "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "이런! 지원되지 않는 방식(프론트엔드만)을 사용하고 계십니다. 백엔드에서 WebUI를 제공해주세요.", "Open file": "파일 열기", "Open in full screen": "전체화면으로 열기", - "Open link": "", + "Open link": "링크 열기", "Open modal to configure connection": "연결 설정 열기", "Open Modal To Manage Floating Quick Actions": "", "Open Modal To Manage Image Compression": "", @@ -1166,7 +1166,7 @@ "Playwright WebSocket URL": "Playwright WebSocket URL", "Please carefully review the following warnings:": "다음 주의를 조심히 확인해주십시오", "Please do not close the settings page while loading the model.": "모델을 로드하는 동안 설정 페이지를 닫지 마세요.", - "Please enter a message or attach a file.": "", + "Please enter a message or attach a file.": "메시지를 입력하거나 파일을 첨부해 주세요.", "Please enter a prompt": "프롬프트를 입력해주세요", "Please enter a valid path": "유효한 경로를 입력하세요", "Please enter a valid URL": "유효한 URL을 입력하세요", @@ -1258,7 +1258,7 @@ "Retrieval Query Generation": "검색 쿼리 생성", "Retrieved {{count}} sources": "", "Retrieved {{count}} sources_other": "", - "Retrieved 1 source": "", + "Retrieved 1 source": "검색된 source 1개", "Rich Text Input for Chat": "다양한 텍스트 서식 사용", "RK": "RK", "Role": "역할", @@ -1312,7 +1312,7 @@ "Seed": "시드", "Select": "", "Select a base model": "기본 모델 선택", - "Select a base model (e.g. llama3, gpt-4o)": "기본 모델 선택 (예시: llama3, gpt-4o)", + "Select a base model (e.g. llama3, gpt-4o)": "기본 모델 선택 (예: llama3, gpt-4o)", "Select a conversation to preview": "대화를 선택하여 미리 보기", "Select a engine": "엔진 선택", "Select a function": "함수 선택", @@ -1320,7 +1320,7 @@ "Select a language": "언어 선택", "Select a mode": "모드 선택", "Select a model": "모델 선택", - "Select a model (optional)": "모델 선택 (선택 사항)", + "Select a model (optional)": "모델 선택 (선택사항)", "Select a pipeline": "파이프라인 선택", "Select a pipeline url": "파이프라인 URL 선택", "Select a reranking model engine": "", @@ -1332,8 +1332,8 @@ "Select an embedding model engine": "", "Select an engine": "", "Select an Ollama instance": "Ollama 인스턴스 선택", - "Select an output format": "", - "Select dtype": "", + "Select an output format": "출력 형식 선택", + "Select dtype": "dtype 선택", "Select Engine": "엔진 선택", "Select how to split message text for TTS requests": "", "Select Knowledge": "지식 기반 선택", @@ -1401,7 +1401,7 @@ "sk-1234": "", "Skip Cache": "캐시 무시", "Skip the cache and re-run the inference. Defaults to False.": "캐시를 무시하고 추론을 다시 실행합니다. 기본값은 False입니다.", - "Something went wrong :/": "", + "Something went wrong :/": "무언가 잘못 되었습니다", "Sonar": "", "Sonar Deep Research": "", "Sonar Pro": "", @@ -1416,8 +1416,8 @@ "Speech-to-Text Engine": "음성-텍스트 변환 엔진", "standard": "", "Start of the channel": "채널 시작", - "Start Tag": "", - "Status Updates": "", + "Start Tag": "시작 태그", + "Status Updates": "상태 업데이트", "STDOUT/STDERR": "STDOUT/STDERR", "Stop": "정지", "Stop Generating": "생성 중지", @@ -1432,7 +1432,7 @@ "Stylized PDF Export": "서식이 적용된 PDF 내보내기", "Subtitle (e.g. about the Roman Empire)": "자막 (예: 로마 황제)", "Success": "성공", - "Successfully imported {{userCount}} users.": "", + "Successfully imported {{userCount}} users.": "성공적으로 {{userCount}}명의 사용자를 가져왔습니다.", "Successfully updated.": "성공적으로 업데이트되었습니다.", "Suggest a change": "변경 제안", "Suggested": "제안", @@ -1508,8 +1508,8 @@ "Thought for {{DURATION}} seconds": "{{DURATION}}초 동안 생각함", "Thought for less than a second": "1초 미만 동안 생각함", "Thread": "스레드", - "Tika": "티카(Tika)", - "Tika Server URL required.": "티카 서버 URL이 필요합니다.", + "Tika": "", + "Tika Server URL required.": "Tika 서버 URL이 필요합니다.", "Tiktoken": "틱토큰 (Tiktoken)", "Title": "제목", "Title (e.g. Tell me a fun fact)": "제목 (예: 재미있는 사실을 알려주세요.)", @@ -1528,7 +1528,7 @@ "To select toolkits here, add them to the \"Tools\" workspace first.": "여기서 도구를 선택하려면, \"도구\" 워크스페이스에 먼저 추가하세요.", "Toast notifications for new updates": "새 업데이트 알림", "Today": "오늘", - "Today at {{LOCALIZED_TIME}}": "", + "Today at {{LOCALIZED_TIME}}": "오늘 {{LOCALIZED_TIME}}", "Toggle search": "검색 전환", "Toggle settings": "설정 전환", "Toggle sidebar": "사이드바 전환", @@ -1592,7 +1592,7 @@ "Upload Progress": "업로드 진행 상황", "Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "", "URL": "URL", - "URL is required": "", + "URL is required": "URL이 필요합니다.", "URL Mode": "URL 모드", "Usage": "사용량", "Use '#' in the prompt input to load and include your knowledge.": "프롬프트 입력에서 '#'를 사용하여 지식 기반을 불러오고 포함하세요.", @@ -1671,7 +1671,7 @@ "Yacy Password": "Yacy 비밀번호", "Yacy Username": "Yacy 사용자 이름", "Yesterday": "어제", - "Yesterday at {{LOCALIZED_TIME}}": "", + "Yesterday at {{LOCALIZED_TIME}}": "어제 {{LOCALIZED_TIME}}", "You": "당신", "You are currently using a trial license. Please contact support to upgrade your license.": "현재 평가판 라이선스를 사용 중입니다. 라이선스를 업그레이드하려면 지원팀에 문의하세요.", "You can only chat with a maximum of {{maxCount}} file(s) at a time.": "최대 {{maxCount}}개의 파일과만 동시에 대화할 수 있습니다 ", @@ -1682,7 +1682,7 @@ "You have shared this chat": "이 채팅을 공유했습니다.", "You're a helpful assistant.": "당신은 유용한 어시스턴트입니다.", "You're now logged in.": "로그인되었습니다.", - "Your Account": "", + "Your Account": "계정", "Your account status is currently pending activation.": "현재 계정은 아직 활성화되지 않았습니다.", "Your entire contribution will go directly to the plugin developer; Open WebUI does not take any percentage. However, the chosen funding platform might have its own fees.": "당신의 모든 기여는 곧바로 플러그인 개발자에게 갑니다; Open WebUI는 수수료를 받지 않습니다. 다만, 선택한 후원 플랫폼은 수수료를 가져갈 수 있습니다.", "YouTube": "유튜브", From a6c53303dd36b09d738c8679aaa5b55465062fdf Mon Sep 17 00:00:00 2001 From: ByoungGyu Lee Date: Sat, 20 Sep 2025 20:44:51 +0900 Subject: [PATCH 02/33] i18n(ko-KR): Updated korean translation. --- src/lib/i18n/locales/ko-KR/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 5eb1fc752d..6a5dc29932 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -14,7 +14,7 @@ "{{COUNT}} extracted lines": "", "{{COUNT}} hidden lines": "숨겨진 줄 {{COUNT}}개", "{{COUNT}} Replies": "답글 {{COUNT}}개", - "{{COUNT}} Sources": "{{COUNT}} 소스", + "{{COUNT}} Sources": "{{COUNT}}개의 소스", "{{COUNT}} words": "{{COUNT}} 단어", "{{LOCALIZED_DATE}} at {{LOCALIZED_TIME}}": "", "{{model}} download has been canceled": "{{model}} 다운로드가 취소되었습니다.", From 34feaeeb96330787b44e1541f7a24f0de6deb073 Mon Sep 17 00:00:00 2001 From: Kylapaallikko Date: Sat, 20 Sep 2025 14:53:04 +0300 Subject: [PATCH 03/33] Update fi-FI translation.json Added missing translations and fixed typos --- src/lib/i18n/locales/fi-FI/translation.json | 46 ++++++++++----------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index a60ec2afd2..143dc35acf 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -132,7 +132,7 @@ "Application DN Password": "Sovelluksen DN-salasana", "applies to all users with the \"user\" role": "koskee kaikkia käyttäjiä, joilla on \"käyttäjä\"-rooli", "April": "huhtikuu", - "Archive": "Arkisto", + "Archive": "Arkistoi", "Archive All Chats": "Arkistoi kaikki keskustelut", "Archived Chats": "Arkistoidut keskustelut", "archived-chat-export": "arkistoitu-keskustelu-vienti", @@ -144,7 +144,7 @@ "Arena Models": "Arena-mallit", "Artifacts": "Artefaktit", "Ask": "Kysy", - "Ask a question": "Kysyä kysymys", + "Ask a question": "Kysy kysymys", "Assistant": "Avustaja", "Attach file from knowledge": "Liitä tiedosto tietokannasta", "Attach Knowledge": "Liitä tietoa", @@ -212,7 +212,7 @@ "Capture Audio": "Kaappaa ääntä", "Certificate Path": "Varmennepolku", "Change Password": "Vaihda salasana", - "Channel": "", + "Channel": "Kanava", "Channel deleted successfully": "Kanavan poisto onnistui", "Channel Name": "Kanavan nimi", "Channel updated successfully": "Kanavan päivitys onnistui", @@ -306,7 +306,7 @@ "Connections": "Yhteydet", "Connections saved successfully": "Yhteyksien tallentaminen onnistui", "Connections settings updated": "Yhteysasetukset päivitetty", - "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "", + "Constrains effort on reasoning for reasoning models. Only applicable to reasoning models from specific providers that support reasoning effort.": "Rajoittaa päättelyn määrää päättelymalleissa. Tämä soveltuu vain tarjoajiin jotka tukevat päättelyn määrä asetusta.", "Contact Admin for WebUI Access": "Ota yhteyttä ylläpitäjään WebUI-käyttöä varten", "Content": "Sisältö", "Content Extraction Engine": "Sisällönpoimintamoottori", @@ -358,7 +358,7 @@ "Custom Parameter Value": "Mukautetun parametrin arvo", "Danger Zone": "Vaara-alue", "Dark": "Tumma", - "Data Controls": "", + "Data Controls": "Datan hallinta", "Database": "Tietokanta", "Datalab Marker API": "Datalab Marker API", "Datalab Marker API Key required.": "Datalab Marker API-avain vaaditaan.", @@ -370,8 +370,8 @@ "Default (SentenceTransformers)": "Oletus (SentenceTransformers)", "Default action buttons will be used.": "Painikkeen oletustoiminto", "Default description enabled": "Oletuskuvaus käytössä", - "Default Features": "", - "Default Filters": "", + "Default Features": "Oletus ominaisuudet", + "Default Filters": "Oletus suodattimet", "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model's built-in tool-calling capabilities, but requires the model to inherently support this feature.": "Oletustila toimii laajemman mallivalikoiman kanssa kutsumalla työkaluja kerran ennen suorittamista. Natiivitila hyödyntää mallin sisäänrakennettuja työkalujen kutsumisominaisuuksia, mutta edellyttää, että malli tukee tätä ominaisuutta.", "Default Model": "Oletusmalli", "Default model updated": "Oletusmalli päivitetty", @@ -487,7 +487,7 @@ "Edit Memory": "Muokkaa muistia", "Edit User": "Muokkaa käyttäjää", "Edit User Group": "Muokkaa käyttäjäryhmää", - "edited": "", + "edited": "muokattu", "Edited": "Muokattu", "Editing": "Muokataan", "Eject": "Poista", @@ -509,7 +509,7 @@ "Enable Message Rating": "Ota viestiarviointi käyttöön", "Enable Mirostat sampling for controlling perplexity.": "", "Enable New Sign Ups": "Salli uudet rekisteröitymiset", - "Enable, disable, or customize the reasoning tags used by the model. \"Enabled\" uses default tags, \"Disabled\" turns off reasoning tags, and \"Custom\" lets you specify your own start and end tags.": "", + "Enable, disable, or customize the reasoning tags used by the model. \"Enabled\" uses default tags, \"Disabled\" turns off reasoning tags, and \"Custom\" lets you specify your own start and end tags.": "Käytä, poista käytöstä, tai kustomoi mallin päättely tageja. \"Käytä\" käyttää oletus tageja, \"Ei käytössä\" ottaa päätely tagit pois käytöstä, ja \"Mukautettu\" antaa sinun määritellä aloitus ja lopetus tagit.", "Enabled": "Käytössä", "End Tag": "Lopetus tagi", "Endpoint URL": "Päätepiste verkko-osoite", @@ -630,7 +630,7 @@ "Enter Your Role": "Kirjoita roolisi", "Enter Your Username": "Kirjoita käyttäjätunnuksesi", "Enter your webhook URL": "Kirjoita webhook osoitteesi", - "Entra ID": "", + "Entra ID": "Entra ID", "Error": "Virhe", "ERROR": "VIRHE", "Error accessing directory": "Virhe hakemistoa avattaessa", @@ -726,13 +726,13 @@ "Firecrawl API Key": "Firecrawl API-avain", "Floating Quick Actions": "Kelluvat pikakomennot", "Focus chat input": "Fokusoi syöttökenttään", - "Folder Background Image": "", + "Folder Background Image": "Kansion taustakuva", "Folder deleted successfully": "Kansio poistettu onnistuneesti", "Folder Name": "Kansion nimi", "Folder name cannot be empty.": "Kansion nimi ei voi olla tyhjä.", "Folder name updated successfully": "Kansion nimi päivitetty onnistuneesti", "Folder updated successfully": "Kansio päivitettiin onnistuneesti", - "Folders": "", + "Folders": "Kansiot", "Follow up": "Jatkokysymykset", "Follow Up Generation": "Jatkokysymysten luonti", "Follow Up Generation Prompt": "Jatkokysymysten luonti kehoite", @@ -1027,7 +1027,7 @@ "New Tool": "Uusi työkalu", "new-channel": "uusi-kanava", "Next message": "Seuraava viesti", - "No authentication": "", + "No authentication": "Ei todennusta", "No chats found": "Keskuteluja ei löytynyt", "No chats found for this user.": "Käyttäjän keskusteluja ei löytynyt.", "No chats found.": "Keskusteluja ei löytynyt", @@ -1048,7 +1048,7 @@ "No models found": "Malleja ei löytynyt", "No models selected": "Malleja ei ole valittu", "No Notes": "Ei muistiinpanoja", - "No notes found": "", + "No notes found": "Muistiinpanoja ei löytynyt", "No results": "Ei tuloksia", "No results found": "Ei tuloksia", "No search query generated": "Hakukyselyä ei luotu", @@ -1062,7 +1062,7 @@ "None": "Ei mikään", "Not factually correct": "Ei faktuaalisesti oikein", "Not helpful": "Ei hyödyllinen", - "Note": "", + "Note": "Muistiinpano", "Note deleted successfully": "Muistiinpano poistettiin onnistuneesti", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Huomautus: Jos asetat vähimmäispistemäärän, haku palauttaa vain sellaiset asiakirjat, joiden pistemäärä on vähintään vähimmäismäärä.", "Notes": "Muistiinpanot", @@ -1095,10 +1095,10 @@ "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hups! Käytät ei-tuettua menetelmää (vain frontend). Palvele WebUI:ta backendistä.", "Open file": "Avaa tiedosto", "Open in full screen": "Avaa koko näytön tilaan", - "Open link": "", - "Open modal to configure connection": "Avaa modaaliikkuna yhteyden määrittämiseksi", - "Open Modal To Manage Floating Quick Actions": "Avaa modaaliikkuna kelluvien pikatoimintojen hallitsemiseksi", - "Open Modal To Manage Image Compression": "", + "Open link": "Avaa linkki", + "Open modal to configure connection": "Avaa modaali yhteyden määrittämiseksi", + "Open Modal To Manage Floating Quick Actions": "Avaa modaali kelluvien pikatoimintojen hallitsemiseksi", + "Open Modal To Manage Image Compression": "Avaa kuvien pakkaus hallinta modaali", "Open new chat": "Avaa uusi keskustelu", "Open Sidebar": "Avaa sivupalkki", "Open User Profile Menu": "Avaa käyttäjäprofiili ikkuna", @@ -1218,7 +1218,7 @@ "Redirecting you to Open WebUI Community": "Ohjataan sinut OpenWebUI-yhteisöön", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Viittaa itseen \"Käyttäjänä\" (esim. \"Käyttäjä opiskelee espanjaa\")", - "Reference Chats": "", + "Reference Chats": "Viitekeskustelut", "Refused when it shouldn't have": "Kieltäytyi, vaikka ei olisi pitänyt", "Regenerate": "Regeneroi", "Regenerate Menu": "Regenerointi ikkuna", @@ -1506,7 +1506,7 @@ "This will reset the knowledge base and sync all files. Do you wish to continue?": "Tämä nollaa tietokannan ja synkronoi kaikki tiedostot. Haluatko jatkaa?", "Thorough explanation": "Perusteellinen selitys", "Thought for {{DURATION}}": "Ajatteli {{DURATION}}", - "Thought for {{DURATION}} seconds": "Ajatteli {{DURATION}} sekunttia", + "Thought for {{DURATION}} seconds": "Ajatteli {{DURATION}} sekuntia", "Thought for less than a second": "Ajatteli alle sekunnin", "Thread": "Ketju", "Tika": "Tika", @@ -1567,7 +1567,7 @@ "Unarchive All Archived Chats": "Pura kaikkien arkistoitujen keskustelujen arkistointi", "Unarchive Chat": "Pura keskustelun arkistointi", "Underline": "Alleviivaus", - "Unknown": "", + "Unknown": "Tuntematon", "Unloads {{FROM_NOW}}": "Purkuja {{FROM_NOW}}", "Unlock mysteries": "Selvitä arvoituksia", "Unpin": "Irrota kiinnitys", @@ -1609,7 +1609,7 @@ "User Webhooks": "Käyttäjän Webhook:it", "Username": "Käyttäjätunnus", "Users": "Käyttäjät", - "Uses DefaultAzureCredential to authenticate": "", + "Uses DefaultAzureCredential to authenticate": "Käyttää DefaultAzureCredential todentamiseen", "Using Entire Document": "Koko asiakirjan käyttäminen", "Using Focused Retrieval": "Kohdennetun haun käyttäminen", "Using the default arena model with all models. Click the plus button to add custom models.": "Käytetään oletusarena-mallia kaikkien mallien kanssa. Napsauta plus-painiketta lisätäksesi mukautettuja malleja.", From 4b029048dbbce824b6ae615223fbc3a9e9b2a6b7 Mon Sep 17 00:00:00 2001 From: _00_ <131402327+rgaricano@users.noreply.github.com> Date: Sat, 20 Sep 2025 14:39:23 +0200 Subject: [PATCH 04/33] UPD: i18n es-ES Translation v.0.6.30 ### Update i18n es-ES Translation v.0.6.30 Added new strings --- src/lib/i18n/locales/es-ES/translation.json | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 1a9bac0bab..257f826988 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -212,7 +212,7 @@ "Capture Audio": "Capturar Audio", "Certificate Path": "Ruta a Certificado", "Change Password": "Cambiar Contraseña", - "Channel": "", + "Channel": "Canal", "Channel deleted successfully": "Canal borrado correctamente", "Channel Name": "Nombre del Canal", "Channel updated successfully": "Canal actualizado correctamente", @@ -358,7 +358,7 @@ "Custom Parameter Value": "Valor del Parámetro Personalizado", "Danger Zone": "Zona Peligrosa", "Dark": "Oscuro", - "Data Controls": "", + "Data Controls": "Controles de Datos", "Database": "Base de datos", "Datalab Marker API": "API de Datalab Marker", "Datalab Marker API Key required.": "Clave API de Datalab Marker Requerida", @@ -487,7 +487,7 @@ "Edit Memory": "Editar Memoria", "Edit User": "Editar Usuario", "Edit User Group": "Editar Grupo de Usuarios", - "edited": "", + "edited": "editado", "Edited": "Editado", "Editing": "Editando", "Eject": "Expulsar", @@ -630,7 +630,7 @@ "Enter Your Role": "Ingresa tu rol", "Enter Your Username": "Ingresa tu nombre de usuario", "Enter your webhook URL": "Ingresa tu URL de webhook", - "Entra ID": "", + "Entra ID": "ID de Entra", "Error": "Error", "ERROR": "ERROR", "Error accessing directory": "Error accediendo al directorio", @@ -726,13 +726,13 @@ "Firecrawl API Key": "Clave de API de Firecrawl", "Floating Quick Actions": "Acciones Rápidas Flotantes", "Focus chat input": "Enfocar campo de chat", - "Folder Background Image": "", + "Folder Background Image": "Imagen de Fondo de la Carpeta", "Folder deleted successfully": "Carpeta eliminada correctamente", "Folder Name": "Nombre de la Carpeta", "Folder name cannot be empty.": "El nombre de la carpeta no puede estar vacío", "Folder name updated successfully": "Nombre de la carpeta actualizado correctamente", "Folder updated successfully": "Carpeta actualizada correctamente", - "Folders": "", + "Folders": "Carpetas", "Follow up": "Seguimiento", "Follow Up Generation": "Seguimiento de la Generación", "Follow Up Generation Prompt": "Seguimiento de la Generación del Indicador", @@ -1048,7 +1048,7 @@ "No models found": "No se encontraron modelos", "No models selected": "No se seleccionaron modelos", "No Notes": "Sin Notas", - "No notes found": "", + "No notes found": "No se encontraron notas", "No results": "No se encontraron resultados", "No results found": "No se encontraron resultados", "No search query generated": "No se generó ninguna consulta de búsqueda", @@ -1062,7 +1062,7 @@ "None": "Ninguno", "Not factually correct": "No es correcto en todos los aspectos", "Not helpful": "No aprovechable", - "Note": "", + "Note": "Nota", "Note deleted successfully": "Nota eliminada correctamente", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Si estableces una puntuación mínima, la búsqueda sólo devolverá documentos con una puntuación mayor o igual a la puntuación mínima establecida.", "Notes": "Notas", @@ -1095,10 +1095,10 @@ "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "¡vaya! Estás usando un método no soportado (solo interfaz frontal-frontend). Por favor sirve WebUI desde el interfaz trasero (servidor backend).", "Open file": "Abrir archivo", "Open in full screen": "Abrir en pantalla completa", - "Open link": "", + "Open link": "Abrir enlace", "Open modal to configure connection": "Abrir modal para configurar la conexión", - "Open Modal To Manage Floating Quick Actions": "Abrir modal para gestionar Acciones Rápidas Flotantes", - "Open Modal To Manage Image Compression": "", + "Open Modal To Manage Floating Quick Actions": "Abrir Modal para Gestionar Acciones Rápidas Flotantes", + "Open Modal To Manage Image Compression": "Abrir Modal para Gestionar Compresión de Imagen", "Open new chat": "Abrir nuevo chat", "Open Sidebar": "Abrir Barra Lateral", "Open User Profile Menu": "Abrir Menu de Perfiles de Usuario", @@ -1218,7 +1218,7 @@ "Redirecting you to Open WebUI Community": "Redireccionando a la Comunidad Open-WebUI", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Reduce la probabilidad de generación sin sentido. Un valor más alto (p.ej. 100) dará respuestas más diversas, mientras que un valor más bajo (p.ej. 10) será más conservador.", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Referir a ti mismo como \"Usuario\" (p.ej. \"Usuario está aprendiendo Español\")", - "Reference Chats": "", + "Reference Chats": "Referenciar Chats", "Refused when it shouldn't have": "Rechazado cuando no debería haberlo hecho", "Regenerate": "Regenerar", "Regenerate Menu": "Regenerar Menú", @@ -1568,7 +1568,7 @@ "Unarchive All Archived Chats": "Desarchivar Todos los Chats Archivados", "Unarchive Chat": "Desarchivar Chat", "Underline": "Subrayado", - "Unknown": "", + "Unknown": "Desconocido", "Unloads {{FROM_NOW}}": "Descargas {{FROM_NOW}}", "Unlock mysteries": "Desbloquear misterios", "Unpin": "Desfijar", @@ -1610,7 +1610,7 @@ "User Webhooks": "Usuario Webhooks", "Username": "Nombre de Usuario", "Users": "Usuarios", - "Uses DefaultAzureCredential to authenticate": "", + "Uses DefaultAzureCredential to authenticate": "Usa DefaultAzureCredential para autentificar", "Using Entire Document": "Usando Documento Completo", "Using Focused Retrieval": "Usando Recuperación Focalizada", "Using the default arena model with all models. Click the plus button to add custom models.": "Usando el modelo de arena predeterminado con todos los modelos. Pulsar en el botón + para agregar modelos personalizados.", From 4b4fda46cf528fbf435a5fd8e7d6cd35d1fc42b0 Mon Sep 17 00:00:00 2001 From: _00_ <131402327+rgaricano@users.noreply.github.com> Date: Sat, 20 Sep 2025 14:46:18 +0200 Subject: [PATCH 05/33] Update translation.json --- src/lib/i18n/locales/es-ES/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 257f826988..f26e3637a3 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -1483,7 +1483,7 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "La puntuación debe ser un valor entre 0.0 (0%) y 1.0 (100%).", "The stream delta chunk size for the model. Increasing the chunk size will make the model respond with larger pieces of text at once.": "El tamaño del fragmentado incremental para el modelo. Aumentar el tamaño del fragmentado hará que el modelo responda con fragmentos de texto más grandes cada vez.", "The temperature of the model. Increasing the temperature will make the model answer more creatively.": "La temperatura del modelo. Aumentar la temperatura hará que el modelo responda de forma más creativa.", - "The Weight of BM25 Hybrid Search. 0 more lexical, 1 more semantic. Default 0.5": "La Ponderación de BM25 en la Búsqueda Híbrida. 0 más léxica, 1 más semántica. Por defecto, 0.5", + "The Weight of BM25 Hybrid Search. 0 more semantic, 1 more lexical. Default 0.5": "La Ponderación de BM25 en la Búsqueda Híbrida. 0 más semántica, 1 más léxica. Por defecto, 0.5", "The width in pixels to compress images to. Leave empty for no compression.": "El ancho en pixeles al comprimir imágenes. Dejar vacío para no compresión", "Theme": "Tema", "Thinking...": "Pensando...", From 6bc5d331a27c5106f492213510a763effa316faf Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sat, 20 Sep 2025 12:45:10 -0500 Subject: [PATCH 06/33] doc: readme --- LICENSE_NOTICE | 11 +++++++++++ README.md | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 LICENSE_NOTICE diff --git a/LICENSE_NOTICE b/LICENSE_NOTICE new file mode 100644 index 0000000000..4e00d46d9a --- /dev/null +++ b/LICENSE_NOTICE @@ -0,0 +1,11 @@ +# Open WebUI Multi-License Notice + +This repository contains code governed by multiple licenses based on the date and origin of contribution: + +1. All code committed prior to commit a76068d69cd59568b920dfab85dc573dbbb8f131 is licensed under the MIT License (see LICENSE_HISTORY). + +2. All code committed from commit a76068d69cd59568b920dfab85dc573dbbb8f131 up to and including commit 60d84a3aae9802339705826e9095e272e3c83623 is licensed under the BSD 3-Clause License (see LICENSE_HISTORY). + +3. All code contributed or modified after commit 60d84a3aae9802339705826e9095e272e3c83623 is licensed under the Open WebUI License (see LICENSE). + +For details on which commits are covered by which license, refer to LICENSE_HISTORY. diff --git a/README.md b/README.md index 9b01496d9f..49c0a8d9d3 100644 --- a/README.md +++ b/README.md @@ -248,7 +248,7 @@ Discover upcoming features on our roadmap in the [Open WebUI Documentation](http ## License 📜 -This project is licensed under the [Open WebUI License](LICENSE), a revised BSD-3-Clause license. You receive all the same rights as the classic BSD-3 license: you can use, modify, and distribute the software, including in proprietary and commercial products, with minimal restrictions. The only additional requirement is to preserve the "Open WebUI" branding, as detailed in the LICENSE file. For full terms, see the [LICENSE](LICENSE) document. 📄 +This project contains code under multiple licenses. The current codebase includes components licensed under the Open WebUI License with an additional requirement to preserve the "Open WebUI" branding, as well as prior contributions under their respective original licenses. For a detailed record of license changes and the applicable terms for each section of the code, please refer to [LICENSE_HISTORY](./LICENSE_HISTORY). For complete and updated licensing details, please see the [LICENSE](./LICENSE) and [LICENSE_HISTORY](./LICENSE_HISTORY) files. ## Support 💬 From 6e4a2f18e17f47c9d0f3b50822bfaae3a5638864 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 21 Sep 2025 00:14:43 -0400 Subject: [PATCH 07/33] refac --- backend/open_webui/config.py | 8 +++++--- backend/open_webui/retrieval/utils.py | 8 +++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index ca090efa22..fdc14c4c77 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -222,10 +222,11 @@ class PersistentConfig(Generic[T]): class AppConfig: - _state: dict[str, PersistentConfig] _redis: Union[redis.Redis, redis.cluster.RedisCluster] = None _redis_key_prefix: str + _state: dict[str, PersistentConfig] + def __init__( self, redis_url: Optional[str] = None, @@ -233,9 +234,8 @@ class AppConfig: redis_cluster: Optional[bool] = False, redis_key_prefix: str = "open-webui", ): - super().__setattr__("_state", {}) - super().__setattr__("_redis_key_prefix", redis_key_prefix) if redis_url: + super().__setattr__("_redis_key_prefix", redis_key_prefix) super().__setattr__( "_redis", get_redis_connection( @@ -246,6 +246,8 @@ class AppConfig: ), ) + super().__setattr__("_state", {}) + def __setattr__(self, key, value): if isinstance(value, PersistentConfig): self._state[key] = value diff --git a/backend/open_webui/retrieval/utils.py b/backend/open_webui/retrieval/utils.py index aec8de6846..65da1592e1 100644 --- a/backend/open_webui/retrieval/utils.py +++ b/backend/open_webui/retrieval/utils.py @@ -127,7 +127,13 @@ def query_doc_with_hybrid_search( hybrid_bm25_weight: float, ) -> dict: try: - if not collection_result.documents[0]: + if ( + not collection_result + or not hasattr(collection_result, "documents") + or not collection_result.documents + or len(collection_result.documents) == 0 + or not collection_result.documents[0] + ): log.warning(f"query_doc_with_hybrid_search:no_docs {collection_name}") return {"documents": [], "metadatas": [], "distances": []} From 466d5bb69636e280e81b2ae55278ef49808b5fb5 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 21 Sep 2025 01:40:14 -0400 Subject: [PATCH 08/33] refac: add separate Client IDs for OneDrive --- backend/open_webui/config.py | 12 ++++++--- backend/open_webui/main.py | 6 +++-- src/lib/utils/onedrive-file-picker.ts | 35 +++++++++++++++------------ 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index fdc14c4c77..2f5f34019d 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -2170,6 +2170,8 @@ ENABLE_ONEDRIVE_INTEGRATION = PersistentConfig( "onedrive.enable", os.getenv("ENABLE_ONEDRIVE_INTEGRATION", "False").lower() == "true", ) + + ENABLE_ONEDRIVE_PERSONAL = ( os.environ.get("ENABLE_ONEDRIVE_PERSONAL", "True").lower() == "true" ) @@ -2177,10 +2179,12 @@ ENABLE_ONEDRIVE_BUSINESS = ( os.environ.get("ENABLE_ONEDRIVE_BUSINESS", "True").lower() == "true" ) -ONEDRIVE_CLIENT_ID = PersistentConfig( - "ONEDRIVE_CLIENT_ID", - "onedrive.client_id", - os.environ.get("ONEDRIVE_CLIENT_ID", ""), +ONEDRIVE_CLIENT_ID = os.environ.get("ONEDRIVE_CLIENT_ID", "") +ONEDRIVE_CLIENT_ID_PERSONAL = os.environ.get( + "ONEDRIVE_CLIENT_ID_PERSONAL", ONEDRIVE_CLIENT_ID +) +ONEDRIVE_CLIENT_ID_BUSINESS = os.environ.get( + "ONEDRIVE_CLIENT_ID_BUSINESS", ONEDRIVE_CLIENT_ID ) ONEDRIVE_SHAREPOINT_URL = PersistentConfig( diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index 5630a58839..39e9c66051 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -301,7 +301,8 @@ from open_webui.config import ( GOOGLE_DRIVE_CLIENT_ID, GOOGLE_DRIVE_API_KEY, ENABLE_ONEDRIVE_INTEGRATION, - ONEDRIVE_CLIENT_ID, + ONEDRIVE_CLIENT_ID_PERSONAL, + ONEDRIVE_CLIENT_ID_BUSINESS, ONEDRIVE_SHAREPOINT_URL, ONEDRIVE_SHAREPOINT_TENANT_ID, ENABLE_ONEDRIVE_PERSONAL, @@ -1743,7 +1744,8 @@ async def get_app_config(request: Request): "api_key": GOOGLE_DRIVE_API_KEY.value, }, "onedrive": { - "client_id": ONEDRIVE_CLIENT_ID.value, + "client_id_personal": ONEDRIVE_CLIENT_ID_PERSONAL, + "client_id_business": ONEDRIVE_CLIENT_ID_BUSINESS, "sharepoint_url": ONEDRIVE_SHAREPOINT_URL.value, "sharepoint_tenant_id": ONEDRIVE_SHAREPOINT_TENANT_ID.value, }, diff --git a/src/lib/utils/onedrive-file-picker.ts b/src/lib/utils/onedrive-file-picker.ts index be23a512e3..e55882e081 100644 --- a/src/lib/utils/onedrive-file-picker.ts +++ b/src/lib/utils/onedrive-file-picker.ts @@ -31,12 +31,10 @@ class OneDriveConfig { } private async getCredentials(): Promise { - const headers: HeadersInit = { - 'Content-Type': 'application/json' - }; - const response = await fetch('/api/config', { - headers, + headers: { + 'Content-Type': 'application/json' + }, credentials: 'include' }); @@ -46,17 +44,14 @@ class OneDriveConfig { const config = await response.json(); - const newClientId = config.onedrive?.client_id; - const newSharepointUrl = config.onedrive?.sharepoint_url; - const newSharepointTenantId = config.onedrive?.sharepoint_tenant_id; + this.clientIdPersonal = config.onedrive?.client_id_personal; + this.clientIdBusiness = config.onedrive?.client_id_business; + this.sharepointUrl = config.onedrive?.sharepoint_url; + this.sharepointTenantId = config.onedrive?.sharepoint_tenant_id; - if (!newClientId) { - throw new Error('OneDrive configuration is incomplete'); + if (!this.newClientIdPersonal && !this.newClientIdBusiness) { + throw new Error('OneDrive client ID not configured'); } - - this.clientId = newClientId; - this.sharepointUrl = newSharepointUrl; - this.sharepointTenantId = newSharepointTenantId; } public async getMsalInstance( @@ -69,10 +64,20 @@ class OneDriveConfig { this.currentAuthorityType === 'organizations' ? this.sharepointTenantId || 'common' : 'consumers'; + + const clientId = + this.currentAuthorityType === 'organizations' + ? this.clientIdBusiness + : this.clientIdPersonal; + + if (!clientId) { + throw new Error('OneDrive client ID not configured'); + } + const msalParams = { auth: { authority: `https://login.microsoftonline.com/${authorityEndpoint}`, - clientId: this.clientId + clientId: clientId } }; From 834824ce7bac7c0b0c05bf8ecf63b5a5930d21e2 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 21 Sep 2025 03:06:54 -0400 Subject: [PATCH 09/33] refac --- src/lib/components/layout/Sidebar.svelte | 34 +++++++++++++----------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 08fee9f133..e07a51c616 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -65,6 +65,8 @@ const BREAKPOINT = 768; + let scrollTop = 0; + let navElement; let shiftKey = false; @@ -704,7 +706,7 @@ : 'invisible'}" > -
+
{ + if (e.target.scrollTop === 0) { + scrollTop = 0; + } else { + scrollTop = e.target.scrollTop; + } + }} + >
-