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
|
# Initialize app
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title=config['app']['name'],
|
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
|
# CORS middleware configuration
|
||||||
|
|
@ -325,8 +326,7 @@ async def api_documentation():
|
||||||
return {
|
return {
|
||||||
"app": {
|
"app": {
|
||||||
"name": config['app']['name'],
|
"name": config['app']['name'],
|
||||||
"version": config['app']['version'],
|
"version": config['app']['version']
|
||||||
"description": config['app']['tagline']
|
|
||||||
},
|
},
|
||||||
"endpoints": [
|
"endpoints": [
|
||||||
{
|
{
|
||||||
|
|
@ -339,7 +339,7 @@ async def api_documentation():
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"path": "/api/config",
|
"path": "/api/config",
|
||||||
"description": "Get application configuration",
|
"description": "Get application configuration",
|
||||||
"response": "{ name, tagline, version, searchEnabled }"
|
"response": "{ name, version, searchEnabled }"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
|
|
@ -489,7 +489,6 @@ async def get_config():
|
||||||
"""Get app configuration for frontend"""
|
"""Get app configuration for frontend"""
|
||||||
return {
|
return {
|
||||||
"name": config['app']['name'],
|
"name": config['app']['name'],
|
||||||
"tagline": config['app']['tagline'],
|
|
||||||
"version": config['app']['version'],
|
"version": config['app']['version'],
|
||||||
"searchEnabled": config['search']['enabled'],
|
"searchEnabled": config['search']['enabled'],
|
||||||
"demoMode": DEMO_MODE, # Expose demo mode flag to frontend
|
"demoMode": DEMO_MODE, # Expose demo mode flag to frontend
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
app:
|
app:
|
||||||
name: "NoteDiscovery"
|
name: "NoteDiscovery"
|
||||||
tagline: "Your Self-Hosted Knowledge Base"
|
# Tagline is now localized - see locales/*.json files (app.tagline key)
|
||||||
|
|
||||||
server:
|
server:
|
||||||
host: "0.0.0.0"
|
host: "0.0.0.0"
|
||||||
|
|
@ -28,7 +28,7 @@ search:
|
||||||
authentication:
|
authentication:
|
||||||
# Authentication settings
|
# Authentication settings
|
||||||
# Set enabled to true to require login
|
# Set enabled to true to require login
|
||||||
enabled: false
|
enabled: true
|
||||||
|
|
||||||
# ⚠️ SECURITY WARNING: Change these values before exposing to the internet!
|
# ⚠️ SECURITY WARNING: Change these values before exposing to the internet!
|
||||||
# Default values below are for LOCAL TESTING ONLY
|
# Default values below are for LOCAL TESTING ONLY
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ function noteApp() {
|
||||||
return {
|
return {
|
||||||
// App state
|
// App state
|
||||||
appName: 'NoteDiscovery',
|
appName: 'NoteDiscovery',
|
||||||
appTagline: 'Your Self-Hosted Knowledge Base',
|
|
||||||
appVersion: '0.0.0',
|
appVersion: '0.0.0',
|
||||||
authEnabled: false,
|
authEnabled: false,
|
||||||
notes: [],
|
notes: [],
|
||||||
|
|
@ -568,7 +567,6 @@ function noteApp() {
|
||||||
const response = await fetch('/api/config');
|
const response = await fetch('/api/config');
|
||||||
const config = await response.json();
|
const config = await response.json();
|
||||||
this.appName = config.name;
|
this.appName = config.name;
|
||||||
this.appTagline = config.tagline;
|
|
||||||
this.appVersion = config.version || '0.0.0';
|
this.appVersion = config.version || '0.0.0';
|
||||||
this.authEnabled = config.authentication?.enabled || false;
|
this.authEnabled = config.authentication?.enabled || false;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -1441,7 +1439,7 @@ function noteApp() {
|
||||||
</button>
|
</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 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>
|
<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>
|
</span>
|
||||||
</div>
|
</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()">
|
<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 -->
|
<!-- Empty state -->
|
||||||
<template x-if="notes.length === 0 && allFolders.length === 0">
|
<template x-if="notes.length === 0 && allFolders.length === 0">
|
||||||
<div class="px-3 py-4 text-sm text-center" style="color: var(--text-tertiary);">
|
<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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -1763,7 +1764,7 @@
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<h1 class="text-3xl font-bold mb-2" style="color: var(--text-primary);" x-text="appName"></h1>
|
<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 -->
|
<!-- 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;">
|
<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">
|
<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);">
|
<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 class="font-semibold" style="color: var(--text-primary);">
|
||||||
<span x-text="homepageNotes().length"></span>
|
<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>
|
||||||
<span x-show="homepageFolders().length > 0">
|
<span x-show="homepageFolders().length > 0">
|
||||||
<span x-text="homepageFolders().length"></span>
|
<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>
|
</span>
|
||||||
<button
|
<button
|
||||||
@click="dropdownTargetFolder = selectedHomepageFolder; toggleNewDropdown($event)"
|
@click="dropdownTargetFolder = selectedHomepageFolder; toggleNewDropdown($event)"
|
||||||
|
|
@ -1875,7 +1876,7 @@
|
||||||
|
|
||||||
<!-- Folder Metadata -->
|
<!-- Folder Metadata -->
|
||||||
<div class="flex items-center justify-between text-xs mt-auto pt-2" style="color: var(--text-tertiary);">
|
<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">
|
<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>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,10 @@
|
||||||
"flag": "🇩🇪"
|
"flag": "🇩🇪"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"app": {
|
||||||
|
"tagline": "Deine Selbstgehostete Wissensdatenbank"
|
||||||
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Speichern",
|
"save": "Speichern",
|
||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
|
|
@ -37,6 +41,8 @@
|
||||||
"drag_hint": "💡 Ziehen=Verschieben",
|
"drag_hint": "💡 Ziehen=Verschieben",
|
||||||
"root_folder": "📂 Hauptordner",
|
"root_folder": "📂 Hauptordner",
|
||||||
"no_notes": "Noch keine Notizen. Erstelle deine erste Notiz!",
|
"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_favorites": "Noch keine Favoriten",
|
||||||
"no_results": "Keine Ergebnisse gefunden",
|
"no_results": "Keine Ergebnisse gefunden",
|
||||||
"expand_all": "Alle Ordner aufklappen",
|
"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_name_with_path": "Neuen Ordner erstellen.\nOrdnerpfad eingeben (z.B. \"Projekte\" oder \"Arbeit/2025\"):",
|
||||||
"prompt_rename": "Ordner \"{{name}}\" umbenennen zu:",
|
"prompt_rename": "Ordner \"{{name}}\" umbenennen zu:",
|
||||||
"invalid_name": "Ungültiger Ordnername.",
|
"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": {
|
"toolbar": {
|
||||||
|
|
@ -178,7 +185,11 @@
|
||||||
"get_started": "Erstelle etwas, um loszulegen",
|
"get_started": "Erstelle etwas, um loszulegen",
|
||||||
"no_notes_title": "Noch keine Notizen",
|
"no_notes_title": "Noch keine Notizen",
|
||||||
"no_notes_desc": "Erstelle deine erste Notiz oder Ordner",
|
"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": "🇺🇸"
|
"flag": "🇺🇸"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"app": {
|
||||||
|
"tagline": "Your Self-Hosted Knowledge Base"
|
||||||
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
|
|
@ -37,6 +41,8 @@
|
||||||
"drag_hint": "💡 Drag=Move",
|
"drag_hint": "💡 Drag=Move",
|
||||||
"root_folder": "📂 Root folder",
|
"root_folder": "📂 Root folder",
|
||||||
"no_notes": "No notes yet. Create your first note!",
|
"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_favorites": "No favorites yet",
|
||||||
"no_results": "No results found",
|
"no_results": "No results found",
|
||||||
"expand_all": "Expand all folders",
|
"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_name_with_path": "Create new folder.\nEnter folder path (e.g., \"Projects\" or \"Work/2025\"):",
|
||||||
"prompt_rename": "Rename folder \"{{name}}\" to:",
|
"prompt_rename": "Rename folder \"{{name}}\" to:",
|
||||||
"invalid_name": "Invalid folder name.",
|
"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": {
|
"toolbar": {
|
||||||
|
|
@ -178,7 +185,11 @@
|
||||||
"get_started": "Create something to get started",
|
"get_started": "Create something to get started",
|
||||||
"no_notes_title": "No notes yet",
|
"no_notes_title": "No notes yet",
|
||||||
"no_notes_desc": "Create your first note or folder",
|
"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": "🇪🇸"
|
"flag": "🇪🇸"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"app": {
|
||||||
|
"tagline": "Tu Base de Conocimientos Autoalojada"
|
||||||
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
|
|
@ -37,6 +41,8 @@
|
||||||
"drag_hint": "💡 Arrastrar=Mover",
|
"drag_hint": "💡 Arrastrar=Mover",
|
||||||
"root_folder": "📂 Carpeta raíz",
|
"root_folder": "📂 Carpeta raíz",
|
||||||
"no_notes": "Aún no hay notas. ¡Crea tu primera nota!",
|
"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_favorites": "Aún no hay favoritos",
|
||||||
"no_results": "No se encontraron resultados",
|
"no_results": "No se encontraron resultados",
|
||||||
"expand_all": "Expandir todas las carpetas",
|
"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_name_with_path": "Crear nueva carpeta.\nIntroduce la ruta de la carpeta (ej., \"Proyectos\" o \"Trabajo/2025\"):",
|
||||||
"prompt_rename": "Renombrar carpeta \"{{name}}\" a:",
|
"prompt_rename": "Renombrar carpeta \"{{name}}\" a:",
|
||||||
"invalid_name": "Nombre de carpeta inválido.",
|
"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": {
|
"toolbar": {
|
||||||
|
|
@ -178,7 +185,11 @@
|
||||||
"get_started": "Crea algo para empezar",
|
"get_started": "Crea algo para empezar",
|
||||||
"no_notes_title": "Aún no hay notas",
|
"no_notes_title": "Aún no hay notas",
|
||||||
"no_notes_desc": "Crea tu primera nota o carpeta",
|
"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": "🇫🇷"
|
"flag": "🇫🇷"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"app": {
|
||||||
|
"tagline": "Votre Base de Connaissances Auto-Hébergée"
|
||||||
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Enregistrer",
|
"save": "Enregistrer",
|
||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
|
|
@ -37,6 +41,8 @@
|
||||||
"drag_hint": "💡 Glisser=Déplacer",
|
"drag_hint": "💡 Glisser=Déplacer",
|
||||||
"root_folder": "📂 Dossier racine",
|
"root_folder": "📂 Dossier racine",
|
||||||
"no_notes": "Pas encore de notes. Créez votre première note !",
|
"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_favorites": "Pas encore de favoris",
|
||||||
"no_results": "Aucun résultat trouvé",
|
"no_results": "Aucun résultat trouvé",
|
||||||
"expand_all": "Développer tous les dossiers",
|
"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_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 :",
|
"prompt_rename": "Renommer le dossier \"{{name}}\" en :",
|
||||||
"invalid_name": "Nom de dossier invalide.",
|
"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": {
|
"toolbar": {
|
||||||
|
|
@ -178,7 +185,11 @@
|
||||||
"get_started": "Créez quelque chose pour commencer",
|
"get_started": "Créez quelque chose pour commencer",
|
||||||
"no_notes_title": "Pas encore de notes",
|
"no_notes_title": "Pas encore de notes",
|
||||||
"no_notes_desc": "Créez votre première note ou dossier",
|
"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