added some missing translations
This commit is contained in:
parent
6ffd474752
commit
849ff88134
|
|
@ -80,8 +80,9 @@ if 'AUTHENTICATION_SECRET_KEY' in os.environ:
|
|||
# Initialize app
|
||||
app = FastAPI(
|
||||
title=config['app']['name'],
|
||||
description=config['app']['tagline'],
|
||||
version=config['app']['version']
|
||||
version=config['app']['version'],
|
||||
docs_url=None, # Disable Swagger UI at /docs
|
||||
redoc_url=None # Disable ReDoc at /redoc
|
||||
)
|
||||
|
||||
# CORS middleware configuration
|
||||
|
|
@ -325,8 +326,7 @@ async def api_documentation():
|
|||
return {
|
||||
"app": {
|
||||
"name": config['app']['name'],
|
||||
"version": config['app']['version'],
|
||||
"description": config['app']['tagline']
|
||||
"version": config['app']['version']
|
||||
},
|
||||
"endpoints": [
|
||||
{
|
||||
|
|
@ -339,7 +339,7 @@ async def api_documentation():
|
|||
"method": "GET",
|
||||
"path": "/api/config",
|
||||
"description": "Get application configuration",
|
||||
"response": "{ name, tagline, version, searchEnabled }"
|
||||
"response": "{ name, version, searchEnabled }"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
|
|
@ -489,7 +489,6 @@ async def get_config():
|
|||
"""Get app configuration for frontend"""
|
||||
return {
|
||||
"name": config['app']['name'],
|
||||
"tagline": config['app']['tagline'],
|
||||
"version": config['app']['version'],
|
||||
"searchEnabled": config['search']['enabled'],
|
||||
"demoMode": DEMO_MODE, # Expose demo mode flag to frontend
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
app:
|
||||
name: "NoteDiscovery"
|
||||
tagline: "Your Self-Hosted Knowledge Base"
|
||||
# Tagline is now localized - see locales/*.json files (app.tagline key)
|
||||
|
||||
server:
|
||||
host: "0.0.0.0"
|
||||
|
|
@ -28,7 +28,7 @@ search:
|
|||
authentication:
|
||||
# Authentication settings
|
||||
# Set enabled to true to require login
|
||||
enabled: false
|
||||
enabled: true
|
||||
|
||||
# ⚠️ SECURITY WARNING: Change these values before exposing to the internet!
|
||||
# Default values below are for LOCAL TESTING ONLY
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ function noteApp() {
|
|||
return {
|
||||
// App state
|
||||
appName: 'NoteDiscovery',
|
||||
appTagline: 'Your Self-Hosted Knowledge Base',
|
||||
appVersion: '0.0.0',
|
||||
authEnabled: false,
|
||||
notes: [],
|
||||
|
|
@ -568,7 +567,6 @@ function noteApp() {
|
|||
const response = await fetch('/api/config');
|
||||
const config = await response.json();
|
||||
this.appName = config.name;
|
||||
this.appTagline = config.tagline;
|
||||
this.appVersion = config.version || '0.0.0';
|
||||
this.authEnabled = config.authentication?.enabled || false;
|
||||
} catch (error) {
|
||||
|
|
@ -1441,7 +1439,7 @@ function noteApp() {
|
|||
</button>
|
||||
<span class="flex items-center gap-1 flex-1" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 500; pointer-events: none;">
|
||||
<span>${folder.name}</span>
|
||||
${folder.notes.length === 0 && (!folder.children || Object.keys(folder.children).length === 0) ? '<span class="text-xs" style="color: var(--text-tertiary); font-weight: 400;">(empty)</span>' : ''}
|
||||
${folder.notes.length === 0 && (!folder.children || Object.keys(folder.children).length === 0) ? `<span class="text-xs" style="color: var(--text-tertiary); font-weight: 400;">(${this.t('folders.empty')})</span>` : ''}
|
||||
</span>
|
||||
</div>
|
||||
<div class="hover-buttons flex gap-1 transition-opacity absolute right-2 top-1/2 transform -translate-y-1/2" style="opacity: 0; pointer-events: none; background: linear-gradient(to right, transparent, var(--bg-hover) 20%, var(--bg-hover)); padding-left: 20px;" onclick="event.stopPropagation()">
|
||||
|
|
|
|||
|
|
@ -1394,7 +1394,8 @@
|
|||
<!-- Empty state -->
|
||||
<template x-if="notes.length === 0 && allFolders.length === 0">
|
||||
<div class="px-3 py-4 text-sm text-center" style="color: var(--text-tertiary);">
|
||||
No notes or folders yet.<br>Create your first note or folder!
|
||||
<span x-text="t('sidebar.no_notes_yet')"></span><br>
|
||||
<span x-text="t('sidebar.create_first')"></span>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
|
@ -1763,7 +1764,7 @@
|
|||
<!-- Header -->
|
||||
<div class="mb-6">
|
||||
<h1 class="text-3xl font-bold mb-2" style="color: var(--text-primary);" x-text="appName"></h1>
|
||||
<p class="text-lg" style="color: var(--text-secondary);" x-text="appTagline"></p>
|
||||
<p class="text-lg" style="color: var(--text-secondary);" x-text="t('app.tagline')"></p>
|
||||
<!-- Demo Mode Warning Banner -->
|
||||
<div x-data="{ showDemoBanner: false }" x-init="fetch('/api/config').then(r => r.json()).then(d => showDemoBanner = d.demoMode || false)" x-show="showDemoBanner" class="mt-4 flex items-center px-4 py-2.5 text-sm rounded-lg" style="background: linear-gradient(135deg, #ff6b6b 0%, #ff8e53 100%); color: white; font-weight: 500;">
|
||||
<svg class="w-5 h-5 mr-2 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
|
|
@ -1800,11 +1801,11 @@
|
|||
<div class="flex flex-wrap items-center gap-4 text-sm" style="color: var(--text-secondary);">
|
||||
<span class="font-semibold" style="color: var(--text-primary);">
|
||||
<span x-text="homepageNotes().length"></span>
|
||||
<span x-text="homepageNotes().length === 1 ? 'note' : 'notes'"></span>
|
||||
<span x-text="homepageNotes().length === 1 ? t('homepage.note_singular') : t('homepage.note_plural')"></span>
|
||||
</span>
|
||||
<span x-show="homepageFolders().length > 0">
|
||||
<span x-text="homepageFolders().length"></span>
|
||||
<span x-text="homepageFolders().length === 1 ? 'folder' : 'folders'"></span>
|
||||
<span x-text="homepageFolders().length === 1 ? t('homepage.folder_singular') : t('homepage.folder_plural')"></span>
|
||||
</span>
|
||||
<button
|
||||
@click="dropdownTargetFolder = selectedHomepageFolder; toggleNewDropdown($event)"
|
||||
|
|
@ -1875,7 +1876,7 @@
|
|||
|
||||
<!-- Folder Metadata -->
|
||||
<div class="flex items-center justify-between text-xs mt-auto pt-2" style="color: var(--text-tertiary);">
|
||||
<span x-text="folder.noteCount + ' ' + (folder.noteCount === 1 ? 'note' : 'notes')"></span>
|
||||
<span x-text="folder.noteCount + ' ' + (folder.noteCount === 1 ? t('homepage.note_singular') : t('homepage.note_plural'))"></span>
|
||||
<svg class="w-4 h-4" style="color: var(--accent-primary);" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
|
||||
</svg>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@
|
|||
"flag": "🇩🇪"
|
||||
},
|
||||
|
||||
"app": {
|
||||
"tagline": "Deine Selbstgehostete Wissensdatenbank"
|
||||
},
|
||||
|
||||
"common": {
|
||||
"save": "Speichern",
|
||||
"cancel": "Abbrechen",
|
||||
|
|
@ -37,6 +41,8 @@
|
|||
"drag_hint": "💡 Ziehen=Verschieben",
|
||||
"root_folder": "📂 Hauptordner",
|
||||
"no_notes": "Noch keine Notizen. Erstelle deine erste Notiz!",
|
||||
"no_notes_yet": "Noch keine Notizen oder Ordner.",
|
||||
"create_first": "Erstelle deine erste Notiz oder Ordner!",
|
||||
"no_favorites": "Noch keine Favoriten",
|
||||
"no_results": "Keine Ergebnisse gefunden",
|
||||
"expand_all": "Alle Ordner aufklappen",
|
||||
|
|
@ -86,7 +92,8 @@
|
|||
"prompt_name_with_path": "Neuen Ordner erstellen.\nOrdnerpfad eingeben (z.B. \"Projekte\" oder \"Arbeit/2025\"):",
|
||||
"prompt_rename": "Ordner \"{{name}}\" umbenennen zu:",
|
||||
"invalid_name": "Ungültiger Ordnername.",
|
||||
"cannot_move_into_self": "Ordner kann nicht in sich selbst oder einen Unterordner verschoben werden."
|
||||
"cannot_move_into_self": "Ordner kann nicht in sich selbst oder einen Unterordner verschoben werden.",
|
||||
"empty": "leer"
|
||||
},
|
||||
|
||||
"toolbar": {
|
||||
|
|
@ -178,7 +185,11 @@
|
|||
"get_started": "Erstelle etwas, um loszulegen",
|
||||
"no_notes_title": "Noch keine Notizen",
|
||||
"no_notes_desc": "Erstelle deine erste Notiz oder Ordner",
|
||||
"folder_empty": "Dieser Ordner ist leer"
|
||||
"folder_empty": "Dieser Ordner ist leer",
|
||||
"note_singular": "Notiz",
|
||||
"note_plural": "Notizen",
|
||||
"folder_singular": "Ordner",
|
||||
"folder_plural": "Ordner"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@
|
|||
"flag": "🇺🇸"
|
||||
},
|
||||
|
||||
"app": {
|
||||
"tagline": "Your Self-Hosted Knowledge Base"
|
||||
},
|
||||
|
||||
"common": {
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
|
|
@ -37,6 +41,8 @@
|
|||
"drag_hint": "💡 Drag=Move",
|
||||
"root_folder": "📂 Root folder",
|
||||
"no_notes": "No notes yet. Create your first note!",
|
||||
"no_notes_yet": "No notes or folders yet.",
|
||||
"create_first": "Create your first note or folder!",
|
||||
"no_favorites": "No favorites yet",
|
||||
"no_results": "No results found",
|
||||
"expand_all": "Expand all folders",
|
||||
|
|
@ -86,7 +92,8 @@
|
|||
"prompt_name_with_path": "Create new folder.\nEnter folder path (e.g., \"Projects\" or \"Work/2025\"):",
|
||||
"prompt_rename": "Rename folder \"{{name}}\" to:",
|
||||
"invalid_name": "Invalid folder name.",
|
||||
"cannot_move_into_self": "Cannot move folder into itself or its subfolder."
|
||||
"cannot_move_into_self": "Cannot move folder into itself or its subfolder.",
|
||||
"empty": "empty"
|
||||
},
|
||||
|
||||
"toolbar": {
|
||||
|
|
@ -178,7 +185,11 @@
|
|||
"get_started": "Create something to get started",
|
||||
"no_notes_title": "No notes yet",
|
||||
"no_notes_desc": "Create your first note or folder",
|
||||
"folder_empty": "This folder is empty"
|
||||
"folder_empty": "This folder is empty",
|
||||
"note_singular": "note",
|
||||
"note_plural": "notes",
|
||||
"folder_singular": "folder",
|
||||
"folder_plural": "folders"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@
|
|||
"flag": "🇪🇸"
|
||||
},
|
||||
|
||||
"app": {
|
||||
"tagline": "Tu Base de Conocimientos Autoalojada"
|
||||
},
|
||||
|
||||
"common": {
|
||||
"save": "Guardar",
|
||||
"cancel": "Cancelar",
|
||||
|
|
@ -37,6 +41,8 @@
|
|||
"drag_hint": "💡 Arrastrar=Mover",
|
||||
"root_folder": "📂 Carpeta raíz",
|
||||
"no_notes": "Aún no hay notas. ¡Crea tu primera nota!",
|
||||
"no_notes_yet": "Aún no hay notas ni carpetas.",
|
||||
"create_first": "¡Crea tu primera nota o carpeta!",
|
||||
"no_favorites": "Aún no hay favoritos",
|
||||
"no_results": "No se encontraron resultados",
|
||||
"expand_all": "Expandir todas las carpetas",
|
||||
|
|
@ -86,7 +92,8 @@
|
|||
"prompt_name_with_path": "Crear nueva carpeta.\nIntroduce la ruta de la carpeta (ej., \"Proyectos\" o \"Trabajo/2025\"):",
|
||||
"prompt_rename": "Renombrar carpeta \"{{name}}\" a:",
|
||||
"invalid_name": "Nombre de carpeta inválido.",
|
||||
"cannot_move_into_self": "No se puede mover una carpeta dentro de sí misma o de una subcarpeta."
|
||||
"cannot_move_into_self": "No se puede mover una carpeta dentro de sí misma o de una subcarpeta.",
|
||||
"empty": "vacía"
|
||||
},
|
||||
|
||||
"toolbar": {
|
||||
|
|
@ -178,7 +185,11 @@
|
|||
"get_started": "Crea algo para empezar",
|
||||
"no_notes_title": "Aún no hay notas",
|
||||
"no_notes_desc": "Crea tu primera nota o carpeta",
|
||||
"folder_empty": "Esta carpeta está vacía"
|
||||
"folder_empty": "Esta carpeta está vacía",
|
||||
"note_singular": "nota",
|
||||
"note_plural": "notas",
|
||||
"folder_singular": "carpeta",
|
||||
"folder_plural": "carpetas"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@
|
|||
"flag": "🇫🇷"
|
||||
},
|
||||
|
||||
"app": {
|
||||
"tagline": "Votre Base de Connaissances Auto-Hébergée"
|
||||
},
|
||||
|
||||
"common": {
|
||||
"save": "Enregistrer",
|
||||
"cancel": "Annuler",
|
||||
|
|
@ -37,6 +41,8 @@
|
|||
"drag_hint": "💡 Glisser=Déplacer",
|
||||
"root_folder": "📂 Dossier racine",
|
||||
"no_notes": "Pas encore de notes. Créez votre première note !",
|
||||
"no_notes_yet": "Pas encore de notes ni de dossiers.",
|
||||
"create_first": "Créez votre première note ou dossier !",
|
||||
"no_favorites": "Pas encore de favoris",
|
||||
"no_results": "Aucun résultat trouvé",
|
||||
"expand_all": "Développer tous les dossiers",
|
||||
|
|
@ -86,7 +92,8 @@
|
|||
"prompt_name_with_path": "Créer un nouveau dossier.\nEntrez le chemin du dossier (ex. \"Projets\" ou \"Travail/2025\") :",
|
||||
"prompt_rename": "Renommer le dossier \"{{name}}\" en :",
|
||||
"invalid_name": "Nom de dossier invalide.",
|
||||
"cannot_move_into_self": "Impossible de déplacer un dossier dans lui-même ou dans un sous-dossier."
|
||||
"cannot_move_into_self": "Impossible de déplacer un dossier dans lui-même ou dans un sous-dossier.",
|
||||
"empty": "vide"
|
||||
},
|
||||
|
||||
"toolbar": {
|
||||
|
|
@ -178,7 +185,11 @@
|
|||
"get_started": "Créez quelque chose pour commencer",
|
||||
"no_notes_title": "Pas encore de notes",
|
||||
"no_notes_desc": "Créez votre première note ou dossier",
|
||||
"folder_empty": "Ce dossier est vide"
|
||||
"folder_empty": "Ce dossier est vide",
|
||||
"note_singular": "note",
|
||||
"note_plural": "notes",
|
||||
"folder_singular": "dossier",
|
||||
"folder_plural": "dossiers"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue