Unverified Commit f28877f4 authored by Timothy Jaeryang Baek's avatar Timothy Jaeryang Baek Committed by GitHub
Browse files

Merge pull request #2801 from open-webui/dev

0.2.4
parents 11bb1a6f b673ae7a
...@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file. ...@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.2.4] - 2024-06-03
### Added
- **👤 Improved Account Pending Page**: The account pending page now displays admin details by default to avoid confusion. You can disable this feature in the admin settings if needed.
- **🌐 HTTP Proxy Support**: We have enabled the use of the 'http_proxy' environment variable in OpenAI and Ollama API calls, making it easier to configure network settings.
- **❓ Quick Access to Documentation**: You can now easily access Open WebUI documents via a question mark button located at the bottom right corner of the screen (available on larger screens like PCs).
- **🌍 Enhanced Translation**: Improvements have been made to translations.
### Fixed
- **🔍 SearxNG Web Search**: Fixed the issue where the SearxNG web search functionality was not working properly.
## [0.2.3] - 2024-06-03 ## [0.2.3] - 2024-06-03
### Added ### Added
......
...@@ -134,7 +134,7 @@ async def update_ollama_api_url(form_data: UrlUpdateForm, user=Depends(get_admin ...@@ -134,7 +134,7 @@ async def update_ollama_api_url(form_data: UrlUpdateForm, user=Depends(get_admin
async def fetch_url(url): async def fetch_url(url):
timeout = aiohttp.ClientTimeout(total=5) timeout = aiohttp.ClientTimeout(total=5)
try: try:
async with aiohttp.ClientSession(timeout=timeout) as session: async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
async with session.get(url) as response: async with session.get(url) as response:
return await response.json() return await response.json()
except Exception as e: except Exception as e:
...@@ -156,7 +156,7 @@ async def cleanup_response( ...@@ -156,7 +156,7 @@ async def cleanup_response(
async def post_streaming_url(url: str, payload: str): async def post_streaming_url(url: str, payload: str):
r = None r = None
try: try:
session = aiohttp.ClientSession() session = aiohttp.ClientSession(trust_env=True)
r = await session.post(url, data=payload) r = await session.post(url, data=payload)
r.raise_for_status() r.raise_for_status()
...@@ -1045,7 +1045,7 @@ async def download_file_stream( ...@@ -1045,7 +1045,7 @@ async def download_file_stream(
timeout = aiohttp.ClientTimeout(total=600) # Set the timeout timeout = aiohttp.ClientTimeout(total=600) # Set the timeout
async with aiohttp.ClientSession(timeout=timeout) as session: async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
async with session.get(file_url, headers=headers) as response: async with session.get(file_url, headers=headers) as response:
total_size = int(response.headers.get("content-length", 0)) + current_size total_size = int(response.headers.get("content-length", 0)) + current_size
......
...@@ -186,7 +186,7 @@ async def fetch_url(url, key): ...@@ -186,7 +186,7 @@ async def fetch_url(url, key):
timeout = aiohttp.ClientTimeout(total=5) timeout = aiohttp.ClientTimeout(total=5)
try: try:
headers = {"Authorization": f"Bearer {key}"} headers = {"Authorization": f"Bearer {key}"}
async with aiohttp.ClientSession(timeout=timeout) as session: async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session:
async with session.get(url, headers=headers) as response: async with session.get(url, headers=headers) as response:
return await response.json() return await response.json()
except Exception as e: except Exception as e:
...@@ -462,7 +462,7 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)): ...@@ -462,7 +462,7 @@ async def proxy(path: str, request: Request, user=Depends(get_verified_user)):
streaming = False streaming = False
try: try:
session = aiohttp.ClientSession() session = aiohttp.ClientSession(trust_env=True)
r = await session.request( r = await session.request(
method=request.method, method=request.method,
url=target_url, url=target_url,
......
...@@ -14,6 +14,8 @@ from apps.webui.routers import ( ...@@ -14,6 +14,8 @@ from apps.webui.routers import (
) )
from config import ( from config import (
WEBUI_BUILD_HASH, WEBUI_BUILD_HASH,
SHOW_ADMIN_DETAILS,
ADMIN_EMAIL,
WEBUI_AUTH, WEBUI_AUTH,
DEFAULT_MODELS, DEFAULT_MODELS,
DEFAULT_PROMPT_SUGGESTIONS, DEFAULT_PROMPT_SUGGESTIONS,
...@@ -37,6 +39,11 @@ app.state.config = AppConfig() ...@@ -37,6 +39,11 @@ app.state.config = AppConfig()
app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP
app.state.config.JWT_EXPIRES_IN = JWT_EXPIRES_IN app.state.config.JWT_EXPIRES_IN = JWT_EXPIRES_IN
app.state.config.SHOW_ADMIN_DETAILS = SHOW_ADMIN_DETAILS
app.state.config.ADMIN_EMAIL = ADMIN_EMAIL
app.state.config.DEFAULT_MODELS = DEFAULT_MODELS app.state.config.DEFAULT_MODELS = DEFAULT_MODELS
app.state.config.DEFAULT_PROMPT_SUGGESTIONS = DEFAULT_PROMPT_SUGGESTIONS app.state.config.DEFAULT_PROMPT_SUGGESTIONS = DEFAULT_PROMPT_SUGGESTIONS
app.state.config.DEFAULT_USER_ROLE = DEFAULT_USER_ROLE app.state.config.DEFAULT_USER_ROLE = DEFAULT_USER_ROLE
......
...@@ -270,72 +270,87 @@ async def add_user(form_data: AddUserForm, user=Depends(get_admin_user)): ...@@ -270,72 +270,87 @@ async def add_user(form_data: AddUserForm, user=Depends(get_admin_user)):
############################ ############################
# ToggleSignUp # GetAdminDetails
############################ ############################
@router.get("/signup/enabled", response_model=bool) @router.get("/admin/details")
async def get_sign_up_status(request: Request, user=Depends(get_admin_user)): async def get_admin_details(request: Request, user=Depends(get_current_user)):
return request.app.state.config.ENABLE_SIGNUP if request.app.state.config.SHOW_ADMIN_DETAILS:
admin_email = request.app.state.config.ADMIN_EMAIL
admin_name = None
print(admin_email, admin_name)
if admin_email:
admin = Users.get_user_by_email(admin_email)
if admin:
admin_name = admin.name
else:
admin = Users.get_first_user()
if admin:
admin_email = admin.email
admin_name = admin.name
@router.get("/signup/enabled/toggle", response_model=bool) return {
async def toggle_sign_up(request: Request, user=Depends(get_admin_user)): "name": admin_name,
request.app.state.config.ENABLE_SIGNUP = not request.app.state.config.ENABLE_SIGNUP "email": admin_email,
return request.app.state.config.ENABLE_SIGNUP }
else:
raise HTTPException(400, detail=ERROR_MESSAGES.ACTION_PROHIBITED)
############################ ############################
# Default User Role # ToggleSignUp
############################ ############################
@router.get("/signup/user/role") @router.get("/admin/config")
async def get_default_user_role(request: Request, user=Depends(get_admin_user)): async def get_admin_config(request: Request, user=Depends(get_admin_user)):
return request.app.state.config.DEFAULT_USER_ROLE return {
"SHOW_ADMIN_DETAILS": request.app.state.config.SHOW_ADMIN_DETAILS,
"ENABLE_SIGNUP": request.app.state.config.ENABLE_SIGNUP,
"DEFAULT_USER_ROLE": request.app.state.config.DEFAULT_USER_ROLE,
"JWT_EXPIRES_IN": request.app.state.config.JWT_EXPIRES_IN,
"ENABLE_COMMUNITY_SHARING": request.app.state.config.ENABLE_COMMUNITY_SHARING,
}
class UpdateRoleForm(BaseModel): class AdminConfig(BaseModel):
role: str SHOW_ADMIN_DETAILS: bool
ENABLE_SIGNUP: bool
DEFAULT_USER_ROLE: str
JWT_EXPIRES_IN: str
ENABLE_COMMUNITY_SHARING: bool
@router.post("/signup/user/role") @router.post("/admin/config")
async def update_default_user_role( async def update_admin_config(
request: Request, form_data: UpdateRoleForm, user=Depends(get_admin_user) request: Request, form_data: AdminConfig, user=Depends(get_admin_user)
): ):
if form_data.role in ["pending", "user", "admin"]: request.app.state.config.SHOW_ADMIN_DETAILS = form_data.SHOW_ADMIN_DETAILS
request.app.state.config.DEFAULT_USER_ROLE = form_data.role request.app.state.config.ENABLE_SIGNUP = form_data.ENABLE_SIGNUP
return request.app.state.config.DEFAULT_USER_ROLE
if form_data.DEFAULT_USER_ROLE in ["pending", "user", "admin"]:
request.app.state.config.DEFAULT_USER_ROLE = form_data.DEFAULT_USER_ROLE
############################
# JWT Expiration
############################
@router.get("/token/expires")
async def get_token_expires_duration(request: Request, user=Depends(get_admin_user)):
return request.app.state.config.JWT_EXPIRES_IN
class UpdateJWTExpiresDurationForm(BaseModel):
duration: str
@router.post("/token/expires/update")
async def update_token_expires_duration(
request: Request,
form_data: UpdateJWTExpiresDurationForm,
user=Depends(get_admin_user),
):
pattern = r"^(-1|0|(-?\d+(\.\d+)?)(ms|s|m|h|d|w))$" pattern = r"^(-1|0|(-?\d+(\.\d+)?)(ms|s|m|h|d|w))$"
# Check if the input string matches the pattern # Check if the input string matches the pattern
if re.match(pattern, form_data.duration): if re.match(pattern, form_data.JWT_EXPIRES_IN):
request.app.state.config.JWT_EXPIRES_IN = form_data.duration request.app.state.config.JWT_EXPIRES_IN = form_data.JWT_EXPIRES_IN
return request.app.state.config.JWT_EXPIRES_IN
else: request.app.state.config.ENABLE_COMMUNITY_SHARING = (
return request.app.state.config.JWT_EXPIRES_IN form_data.ENABLE_COMMUNITY_SHARING
)
return {
"SHOW_ADMIN_DETAILS": request.app.state.config.SHOW_ADMIN_DETAILS,
"ENABLE_SIGNUP": request.app.state.config.ENABLE_SIGNUP,
"DEFAULT_USER_ROLE": request.app.state.config.DEFAULT_USER_ROLE,
"JWT_EXPIRES_IN": request.app.state.config.JWT_EXPIRES_IN,
"ENABLE_COMMUNITY_SHARING": request.app.state.config.ENABLE_COMMUNITY_SHARING,
}
############################ ############################
......
...@@ -19,7 +19,12 @@ from apps.webui.models.users import ( ...@@ -19,7 +19,12 @@ from apps.webui.models.users import (
from apps.webui.models.auths import Auths from apps.webui.models.auths import Auths
from apps.webui.models.chats import Chats from apps.webui.models.chats import Chats
from utils.utils import get_verified_user, get_password_hash, get_admin_user from utils.utils import (
get_verified_user,
get_password_hash,
get_current_user,
get_admin_user,
)
from constants import ERROR_MESSAGES from constants import ERROR_MESSAGES
from config import SRC_LOG_LEVELS from config import SRC_LOG_LEVELS
......
...@@ -601,6 +601,20 @@ WEBUI_BANNERS = PersistentConfig( ...@@ -601,6 +601,20 @@ WEBUI_BANNERS = PersistentConfig(
[BannerModel(**banner) for banner in json.loads("[]")], [BannerModel(**banner) for banner in json.loads("[]")],
) )
SHOW_ADMIN_DETAILS = PersistentConfig(
"SHOW_ADMIN_DETAILS",
"auth.admin.show",
os.environ.get("SHOW_ADMIN_DETAILS", "true").lower() == "true",
)
ADMIN_EMAIL = PersistentConfig(
"ADMIN_EMAIL",
"auth.admin.email",
os.environ.get("ADMIN_EMAIL", None),
)
#################################### ####################################
# WEBUI_SECRET_KEY # WEBUI_SECRET_KEY
#################################### ####################################
......
...@@ -879,23 +879,7 @@ class UrlForm(BaseModel): ...@@ -879,23 +879,7 @@ class UrlForm(BaseModel):
async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)): async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)):
app.state.config.WEBHOOK_URL = form_data.url app.state.config.WEBHOOK_URL = form_data.url
webui_app.state.WEBHOOK_URL = app.state.config.WEBHOOK_URL webui_app.state.WEBHOOK_URL = app.state.config.WEBHOOK_URL
return {"url": app.state.config.WEBHOOK_URL}
return {
"url": app.state.config.WEBHOOK_URL,
}
@app.get("/api/community_sharing", response_model=bool)
async def get_community_sharing_status(request: Request, user=Depends(get_admin_user)):
return webui_app.state.config.ENABLE_COMMUNITY_SHARING
@app.get("/api/community_sharing/toggle", response_model=bool)
async def toggle_community_sharing(request: Request, user=Depends(get_admin_user)):
webui_app.state.config.ENABLE_COMMUNITY_SHARING = (
not webui_app.state.config.ENABLE_COMMUNITY_SHARING
)
return webui_app.state.config.ENABLE_COMMUNITY_SHARING
@app.get("/api/version") @app.get("/api/version")
......
{ {
"name": "open-webui", "name": "open-webui",
"version": "0.2.3", "version": "0.2.4",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "open-webui", "name": "open-webui",
"version": "0.2.3", "version": "0.2.4",
"dependencies": { "dependencies": {
"@pyscript/core": "^0.4.32", "@pyscript/core": "^0.4.32",
"@sveltejs/adapter-node": "^1.3.1", "@sveltejs/adapter-node": "^1.3.1",
......
{ {
"name": "open-webui", "name": "open-webui",
"version": "0.2.3", "version": "0.2.4",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "npm run pyodide:fetch && vite dev --host", "dev": "npm run pyodide:fetch && vite dev --host",
......
import { WEBUI_API_BASE_URL } from '$lib/constants'; import { WEBUI_API_BASE_URL } from '$lib/constants';
export const getAdminDetails = async (token: string) => {
let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/auths/admin/details`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
}
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = err.detail;
return null;
});
if (error) {
throw error;
}
return res;
};
export const getAdminConfig = async (token: string) => {
let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/auths/admin/config`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
}
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = err.detail;
return null;
});
if (error) {
throw error;
}
return res;
};
export const updateAdminConfig = async (token: string, body: object) => {
let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/auths/admin/config`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`
},
body: JSON.stringify(body)
})
.then(async (res) => {
if (!res.ok) throw await res.json();
return res.json();
})
.catch((err) => {
console.log(err);
error = err.detail;
return null;
});
if (error) {
throw error;
}
return res;
};
export const getSessionUser = async (token: string) => { export const getSessionUser = async (token: string) => {
let error = null; let error = null;
......
...@@ -6,61 +6,44 @@ ...@@ -6,61 +6,44 @@
updateWebhookUrl updateWebhookUrl
} from '$lib/apis'; } from '$lib/apis';
import { import {
getAdminConfig,
getDefaultUserRole, getDefaultUserRole,
getJWTExpiresDuration, getJWTExpiresDuration,
getSignUpEnabledStatus, getSignUpEnabledStatus,
toggleSignUpEnabledStatus, toggleSignUpEnabledStatus,
updateAdminConfig,
updateDefaultUserRole, updateDefaultUserRole,
updateJWTExpiresDuration updateJWTExpiresDuration
} from '$lib/apis/auths'; } from '$lib/apis/auths';
import Switch from '$lib/components/common/Switch.svelte';
import { onMount, getContext } from 'svelte'; import { onMount, getContext } from 'svelte';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
export let saveHandler: Function; export let saveHandler: Function;
let signUpEnabled = true;
let defaultUserRole = 'pending';
let JWTExpiresIn = '';
let adminConfig = null;
let webhookUrl = ''; let webhookUrl = '';
let communitySharingEnabled = true;
const toggleSignUpEnabled = async () => { const updateHandler = async () => {
signUpEnabled = await toggleSignUpEnabledStatus(localStorage.token);
};
const updateDefaultUserRoleHandler = async (role) => {
defaultUserRole = await updateDefaultUserRole(localStorage.token, role);
};
const updateJWTExpiresDurationHandler = async (duration) => {
JWTExpiresIn = await updateJWTExpiresDuration(localStorage.token, duration);
};
const updateWebhookUrlHandler = async () => {
webhookUrl = await updateWebhookUrl(localStorage.token, webhookUrl); webhookUrl = await updateWebhookUrl(localStorage.token, webhookUrl);
}; const res = await updateAdminConfig(localStorage.token, adminConfig);
const toggleCommunitySharingEnabled = async () => { if (res) {
communitySharingEnabled = await toggleCommunitySharingEnabledStatus(localStorage.token); toast.success(i18n.t('Settings updated successfully'));
} else {
toast.error(i18n.t('Failed to update settings'));
}
}; };
onMount(async () => { onMount(async () => {
await Promise.all([ await Promise.all([
(async () => { (async () => {
signUpEnabled = await getSignUpEnabledStatus(localStorage.token); adminConfig = await getAdminConfig(localStorage.token);
})(),
(async () => {
defaultUserRole = await getDefaultUserRole(localStorage.token);
})(),
(async () => {
JWTExpiresIn = await getJWTExpiresDuration(localStorage.token);
})(), })(),
(async () => { (async () => {
webhookUrl = await getWebhookUrl(localStorage.token); webhookUrl = await getWebhookUrl(localStorage.token);
})(),
(async () => {
communitySharingEnabled = await getCommunitySharingEnabledStatus(localStorage.token);
})() })()
]); ]);
}); });
...@@ -69,66 +52,28 @@ ...@@ -69,66 +52,28 @@
<form <form
class="flex flex-col h-full justify-between space-y-3 text-sm" class="flex flex-col h-full justify-between space-y-3 text-sm"
on:submit|preventDefault={() => { on:submit|preventDefault={() => {
updateJWTExpiresDurationHandler(JWTExpiresIn); updateHandler();
updateWebhookUrlHandler();
saveHandler(); saveHandler();
}} }}
> >
<div class=" space-y-3 pr-1.5 overflow-y-scroll max-h-80"> <div class=" space-y-3 pr-1.5 overflow-y-scroll max-h-[22rem]">
{#if adminConfig !== null}
<div> <div>
<div class=" mb-2 text-sm font-medium">{$i18n.t('General Settings')}</div> <div class=" mb-3 text-sm font-medium">{$i18n.t('General Settings')}</div>
<div class=" flex w-full justify-between"> <div class=" flex w-full justify-between pr-2">
<div class=" self-center text-xs font-medium">{$i18n.t('Enable New Sign Ups')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Enable New Sign Ups')}</div>
<button <Switch bind:state={adminConfig.ENABLE_SIGNUP} />
class="p-1 px-3 text-xs flex rounded transition"
on:click={() => {
toggleSignUpEnabled();
}}
type="button"
>
{#if signUpEnabled}
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
d="M11.5 1A3.5 3.5 0 0 0 8 4.5V7H2.5A1.5 1.5 0 0 0 1 8.5v5A1.5 1.5 0 0 0 2.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 9.5 7V4.5a2 2 0 1 1 4 0v1.75a.75.75 0 0 0 1.5 0V4.5A3.5 3.5 0 0 0 11.5 1Z"
/>
</svg>
<span class="ml-2 self-center">{$i18n.t('Enabled')}</span>
{:else}
<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="M8 1a3.5 3.5 0 0 0-3.5 3.5V7A1.5 1.5 0 0 0 3 8.5v5A1.5 1.5 0 0 0 4.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 11.5 7V4.5A3.5 3.5 0 0 0 8 1Zm2 6V4.5a2 2 0 1 0-4 0V7h4Z"
clip-rule="evenodd"
/>
</svg>
<span class="ml-2 self-center">{$i18n.t('Disabled')}</span>
{/if}
</button>
</div> </div>
<div class=" flex w-full justify-between"> <div class=" my-3 flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Default User Role')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Default User Role')}</div>
<div class="flex items-center relative"> <div class="flex items-center relative">
<select <select
class="dark:bg-gray-900 w-fit pr-8 rounded py-2 px-2 text-xs bg-transparent outline-none text-right" class="dark:bg-gray-900 w-fit pr-8 rounded px-2 text-xs bg-transparent outline-none text-right"
bind:value={defaultUserRole} bind:value={adminConfig.DEFAULT_USER_ROLE}
placeholder="Select a theme" placeholder="Select a role"
on:change={(e) => {
updateDefaultUserRoleHandler(e.target.value);
}}
> >
<option value="pending">{$i18n.t('pending')}</option> <option value="pending">{$i18n.t('pending')}</option>
<option value="user">{$i18n.t('user')}</option> <option value="user">{$i18n.t('user')}</option>
...@@ -137,88 +82,64 @@ ...@@ -137,88 +82,64 @@
</div> </div>
</div> </div>
<div class=" flex w-full justify-between"> <hr class=" dark:border-gray-850 my-2" />
<div class=" self-center text-xs font-medium">{$i18n.t('Enable Community Sharing')}</div>
<button <div class="my-3 flex w-full items-center justify-between pr-2">
class="p-1 px-3 text-xs flex rounded transition" <div class=" self-center text-xs font-medium">
on:click={() => { {$i18n.t('Show Admin Details in Account Pending Overlay')}
toggleCommunitySharingEnabled(); </div>
}}
type="button"
>
{#if communitySharingEnabled}
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-4 h-4"
>
<path
d="M11.5 1A3.5 3.5 0 0 0 8 4.5V7H2.5A1.5 1.5 0 0 0 1 8.5v5A1.5 1.5 0 0 0 2.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 9.5 7V4.5a2 2 0 1 1 4 0v1.75a.75.75 0 0 0 1.5 0V4.5A3.5 3.5 0 0 0 11.5 1Z"
/>
</svg>
<span class="ml-2 self-center">{$i18n.t('Enabled')}</span>
{:else}
<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="M8 1a3.5 3.5 0 0 0-3.5 3.5V7A1.5 1.5 0 0 0 3 8.5v5A1.5 1.5 0 0 0 4.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 11.5 7V4.5A3.5 3.5 0 0 0 8 1Zm2 6V4.5a2 2 0 1 0-4 0V7h4Z"
clip-rule="evenodd"
/>
</svg>
<span class="ml-2 self-center">{$i18n.t('Disabled')}</span> <Switch bind:state={adminConfig.SHOW_ADMIN_DETAILS} />
{/if} </div>
</button>
<div class="my-3 flex w-full items-center justify-between pr-2">
<div class=" self-center text-xs font-medium">{$i18n.t('Enable Community Sharing')}</div>
<Switch bind:state={adminConfig.ENABLE_COMMUNITY_SHARING} />
</div> </div>
<hr class=" dark:border-gray-700 my-3" /> <hr class=" dark:border-gray-850 my-2" />
<div class=" w-full justify-between"> <div class=" w-full justify-between">
<div class="flex w-full justify-between"> <div class="flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('Webhook URL')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('JWT Expiration')}</div>
</div> </div>
<div class="flex mt-2 space-x-2"> <div class="flex mt-2 space-x-2">
<input <input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none" class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
type="text" type="text"
placeholder={`https://example.com/webhook`} placeholder={`e.g.) "30m","1h", "10d". `}
bind:value={webhookUrl} bind:value={adminConfig.JWT_EXPIRES_IN}
/> />
</div> </div>
<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
{$i18n.t('Valid time units:')}
<span class=" text-gray-300 font-medium"
>{$i18n.t("'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.")}</span
>
</div>
</div> </div>
<hr class=" dark:border-gray-700 my-3" /> <hr class=" dark:border-gray-850 my-2" />
<div class=" w-full justify-between"> <div class=" w-full justify-between">
<div class="flex w-full justify-between"> <div class="flex w-full justify-between">
<div class=" self-center text-xs font-medium">{$i18n.t('JWT Expiration')}</div> <div class=" self-center text-xs font-medium">{$i18n.t('Webhook URL')}</div>
</div> </div>
<div class="flex mt-2 space-x-2"> <div class="flex mt-2 space-x-2">
<input <input
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none" class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
type="text" type="text"
placeholder={`e.g.) "30m","1h", "10d". `} placeholder={`https://example.com/webhook`}
bind:value={JWTExpiresIn} bind:value={webhookUrl}
/> />
</div> </div>
<div class="mt-2 text-xs text-gray-400 dark:text-gray-500">
{$i18n.t('Valid time units:')}
<span class=" text-gray-300 font-medium"
>{$i18n.t("'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.")}</span
>
</div>
</div> </div>
</div> </div>
{/if}
</div> </div>
<div class="flex justify-end pt-3 text-sm font-medium"> <div class="flex justify-end pt-3 text-sm font-medium">
......
<script lang="ts">
import { getAdminDetails } from '$lib/apis/auths';
import { onMount, tick, getContext } from 'svelte';
const i18n = getContext('i18n');
let adminDetails = null;
onMount(async () => {
adminDetails = await getAdminDetails(localStorage.token).catch((err) => {
console.error(err);
return null;
});
});
</script>
<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.<br /> To access the WebUI, please reach
out to the administrator. Admins can manage user statuses from the Admin Panel.
</div>
{#if adminDetails}
<div class="mt-4 text-sm font-medium text-center">
<div>Admin: {adminDetails.name} ({adminDetails.email})</div>
</div>
{/if}
<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>
...@@ -148,7 +148,6 @@ ...@@ -148,7 +148,6 @@
"Deleted {{name}}": "حذف {{name}}", "Deleted {{name}}": "حذف {{name}}",
"Description": "وصف", "Description": "وصف",
"Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل", "Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل",
"Disabled": "تعطيل",
"Discover a model": "اكتشف نموذجا", "Discover a model": "اكتشف نموذجا",
"Discover a prompt": "اكتشاف موجه", "Discover a prompt": "اكتشاف موجه",
"Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة", "Discover, download, and explore custom prompts": "اكتشاف وتنزيل واستكشاف المطالبات المخصصة",
...@@ -156,6 +155,7 @@ ...@@ -156,6 +155,7 @@
"Display the username instead of You in the Chat": "اعرض اسم المستخدم بدلاً منك في الدردشة", "Display the username instead of You in the Chat": "اعرض اسم المستخدم بدلاً منك في الدردشة",
"Document": "المستند", "Document": "المستند",
"Document Settings": "أعدادات المستند", "Document Settings": "أعدادات المستند",
"Documentation": "",
"Documents": "مستندات", "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 Allow": "لا تسمح بذلك",
...@@ -178,7 +178,6 @@ ...@@ -178,7 +178,6 @@
"Enable Community Sharing": "تمكين مشاركة المجتمع", "Enable Community Sharing": "تمكين مشاركة المجتمع",
"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة", "Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
"Enable Web Search": "تمكين بحث الويب", "Enable Web Search": "تمكين بحث الويب",
"Enabled": "تفعيل",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
"Enter {{role}} message here": "أدخل رسالة {{role}} هنا", "Enter {{role}} message here": "أدخل رسالة {{role}} هنا",
"Enter a detail about yourself for your LLMs to recall": "ادخل معلومات عنك تريد أن يتذكرها الموديل", "Enter a detail about yourself for your LLMs to recall": "ادخل معلومات عنك تريد أن يتذكرها الموديل",
...@@ -215,6 +214,7 @@ ...@@ -215,6 +214,7 @@
"Export Prompts": "مطالبات التصدير", "Export Prompts": "مطالبات التصدير",
"Failed to create API Key.": "فشل في إنشاء مفتاح API.", "Failed to create API Key.": "فشل في إنشاء مفتاح API.",
"Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة", "Failed to read clipboard contents": "فشل في قراءة محتويات الحافظة",
"Failed to update settings": "",
"February": "فبراير", "February": "فبراير",
"Feel free to add specific details": "لا تتردد في إضافة تفاصيل محددة", "Feel free to add specific details": "لا تتردد في إضافة تفاصيل محددة",
"File Mode": "وضع الملف", "File Mode": "وضع الملف",
...@@ -435,11 +435,13 @@ ...@@ -435,11 +435,13 @@
"Set Voice": "ضبط الصوت", "Set Voice": "ضبط الصوت",
"Settings": "الاعدادات", "Settings": "الاعدادات",
"Settings saved successfully!": "تم حفظ الاعدادات بنجاح", "Settings saved successfully!": "تم حفظ الاعدادات بنجاح",
"Settings updated successfully": "",
"Share": "كشاركة", "Share": "كشاركة",
"Share Chat": "مشاركة الدردشة", "Share Chat": "مشاركة الدردشة",
"Share to OpenWebUI Community": "OpenWebUI شارك في مجتمع", "Share to OpenWebUI Community": "OpenWebUI شارك في مجتمع",
"short-summary": "ملخص قصير", "short-summary": "ملخص قصير",
"Show": "عرض", "Show": "عرض",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "إظهار الاختصارات", "Show shortcuts": "إظهار الاختصارات",
"Showcased creativity": "أظهر الإبداع", "Showcased creativity": "أظهر الإبداع",
"sidebar": "الشريط الجانبي", "sidebar": "الشريط الجانبي",
......
...@@ -148,7 +148,6 @@ ...@@ -148,7 +148,6 @@
"Deleted {{name}}": "Изтрито {{име}}", "Deleted {{name}}": "Изтрито {{име}}",
"Description": "Описание", "Description": "Описание",
"Didn't fully follow instructions": "Не следва инструкциите", "Didn't fully follow instructions": "Не следва инструкциите",
"Disabled": "Деактивиран",
"Discover a model": "Открийте модел", "Discover a model": "Открийте модел",
"Discover a prompt": "Откриване на промпт", "Discover a prompt": "Откриване на промпт",
"Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове", "Discover, download, and explore custom prompts": "Откриване, сваляне и преглед на персонализирани промптове",
...@@ -156,6 +155,7 @@ ...@@ -156,6 +155,7 @@
"Display the username instead of You in the Chat": "Показване на потребителското име вместо Вие в чата", "Display the username instead of You in the Chat": "Показване на потребителското име вместо Вие в чата",
"Document": "Документ", "Document": "Документ",
"Document Settings": "Документ Настройки", "Document Settings": "Документ Настройки",
"Documentation": "",
"Documents": "Документи", "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 Allow": "Не Позволявай",
...@@ -178,7 +178,6 @@ ...@@ -178,7 +178,6 @@
"Enable Community Sharing": "Разрешаване на споделяне в общност", "Enable Community Sharing": "Разрешаване на споделяне в общност",
"Enable New Sign Ups": "Вклюване на Нови Потребители", "Enable New Sign Ups": "Вклюване на Нови Потребители",
"Enable Web Search": "Разрешаване на търсене в уеб", "Enable Web Search": "Разрешаване на търсене в уеб",
"Enabled": "Включено",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.",
"Enter {{role}} message here": "Въведете съобщение за {{role}} тук", "Enter {{role}} message here": "Въведете съобщение за {{role}} тук",
"Enter a detail about yourself for your LLMs to recall": "Въведете подробности за себе си, за да се herinnerат вашите LLMs", "Enter a detail about yourself for your LLMs to recall": "Въведете подробности за себе си, за да се herinnerат вашите LLMs",
...@@ -215,6 +214,7 @@ ...@@ -215,6 +214,7 @@
"Export Prompts": "Експортване на промптове", "Export Prompts": "Експортване на промптове",
"Failed to create API Key.": "Неуспешно създаване на API ключ.", "Failed to create API Key.": "Неуспешно създаване на API ключ.",
"Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда", "Failed to read clipboard contents": "Грешка при четене на съдържанието от клипборда",
"Failed to update settings": "",
"February": "Февруари", "February": "Февруари",
"Feel free to add specific details": "Feel free to add specific details", "Feel free to add specific details": "Feel free to add specific details",
"File Mode": "Файл Мод", "File Mode": "Файл Мод",
...@@ -431,11 +431,13 @@ ...@@ -431,11 +431,13 @@
"Set Voice": "Задай Глас", "Set Voice": "Задай Глас",
"Settings": "Настройки", "Settings": "Настройки",
"Settings saved successfully!": "Настройките са запазени успешно!", "Settings saved successfully!": "Настройките са запазени успешно!",
"Settings updated successfully": "",
"Share": "Подели", "Share": "Подели",
"Share Chat": "Подели Чат", "Share Chat": "Подели Чат",
"Share to OpenWebUI Community": "Споделите с OpenWebUI Общността", "Share to OpenWebUI Community": "Споделите с OpenWebUI Общността",
"short-summary": "short-summary", "short-summary": "short-summary",
"Show": "Покажи", "Show": "Покажи",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "Покажи", "Show shortcuts": "Покажи",
"Showcased creativity": "Показана креативност", "Showcased creativity": "Показана креативност",
"sidebar": "sidebar", "sidebar": "sidebar",
......
...@@ -148,7 +148,6 @@ ...@@ -148,7 +148,6 @@
"Deleted {{name}}": "{{name}} মোছা হয়েছে", "Deleted {{name}}": "{{name}} মোছা হয়েছে",
"Description": "বিবরণ", "Description": "বিবরণ",
"Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি", "Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি",
"Disabled": "অক্ষম",
"Discover a model": "একটি মডেল আবিষ্কার করুন", "Discover a model": "একটি মডেল আবিষ্কার করুন",
"Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন", "Discover a prompt": "একটি প্রম্পট খুঁজে বের করুন",
"Discover, download, and explore custom prompts": "কাস্টম প্রম্পটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন", "Discover, download, and explore custom prompts": "কাস্টম প্রম্পটগুলো আবিস্কার, ডাউনলোড এবং এক্সপ্লোর করুন",
...@@ -156,6 +155,7 @@ ...@@ -156,6 +155,7 @@
"Display the username instead of You in the Chat": "চ্যাটে 'আপনি'-র পরবর্তে ইউজারনেম দেখান", "Display the username instead of You in the Chat": "চ্যাটে 'আপনি'-র পরবর্তে ইউজারনেম দেখান",
"Document": "ডকুমেন্ট", "Document": "ডকুমেন্ট",
"Document Settings": "ডকুমেন্ট সেটিংসমূহ", "Document Settings": "ডকুমেন্ট সেটিংসমূহ",
"Documentation": "",
"Documents": "ডকুমেন্টসমূহ", "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 Allow": "অনুমোদন দেবেন না",
...@@ -178,7 +178,6 @@ ...@@ -178,7 +178,6 @@
"Enable Community Sharing": "সম্প্রদায় শেয়ারকরণ সক্ষম করুন", "Enable Community Sharing": "সম্প্রদায় শেয়ারকরণ সক্ষম করুন",
"Enable New Sign Ups": "নতুন সাইনআপ চালু করুন", "Enable New Sign Ups": "নতুন সাইনআপ চালু করুন",
"Enable Web Search": "ওয়েব অনুসন্ধান সক্ষম করুন", "Enable Web Search": "ওয়েব অনুসন্ধান সক্ষম করুন",
"Enabled": "চালু করা হয়েছে",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "আপনার সিএসভি ফাইলটিতে এই ক্রমে 4 টি কলাম অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন: নাম, ইমেল, পাসওয়ার্ড, ভূমিকা।.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "আপনার সিএসভি ফাইলটিতে এই ক্রমে 4 টি কলাম অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন: নাম, ইমেল, পাসওয়ার্ড, ভূমিকা।.",
"Enter {{role}} message here": "{{role}} মেসেজ এখানে লিখুন", "Enter {{role}} message here": "{{role}} মেসেজ এখানে লিখুন",
"Enter a detail about yourself for your LLMs to recall": "আপনার এলএলএমগুলি স্মরণ করার জন্য নিজের সম্পর্কে একটি বিশদ লিখুন", "Enter a detail about yourself for your LLMs to recall": "আপনার এলএলএমগুলি স্মরণ করার জন্য নিজের সম্পর্কে একটি বিশদ লিখুন",
...@@ -215,6 +214,7 @@ ...@@ -215,6 +214,7 @@
"Export Prompts": "প্রম্পটগুলো একপোর্ট করুন", "Export Prompts": "প্রম্পটগুলো একপোর্ট করুন",
"Failed to create API Key.": "API Key তৈরি করা যায়নি।", "Failed to create API Key.": "API Key তৈরি করা যায়নি।",
"Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি", "Failed to read clipboard contents": "ক্লিপবোর্ডের বিষয়বস্তু পড়া সম্ভব হয়নি",
"Failed to update settings": "",
"February": "ফেব্রুয়ারি", "February": "ফেব্রুয়ারি",
"Feel free to add specific details": "নির্দিষ্ট বিবরণ যোগ করতে বিনা দ্বিধায়", "Feel free to add specific details": "নির্দিষ্ট বিবরণ যোগ করতে বিনা দ্বিধায়",
"File Mode": "ফাইল মোড", "File Mode": "ফাইল মোড",
...@@ -431,11 +431,13 @@ ...@@ -431,11 +431,13 @@
"Set Voice": "কন্ঠস্বর নির্ধারণ করুন", "Set Voice": "কন্ঠস্বর নির্ধারণ করুন",
"Settings": "সেটিংসমূহ", "Settings": "সেটিংসমূহ",
"Settings saved successfully!": "সেটিংগুলো সফলভাবে সংরক্ষিত হয়েছে", "Settings saved successfully!": "সেটিংগুলো সফলভাবে সংরক্ষিত হয়েছে",
"Settings updated successfully": "",
"Share": "শেয়ার করুন", "Share": "শেয়ার করুন",
"Share Chat": "চ্যাট শেয়ার করুন", "Share Chat": "চ্যাট শেয়ার করুন",
"Share to OpenWebUI Community": "OpenWebUI কমিউনিটিতে শেয়ার করুন", "Share to OpenWebUI Community": "OpenWebUI কমিউনিটিতে শেয়ার করুন",
"short-summary": "সংক্ষিপ্ত বিবরণ", "short-summary": "সংক্ষিপ্ত বিবরণ",
"Show": "দেখান", "Show": "দেখান",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "শর্টকাটগুলো দেখান", "Show shortcuts": "শর্টকাটগুলো দেখান",
"Showcased creativity": "সৃজনশীলতা প্রদর্শন", "Showcased creativity": "সৃজনশীলতা প্রদর্শন",
"sidebar": "সাইডবার", "sidebar": "সাইডবার",
......
...@@ -148,7 +148,6 @@ ...@@ -148,7 +148,6 @@
"Deleted {{name}}": "Suprimit {{nom}}", "Deleted {{name}}": "Suprimit {{nom}}",
"Description": "Descripció", "Description": "Descripció",
"Didn't fully follow instructions": "No s'ha completat els instruccions", "Didn't fully follow instructions": "No s'ha completat els instruccions",
"Disabled": "Desactivat",
"Discover a model": "Descobreix un model", "Discover a model": "Descobreix un model",
"Discover a prompt": "Descobreix un prompt", "Discover a prompt": "Descobreix un prompt",
"Discover, download, and explore custom prompts": "Descobreix, descarrega i explora prompts personalitzats", "Discover, download, and explore custom prompts": "Descobreix, descarrega i explora prompts personalitzats",
...@@ -156,6 +155,7 @@ ...@@ -156,6 +155,7 @@
"Display the username instead of You in the Chat": "Mostra el nom d'usuari en lloc de 'Tu' al Xat", "Display the username instead of You in the Chat": "Mostra el nom d'usuari en lloc de 'Tu' al Xat",
"Document": "Document", "Document": "Document",
"Document Settings": "Configuració de Documents", "Document Settings": "Configuració de Documents",
"Documentation": "",
"Documents": "Documents", "Documents": "Documents",
"does not make any external connections, and your data stays securely on your locally hosted server.": "no realitza connexions externes, i les teves dades romanen segures al teu servidor allotjat localment.", "does not make any external connections, and your data stays securely on your locally hosted server.": "no realitza connexions externes, i les teves dades romanen segures al teu servidor allotjat localment.",
"Don't Allow": "No Permetre", "Don't Allow": "No Permetre",
...@@ -178,7 +178,6 @@ ...@@ -178,7 +178,6 @@
"Enable Community Sharing": "Activar l'ús compartit de la comunitat", "Enable Community Sharing": "Activar l'ús compartit de la comunitat",
"Enable New Sign Ups": "Permet Noves Inscripcions", "Enable New Sign Ups": "Permet Noves Inscripcions",
"Enable Web Search": "Activa la cerca web", "Enable Web Search": "Activa la cerca web",
"Enabled": "Activat",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que el fitxer CSV inclou 4 columnes en aquest ordre: Nom, Correu Electrònic, Contrasenya, Rol.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que el fitxer CSV inclou 4 columnes en aquest ordre: Nom, Correu Electrònic, Contrasenya, Rol.",
"Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}", "Enter {{role}} message here": "Introdueix aquí el missatge de {{role}}",
"Enter a detail about yourself for your LLMs to recall": "Introdueix un detall sobre tu per que els LLMs puguin recordar-te", "Enter a detail about yourself for your LLMs to recall": "Introdueix un detall sobre tu per que els LLMs puguin recordar-te",
...@@ -215,6 +214,7 @@ ...@@ -215,6 +214,7 @@
"Export Prompts": "Exporta Prompts", "Export Prompts": "Exporta Prompts",
"Failed to create API Key.": "No s'ha pogut crear la clau d'API.", "Failed to create API Key.": "No s'ha pogut crear la clau d'API.",
"Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls", "Failed to read clipboard contents": "No s'ha pogut llegir el contingut del porta-retalls",
"Failed to update settings": "",
"February": "Febrer", "February": "Febrer",
"Feel free to add specific details": "Siusplau, afegeix detalls específics", "Feel free to add specific details": "Siusplau, afegeix detalls específics",
"File Mode": "Mode Arxiu", "File Mode": "Mode Arxiu",
...@@ -432,11 +432,13 @@ ...@@ -432,11 +432,13 @@
"Set Voice": "Estableix Veu", "Set Voice": "Estableix Veu",
"Settings": "Configuracions", "Settings": "Configuracions",
"Settings saved successfully!": "Configuracions guardades amb èxit!", "Settings saved successfully!": "Configuracions guardades amb èxit!",
"Settings updated successfully": "",
"Share": "Compartir", "Share": "Compartir",
"Share Chat": "Compartir el Chat", "Share Chat": "Compartir el Chat",
"Share to OpenWebUI Community": "Comparteix amb la Comunitat OpenWebUI", "Share to OpenWebUI Community": "Comparteix amb la Comunitat OpenWebUI",
"short-summary": "resum curt", "short-summary": "resum curt",
"Show": "Mostra", "Show": "Mostra",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "Mostra dreceres", "Show shortcuts": "Mostra dreceres",
"Showcased creativity": "Mostra la creativitat", "Showcased creativity": "Mostra la creativitat",
"sidebar": "barra lateral", "sidebar": "barra lateral",
......
...@@ -148,7 +148,6 @@ ...@@ -148,7 +148,6 @@
"Deleted {{name}}": "", "Deleted {{name}}": "",
"Description": "Deskripsyon", "Description": "Deskripsyon",
"Didn't fully follow instructions": "", "Didn't fully follow instructions": "",
"Disabled": "Nabaldado",
"Discover a model": "", "Discover a model": "",
"Discover a prompt": "Pagkaplag usa ka prompt", "Discover a prompt": "Pagkaplag usa ka prompt",
"Discover, download, and explore custom prompts": "Pagdiskubre, pag-download ug pagsuhid sa mga naandan nga pag-aghat", "Discover, download, and explore custom prompts": "Pagdiskubre, pag-download ug pagsuhid sa mga naandan nga pag-aghat",
...@@ -156,6 +155,7 @@ ...@@ -156,6 +155,7 @@
"Display the username instead of You in the Chat": "Ipakita ang username imbes nga 'Ikaw' sa Panaghisgutan", "Display the username instead of You in the Chat": "Ipakita ang username imbes nga 'Ikaw' sa Panaghisgutan",
"Document": "Dokumento", "Document": "Dokumento",
"Document Settings": "Mga Setting sa Dokumento", "Document Settings": "Mga Setting sa Dokumento",
"Documentation": "",
"Documents": "Mga dokumento", "Documents": "Mga dokumento",
"does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.", "does not make any external connections, and your data stays securely on your locally hosted server.": "wala maghimo ug eksternal nga koneksyon, ug ang imong data nagpabiling luwas sa imong lokal nga host server.",
"Don't Allow": "Dili tugotan", "Don't Allow": "Dili tugotan",
...@@ -178,7 +178,6 @@ ...@@ -178,7 +178,6 @@
"Enable Community Sharing": "", "Enable Community Sharing": "",
"Enable New Sign Ups": "I-enable ang bag-ong mga rehistro", "Enable New Sign Ups": "I-enable ang bag-ong mga rehistro",
"Enable Web Search": "", "Enable Web Search": "",
"Enabled": "Gipaandar",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi", "Enter {{role}} message here": "Pagsulod sa mensahe {{role}} dinhi",
"Enter a detail about yourself for your LLMs to recall": "", "Enter a detail about yourself for your LLMs to recall": "",
...@@ -215,6 +214,7 @@ ...@@ -215,6 +214,7 @@
"Export Prompts": "Export prompts", "Export Prompts": "Export prompts",
"Failed to create API Key.": "", "Failed to create API Key.": "",
"Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard", "Failed to read clipboard contents": "Napakyas sa pagbasa sa sulod sa clipboard",
"Failed to update settings": "",
"February": "", "February": "",
"Feel free to add specific details": "", "Feel free to add specific details": "",
"File Mode": "File mode", "File Mode": "File mode",
...@@ -431,11 +431,13 @@ ...@@ -431,11 +431,13 @@
"Set Voice": "Ibutang ang tingog", "Set Voice": "Ibutang ang tingog",
"Settings": "Mga setting", "Settings": "Mga setting",
"Settings saved successfully!": "Malampuson nga na-save ang mga setting!", "Settings saved successfully!": "Malampuson nga na-save ang mga setting!",
"Settings updated successfully": "",
"Share": "", "Share": "",
"Share Chat": "", "Share Chat": "",
"Share to OpenWebUI Community": "Ipakigbahin sa komunidad sa OpenWebUI", "Share to OpenWebUI Community": "Ipakigbahin sa komunidad sa OpenWebUI",
"short-summary": "mubo nga summary", "short-summary": "mubo nga summary",
"Show": "Pagpakita", "Show": "Pagpakita",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "Ipakita ang mga shortcut", "Show shortcuts": "Ipakita ang mga shortcut",
"Showcased creativity": "", "Showcased creativity": "",
"sidebar": "lateral bar", "sidebar": "lateral bar",
......
...@@ -148,7 +148,6 @@ ...@@ -148,7 +148,6 @@
"Deleted {{name}}": "Gelöscht {{name}}", "Deleted {{name}}": "Gelöscht {{name}}",
"Description": "Beschreibung", "Description": "Beschreibung",
"Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt", "Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt",
"Disabled": "Deaktiviert",
"Discover a model": "Entdecken Sie ein Modell", "Discover a model": "Entdecken Sie ein Modell",
"Discover a prompt": "Einen Prompt entdecken", "Discover a prompt": "Einen Prompt entdecken",
"Discover, download, and explore custom prompts": "Benutzerdefinierte Prompts entdecken, herunterladen und erkunden", "Discover, download, and explore custom prompts": "Benutzerdefinierte Prompts entdecken, herunterladen und erkunden",
...@@ -156,6 +155,7 @@ ...@@ -156,6 +155,7 @@
"Display the username instead of You in the Chat": "Den Benutzernamen anstelle von 'du' im Chat anzeigen", "Display the username instead of You in the Chat": "Den Benutzernamen anstelle von 'du' im Chat anzeigen",
"Document": "Dokument", "Document": "Dokument",
"Document Settings": "Dokumenteinstellungen", "Document Settings": "Dokumenteinstellungen",
"Documentation": "",
"Documents": "Dokumente", "Documents": "Dokumente",
"does not make any external connections, and your data stays securely on your locally hosted server.": "stellt keine externen Verbindungen her, und Deine Daten bleiben sicher auf Deinen lokal gehosteten Server.", "does not make any external connections, and your data stays securely on your locally hosted server.": "stellt keine externen Verbindungen her, und Deine Daten bleiben sicher auf Deinen lokal gehosteten Server.",
"Don't Allow": "Nicht erlauben", "Don't Allow": "Nicht erlauben",
...@@ -178,7 +178,6 @@ ...@@ -178,7 +178,6 @@
"Enable Community Sharing": "Community-Freigabe aktivieren", "Enable Community Sharing": "Community-Freigabe aktivieren",
"Enable New Sign Ups": "Neue Anmeldungen aktivieren", "Enable New Sign Ups": "Neue Anmeldungen aktivieren",
"Enable Web Search": "Websuche aktivieren", "Enable Web Search": "Websuche aktivieren",
"Enabled": "Aktiviert",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Stellen Sie sicher, dass Ihre CSV-Datei 4 Spalten in dieser Reihenfolge enthält: Name, E-Mail, Passwort, Rolle.", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Stellen Sie sicher, dass Ihre CSV-Datei 4 Spalten in dieser Reihenfolge enthält: Name, E-Mail, Passwort, Rolle.",
"Enter {{role}} message here": "Gib die {{role}} Nachricht hier ein", "Enter {{role}} message here": "Gib die {{role}} Nachricht hier ein",
"Enter a detail about yourself for your LLMs to recall": "Geben Sie einen Detail über sich selbst ein, um für Ihre LLMs zu erinnern", "Enter a detail about yourself for your LLMs to recall": "Geben Sie einen Detail über sich selbst ein, um für Ihre LLMs zu erinnern",
...@@ -215,6 +214,7 @@ ...@@ -215,6 +214,7 @@
"Export Prompts": "Prompts exportieren", "Export Prompts": "Prompts exportieren",
"Failed to create API Key.": "API Key erstellen fehlgeschlagen", "Failed to create API Key.": "API Key erstellen fehlgeschlagen",
"Failed to read clipboard contents": "Fehler beim Lesen des Zwischenablageninhalts", "Failed to read clipboard contents": "Fehler beim Lesen des Zwischenablageninhalts",
"Failed to update settings": "",
"February": "Februar", "February": "Februar",
"Feel free to add specific details": "Ergänze Details.", "Feel free to add specific details": "Ergänze Details.",
"File Mode": "File Modus", "File Mode": "File Modus",
...@@ -431,11 +431,13 @@ ...@@ -431,11 +431,13 @@
"Set Voice": "Stimme festlegen", "Set Voice": "Stimme festlegen",
"Settings": "Einstellungen", "Settings": "Einstellungen",
"Settings saved successfully!": "Einstellungen erfolgreich gespeichert!", "Settings saved successfully!": "Einstellungen erfolgreich gespeichert!",
"Settings updated successfully": "",
"Share": "Teilen", "Share": "Teilen",
"Share Chat": "Chat teilen", "Share Chat": "Chat teilen",
"Share to OpenWebUI Community": "Mit OpenWebUI Community teilen", "Share to OpenWebUI Community": "Mit OpenWebUI Community teilen",
"short-summary": "kurze-zusammenfassung", "short-summary": "kurze-zusammenfassung",
"Show": "Anzeigen", "Show": "Anzeigen",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "Verknüpfungen anzeigen", "Show shortcuts": "Verknüpfungen anzeigen",
"Showcased creativity": "Kreativität zur Schau gestellt", "Showcased creativity": "Kreativität zur Schau gestellt",
"sidebar": "Seitenleiste", "sidebar": "Seitenleiste",
......
...@@ -148,7 +148,6 @@ ...@@ -148,7 +148,6 @@
"Deleted {{name}}": "", "Deleted {{name}}": "",
"Description": "Description", "Description": "Description",
"Didn't fully follow instructions": "", "Didn't fully follow instructions": "",
"Disabled": "Disabled",
"Discover a model": "", "Discover a model": "",
"Discover a prompt": "Discover a prompt", "Discover a prompt": "Discover a prompt",
"Discover, download, and explore custom prompts": "Discover, download, and explore custom prompts", "Discover, download, and explore custom prompts": "Discover, download, and explore custom prompts",
...@@ -156,6 +155,7 @@ ...@@ -156,6 +155,7 @@
"Display the username instead of You in the Chat": "Display username instead of You in Chat", "Display the username instead of You in the Chat": "Display username instead of You in Chat",
"Document": "Document", "Document": "Document",
"Document Settings": "Document Settings", "Document Settings": "Document Settings",
"Documentation": "",
"Documents": "Documents", "Documents": "Documents",
"does not make any external connections, and your data stays securely on your locally hosted server.": "does not connect external, data stays safe locally.", "does not make any external connections, and your data stays securely on your locally hosted server.": "does not connect external, data stays safe locally.",
"Don't Allow": "Don't Allow", "Don't Allow": "Don't Allow",
...@@ -178,7 +178,6 @@ ...@@ -178,7 +178,6 @@
"Enable Community Sharing": "", "Enable Community Sharing": "",
"Enable New Sign Ups": "Enable New Bark Ups", "Enable New Sign Ups": "Enable New Bark Ups",
"Enable Web Search": "", "Enable Web Search": "",
"Enabled": "So Activated",
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
"Enter {{role}} message here": "Enter {{role}} bork here", "Enter {{role}} message here": "Enter {{role}} bork here",
"Enter a detail about yourself for your LLMs to recall": "", "Enter a detail about yourself for your LLMs to recall": "",
...@@ -215,6 +214,7 @@ ...@@ -215,6 +214,7 @@
"Export Prompts": "Export Promptos", "Export Prompts": "Export Promptos",
"Failed to create API Key.": "", "Failed to create API Key.": "",
"Failed to read clipboard contents": "Failed to read clipboard borks", "Failed to read clipboard contents": "Failed to read clipboard borks",
"Failed to update settings": "",
"February": "", "February": "",
"Feel free to add specific details": "", "Feel free to add specific details": "",
"File Mode": "Bark Mode", "File Mode": "Bark Mode",
...@@ -431,11 +431,13 @@ ...@@ -431,11 +431,13 @@
"Set Voice": "Set Voice so speak", "Set Voice": "Set Voice so speak",
"Settings": "Settings much settings", "Settings": "Settings much settings",
"Settings saved successfully!": "Settings saved successfully! Very success!", "Settings saved successfully!": "Settings saved successfully! Very success!",
"Settings updated successfully": "",
"Share": "", "Share": "",
"Share Chat": "", "Share Chat": "",
"Share to OpenWebUI Community": "Share to OpenWebUI Community much community", "Share to OpenWebUI Community": "Share to OpenWebUI Community much community",
"short-summary": "short-summary so short", "short-summary": "short-summary so short",
"Show": "Show much show", "Show": "Show much show",
"Show Admin Details in Account Pending Overlay": "",
"Show shortcuts": "Show shortcuts much shortcut", "Show shortcuts": "Show shortcuts much shortcut",
"Showcased creativity": "", "Showcased creativity": "",
"sidebar": "sidebar much side", "sidebar": "sidebar much side",
......
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