Merge pull request #213 from gamosoft/features/drawings
Features/drawings
This commit is contained in:
commit
b15271ddcf
|
|
@ -64,6 +64,7 @@ NoteDiscovery is a **lightweight, self-hosted note-taking application** that put
|
||||||
- 🧮 **Math Support** - LaTeX/MathJax for beautiful equations
|
- 🧮 **Math Support** - LaTeX/MathJax for beautiful equations
|
||||||
- 📄 **HTML Export & Print** - Export notes as standalone HTML or print
|
- 📄 **HTML Export & Print** - Export notes as standalone HTML or print
|
||||||
- 🕸️ **Graph View** - Interactive visualization of connected notes
|
- 🕸️ **Graph View** - Interactive visualization of connected notes
|
||||||
|
- ✏️ **Drawing editor** - In-app sketches as `drawing-*.png` next to your notes — see [documentation/DRAWING.md](documentation/DRAWING.md)
|
||||||
- ⭐ **Favorites** - Star your most-used notes for instant access
|
- ⭐ **Favorites** - Star your most-used notes for instant access
|
||||||
- 📑 **Outline Panel** - Navigate headings with click-to-jump TOC
|
- 📑 **Outline Panel** - Navigate headings with click-to-jump TOC
|
||||||
- 🤖 **AI Assistant Ready** - MCP integration for Claude, Cursor & more
|
- 🤖 **AI Assistant Ready** - MCP integration for Claude, Cursor & more
|
||||||
|
|
@ -240,6 +241,7 @@ Want to learn more?
|
||||||
|
|
||||||
- 🎨 **[THEMES.md](documentation/THEMES.md)** - Theme customization and creating custom themes
|
- 🎨 **[THEMES.md](documentation/THEMES.md)** - Theme customization and creating custom themes
|
||||||
- ✨ **[FEATURES.md](documentation/FEATURES.md)** - Complete feature list and keyboard shortcuts
|
- ✨ **[FEATURES.md](documentation/FEATURES.md)** - Complete feature list and keyboard shortcuts
|
||||||
|
- ✏️ **[DRAWING.md](documentation/DRAWING.md)** - Built-in drawing editor (`drawing-*.png`), save behavior, and API notes
|
||||||
- 🏷️ **[TAGS.md](documentation/TAGS.md)** - Organize notes with tags and combined filtering
|
- 🏷️ **[TAGS.md](documentation/TAGS.md)** - Organize notes with tags and combined filtering
|
||||||
- 📋 **[TEMPLATES.md](documentation/TEMPLATES.md)** - Create notes from reusable templates with dynamic placeholders
|
- 📋 **[TEMPLATES.md](documentation/TEMPLATES.md)** - Create notes from reusable templates with dynamic placeholders
|
||||||
- 🧮 **[MATHJAX.md](documentation/MATHJAX.md)** - LaTeX/Math notation examples and syntax reference
|
- 🧮 **[MATHJAX.md](documentation/MATHJAX.md)** - LaTeX/Math notation examples and syntax reference
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ def get_media_as_base64(media_path: Path) -> Optional[Tuple[str, str]]:
|
||||||
def get_image_as_base64(image_path: Path) -> Optional[str]:
|
def get_image_as_base64(image_path: Path) -> Optional[str]:
|
||||||
"""Read an image file and return it as a base64 data URL."""
|
"""Read an image file and return it as a base64 data URL."""
|
||||||
result = get_media_as_base64(image_path)
|
result = get_media_as_base64(image_path)
|
||||||
if result and result[1] == 'image':
|
if result and result[1] in ('image', 'drawing'):
|
||||||
return result[0]
|
return result[0]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -625,11 +625,72 @@ async def get_media(media_path: str):
|
||||||
raise HTTPException(status_code=500, detail=safe_error_message(e, "Failed to load media file"))
|
raise HTTPException(status_code=500, detail=safe_error_message(e, "Failed to load media file"))
|
||||||
|
|
||||||
|
|
||||||
|
@api_router.put("/media/{media_path:path}", tags=["Media"])
|
||||||
|
@limiter.limit("120/minute")
|
||||||
|
async def put_media(media_path: str, request: Request):
|
||||||
|
"""
|
||||||
|
Overwrite an existing media file in place (used for saving drawing PNGs).
|
||||||
|
Only files named drawing-*.png are accepted to avoid accidental overwrites.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
from backend.utils import ALL_MEDIA_EXTENSIONS
|
||||||
|
|
||||||
|
notes_dir = config['storage']['notes_dir']
|
||||||
|
full_path = Path(notes_dir) / media_path
|
||||||
|
|
||||||
|
if not validate_path_security(notes_dir, full_path):
|
||||||
|
raise HTTPException(status_code=403, detail="Access denied")
|
||||||
|
|
||||||
|
name_lower = full_path.name.lower()
|
||||||
|
if not (name_lower.startswith('drawing-') and name_lower.endswith('.png')):
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=400,
|
||||||
|
detail="Only drawing PNG files (drawing-*.png) can be updated in place",
|
||||||
|
)
|
||||||
|
|
||||||
|
if full_path.suffix.lower() not in ALL_MEDIA_EXTENSIONS:
|
||||||
|
raise HTTPException(status_code=400, detail="Not an allowed media file")
|
||||||
|
|
||||||
|
if not full_path.exists() or not full_path.is_file():
|
||||||
|
raise HTTPException(status_code=404, detail="File not found")
|
||||||
|
|
||||||
|
body = await request.body()
|
||||||
|
max_size = UPLOAD_MAX_IMAGE_MB * 1024 * 1024
|
||||||
|
if len(body) > max_size:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=400,
|
||||||
|
detail=f"File too large. Maximum size: {UPLOAD_MAX_IMAGE_MB}MB",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Reject non-PNG payloads (defense in depth; path already restricts to .png)
|
||||||
|
if len(body) < 8 or body[:8] != b"\x89PNG\r\n\x1a\n":
|
||||||
|
raise HTTPException(status_code=400, detail="Body must be a valid PNG image")
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(full_path, 'wb') as f:
|
||||||
|
f.write(body)
|
||||||
|
except OSError as e:
|
||||||
|
raise HTTPException(status_code=500, detail=safe_error_message(e, "Failed to save file"))
|
||||||
|
|
||||||
|
return {"success": True, "path": media_path}
|
||||||
|
except HTTPException:
|
||||||
|
raise
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500, detail=safe_error_message(e, "Failed to update media file"))
|
||||||
|
|
||||||
|
|
||||||
@api_router.post("/upload-media", tags=["Media"])
|
@api_router.post("/upload-media", tags=["Media"])
|
||||||
@limiter.limit("20/minute")
|
@limiter.limit("20/minute")
|
||||||
async def upload_media(request: Request, file: UploadFile = File(...), note_path: str = Form(...)):
|
async def upload_media(
|
||||||
|
request: Request,
|
||||||
|
file: UploadFile = File(...),
|
||||||
|
note_path: str = Form(""),
|
||||||
|
content_folder: str = Form(""),
|
||||||
|
next_to_notes: str = Form(""),
|
||||||
|
):
|
||||||
"""
|
"""
|
||||||
Upload a media file (image, audio, video, PDF) and save it to the attachments directory.
|
Upload a media file (image, audio, video, PDF) and save it to the attachments directory,
|
||||||
|
or (when next_to_notes=1) save a new drawing PNG next to markdown notes in content_folder.
|
||||||
Returns the relative path for markdown linking.
|
Returns the relative path for markdown linking.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
|
|
@ -677,6 +738,32 @@ async def upload_media(request: Request, file: UploadFile = File(...), note_path
|
||||||
detail=f"File too large. Maximum size for {media_type or 'this type'}: {max_size // (1024*1024)}MB. Uploaded: {len(file_data) / 1024 / 1024:.2f}MB"
|
detail=f"File too large. Maximum size for {media_type or 'this type'}: {max_size // (1024*1024)}MB. Uploaded: {len(file_data) / 1024 / 1024:.2f}MB"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (next_to_notes or "").strip() == "1":
|
||||||
|
is_png = file.content_type in ("image/png",) or (file.filename and file.filename.lower().endswith(".png"))
|
||||||
|
if not is_png:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=400,
|
||||||
|
detail="next_to_notes requires a PNG file",
|
||||||
|
)
|
||||||
|
file_path = save_uploaded_image(
|
||||||
|
config["storage"]["notes_dir"],
|
||||||
|
"",
|
||||||
|
file.filename or "drawing.png",
|
||||||
|
file_data,
|
||||||
|
sibling_folder=content_folder or "",
|
||||||
|
)
|
||||||
|
if not file_path:
|
||||||
|
raise HTTPException(status_code=500, detail="Failed to save drawing")
|
||||||
|
out_name = Path(file_path).name
|
||||||
|
media_type = get_media_type(out_name) or "drawing"
|
||||||
|
return {
|
||||||
|
"success": True,
|
||||||
|
"path": file_path,
|
||||||
|
"filename": out_name,
|
||||||
|
"type": media_type,
|
||||||
|
"message": "Drawing created",
|
||||||
|
}
|
||||||
|
|
||||||
# Save the file (reusing image save function - it works for any file)
|
# Save the file (reusing image save function - it works for any file)
|
||||||
file_path = save_uploaded_image(
|
file_path = save_uploaded_image(
|
||||||
config['storage']['notes_dir'],
|
config['storage']['notes_dir'],
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,56 @@ from datetime import datetime, timezone
|
||||||
from typing import Optional, Dict, Any
|
from typing import Optional, Dict, Any
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
from .utils import validate_path_security
|
||||||
|
|
||||||
# Thread lock for safe concurrent access
|
# Thread lock for safe concurrent access
|
||||||
_lock = threading.Lock()
|
_lock = threading.Lock()
|
||||||
|
|
||||||
|
|
||||||
|
def _token_references_accessible_file(storage_dir: str, rel_path: Any) -> bool:
|
||||||
|
"""
|
||||||
|
Return True if rel_path is a string that resolves to a regular file under storage_dir
|
||||||
|
and passes the same path boundary check used elsewhere in the app.
|
||||||
|
"""
|
||||||
|
if not rel_path or not isinstance(rel_path, str):
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
full = (Path(storage_dir) / rel_path).resolve()
|
||||||
|
except (OSError, ValueError, RuntimeError):
|
||||||
|
return False
|
||||||
|
if not validate_path_security(str(storage_dir), full):
|
||||||
|
return False
|
||||||
|
return full.is_file()
|
||||||
|
|
||||||
|
|
||||||
|
def _prune_inaccessible_unsafe(data_dir: str) -> int:
|
||||||
|
"""
|
||||||
|
Remove share tokens whose stored path is missing or not under the notes directory.
|
||||||
|
Call only while holding _lock. Returns the number of tokens removed.
|
||||||
|
"""
|
||||||
|
tokens = load_tokens(data_dir)
|
||||||
|
if not tokens:
|
||||||
|
return 0
|
||||||
|
kept: Dict[str, Dict[str, Any]] = {}
|
||||||
|
for token, info in tokens.items():
|
||||||
|
path = info.get("path")
|
||||||
|
if _token_references_accessible_file(data_dir, path):
|
||||||
|
kept[token] = info
|
||||||
|
removed = len(tokens) - len(kept)
|
||||||
|
if removed and not save_tokens(data_dir, kept):
|
||||||
|
return 0
|
||||||
|
return removed
|
||||||
|
|
||||||
|
|
||||||
|
def prune_inaccessible_share_tokens(data_dir: str) -> int:
|
||||||
|
"""
|
||||||
|
Remove entries whose path no longer resolves to a file under the storage root.
|
||||||
|
Called automatically after create/revoke share; may also be used from tests or one-off maintenance.
|
||||||
|
"""
|
||||||
|
with _lock:
|
||||||
|
return _prune_inaccessible_unsafe(data_dir)
|
||||||
|
|
||||||
|
|
||||||
def generate_token(length: int = 16) -> str:
|
def generate_token(length: int = 16) -> str:
|
||||||
"""Generate a URL-safe random token."""
|
"""Generate a URL-safe random token."""
|
||||||
# Use alphanumeric + underscore/hyphen (URL-safe)
|
# Use alphanumeric + underscore/hyphen (URL-safe)
|
||||||
|
|
@ -76,6 +122,7 @@ def create_share_token(data_dir: str, note_path: str, theme: str = "light") -> O
|
||||||
# Check if note already has a token
|
# Check if note already has a token
|
||||||
for token, info in tokens.items():
|
for token, info in tokens.items():
|
||||||
if info.get('path') == note_path:
|
if info.get('path') == note_path:
|
||||||
|
_prune_inaccessible_unsafe(data_dir)
|
||||||
return token
|
return token
|
||||||
|
|
||||||
# Generate new token
|
# Generate new token
|
||||||
|
|
@ -93,7 +140,9 @@ def create_share_token(data_dir: str, note_path: str, theme: str = "light") -> O
|
||||||
}
|
}
|
||||||
|
|
||||||
if save_tokens(data_dir, tokens):
|
if save_tokens(data_dir, tokens):
|
||||||
|
_prune_inaccessible_unsafe(data_dir)
|
||||||
return token
|
return token
|
||||||
|
_prune_inaccessible_unsafe(data_dir)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -177,8 +226,13 @@ def revoke_share_token(data_dir: str, note_path: str) -> bool:
|
||||||
|
|
||||||
if token_to_remove:
|
if token_to_remove:
|
||||||
del tokens[token_to_remove]
|
del tokens[token_to_remove]
|
||||||
return save_tokens(data_dir, tokens)
|
if not save_tokens(data_dir, tokens):
|
||||||
|
_prune_inaccessible_unsafe(data_dir)
|
||||||
|
return False
|
||||||
|
_prune_inaccessible_unsafe(data_dir)
|
||||||
|
return True
|
||||||
|
|
||||||
|
_prune_inaccessible_unsafe(data_dir)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -604,54 +604,67 @@ def get_attachment_dir(notes_dir: str, note_path: str) -> Path:
|
||||||
return Path(notes_dir) / folder / "_attachments"
|
return Path(notes_dir) / folder / "_attachments"
|
||||||
|
|
||||||
|
|
||||||
def save_uploaded_image(notes_dir: str, note_path: str, filename: str, file_data: bytes) -> Optional[str]:
|
def save_uploaded_image(
|
||||||
|
notes_dir: str,
|
||||||
|
note_path: str,
|
||||||
|
filename: str,
|
||||||
|
file_data: bytes,
|
||||||
|
*,
|
||||||
|
sibling_folder: Optional[str] = None,
|
||||||
|
) -> Optional[str]:
|
||||||
"""
|
"""
|
||||||
Save an uploaded image to the appropriate attachments directory.
|
Save uploaded media under the vault.
|
||||||
Returns the relative path to the image if successful, None otherwise.
|
|
||||||
|
|
||||||
Args:
|
Default (sibling_folder is None): store in ``_attachments`` next to the note implied by
|
||||||
notes_dir: Base notes directory
|
``note_path`` (drag/drop, paste, etc.).
|
||||||
note_path: Path of the note the image is being uploaded to
|
|
||||||
filename: Original filename
|
|
||||||
file_data: Binary file data
|
|
||||||
|
|
||||||
Returns:
|
If ``sibling_folder`` is set (including ``""`` for vault root): store ``drawing-{timestamp}.png``
|
||||||
Relative path to the saved image, or None if failed
|
in that folder next to ``.md`` files — used for new drawings from the + menu.
|
||||||
|
|
||||||
|
Returns a relative path from ``notes_dir``, or None on failure.
|
||||||
"""
|
"""
|
||||||
# Sanitize filename
|
base = Path(notes_dir)
|
||||||
|
|
||||||
|
if sibling_folder is not None:
|
||||||
|
cf = (sibling_folder or "").strip().replace("\\", "/")
|
||||||
|
segments = [p for p in cf.split("/") if p and p != "."]
|
||||||
|
if any(p == ".." for p in segments):
|
||||||
|
return None
|
||||||
|
dest_dir = base.joinpath(*segments) if segments else base
|
||||||
|
if not validate_path_security(notes_dir, dest_dir / ".nd_probe"):
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
dest_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
except OSError:
|
||||||
|
return None
|
||||||
|
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
|
||||||
|
full_path = dest_dir / f"drawing-{timestamp}.png"
|
||||||
|
if not validate_path_security(notes_dir, full_path):
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
with open(full_path, "wb") as f:
|
||||||
|
f.write(file_data)
|
||||||
|
return str(full_path.relative_to(base).as_posix())
|
||||||
|
except OSError as e:
|
||||||
|
print(f"Error saving image: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
sanitized_name = sanitize_filename(filename)
|
sanitized_name = sanitize_filename(filename)
|
||||||
|
|
||||||
# Get extension
|
|
||||||
ext = Path(sanitized_name).suffix
|
ext = Path(sanitized_name).suffix
|
||||||
name_without_ext = Path(sanitized_name).stem
|
name_without_ext = Path(sanitized_name).stem
|
||||||
|
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
|
||||||
# Add timestamp to prevent collisions
|
|
||||||
timestamp = datetime.now().strftime('%Y%m%d%H%M%S')
|
|
||||||
final_filename = f"{name_without_ext}-{timestamp}{ext}"
|
final_filename = f"{name_without_ext}-{timestamp}{ext}"
|
||||||
|
|
||||||
# Get attachments directory
|
|
||||||
attachments_dir = get_attachment_dir(notes_dir, note_path)
|
attachments_dir = get_attachment_dir(notes_dir, note_path)
|
||||||
|
|
||||||
# Create directory if it doesn't exist
|
|
||||||
attachments_dir.mkdir(parents=True, exist_ok=True)
|
attachments_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
# Full path to save the image
|
|
||||||
full_path = attachments_dir / final_filename
|
full_path = attachments_dir / final_filename
|
||||||
|
|
||||||
# Security check
|
|
||||||
if not validate_path_security(notes_dir, full_path):
|
if not validate_path_security(notes_dir, full_path):
|
||||||
print(f"Security: Attempted to save image outside notes directory: {full_path}")
|
print(f"Security: Attempted to save image outside notes directory: {full_path}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Write the file
|
with open(full_path, "wb") as f:
|
||||||
with open(full_path, 'wb') as f:
|
|
||||||
f.write(file_data)
|
f.write(file_data)
|
||||||
|
return str(full_path.relative_to(base).as_posix())
|
||||||
# Return relative path from notes_dir
|
except OSError as e:
|
||||||
relative_path = full_path.relative_to(Path(notes_dir))
|
|
||||||
return str(relative_path.as_posix())
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error saving image: {e}")
|
print(f"Error saving image: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
@ -671,8 +684,13 @@ ALL_MEDIA_EXTENSIONS = set().union(*MEDIA_EXTENSIONS.values())
|
||||||
def get_media_type(filename: str) -> Optional[str]:
|
def get_media_type(filename: str) -> Optional[str]:
|
||||||
"""
|
"""
|
||||||
Determine the media type based on file extension.
|
Determine the media type based on file extension.
|
||||||
Returns: 'image', 'audio', 'video', 'document', or None if not a media file.
|
Returns: 'image', 'audio', 'video', 'document', 'drawing', or None if not a media file.
|
||||||
|
|
||||||
|
Drawings are PNG files stored like images but named drawing-*.png (editable canvas in the app).
|
||||||
"""
|
"""
|
||||||
|
name_lower = Path(filename).name.lower()
|
||||||
|
if name_lower.startswith('drawing-') and name_lower.endswith('.png'):
|
||||||
|
return 'drawing'
|
||||||
ext = Path(filename).suffix.lower()
|
ext = Path(filename).suffix.lower()
|
||||||
for media_type, extensions in MEDIA_EXTENSIONS.items():
|
for media_type, extensions in MEDIA_EXTENSIONS.items():
|
||||||
if ext in extensions:
|
if ext in extensions:
|
||||||
|
|
|
||||||
165
docs/index.html
165
docs/index.html
|
|
@ -7,30 +7,40 @@
|
||||||
<!-- Primary Meta Tags -->
|
<!-- Primary Meta Tags -->
|
||||||
<title>NoteDiscovery - Your Self-Hosted Knowledge Base</title>
|
<title>NoteDiscovery - Your Self-Hosted Knowledge Base</title>
|
||||||
<meta name="title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
|
<meta name="title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
|
||||||
<meta name="description" content="A lightweight, privacy-focused Markdown note-taking application with AI assistant integration (MCP), wikilinks, graph view, LaTeX math, Mermaid diagrams, tags, templates, and code highlighting. Works with Claude, Cursor, and other AI tools. Self-hosted, free, and open source.">
|
<meta name="description" content="Self-hosted Markdown knowledge base with AI assistant integration (MCP) for Claude & Cursor, wikilinks, graph view, drawing editor, LaTeX, Mermaid — free and open source.">
|
||||||
<meta name="keywords" content="note taking, markdown editor, self-hosted, knowledge base, open source, privacy, notes app, docker, second brain, obsidian alternative, notion, evernote, onenote, latex, mermaid, diagrams, math equations, templates, tags, yaml frontmatter, AI assistant, MCP, model context protocol, Claude, Cursor, AI notes, AI knowledge base, AI-powered notes">
|
<meta name="keywords" content="markdown notes, self-hosted, knowledge base, MCP, Claude, Cursor, obsidian alternative, open source">
|
||||||
<meta name="author" content="Gamosoft">
|
<meta name="author" content="Gamosoft">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow, max-image-preview:large">
|
||||||
<link rel="canonical" href="https://www.notediscovery.com">
|
<link rel="canonical" href="https://www.notediscovery.com">
|
||||||
|
|
||||||
|
<!-- Preconnect / DNS prefetch for performance -->
|
||||||
|
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin>
|
||||||
|
<link rel="preconnect" href="https://www.google-analytics.com" crossorigin>
|
||||||
|
<link rel="dns-prefetch" href="https://ko-fi.com">
|
||||||
|
<link rel="dns-prefetch" href="https://www.pikapods.com">
|
||||||
|
|
||||||
<!-- Open Graph / Facebook -->
|
<!-- Open Graph / Facebook -->
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:url" content="https://www.notediscovery.com">
|
<meta property="og:url" content="https://www.notediscovery.com">
|
||||||
<meta property="og:title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
|
<meta property="og:title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
|
||||||
<meta property="og:description" content="AI-powered note-taking with MCP integration for Claude, Cursor & more. LaTeX math, Mermaid diagrams, graph view, wikilinks. Self-hosted, free, and open source.">
|
<meta property="og:description" content="AI-powered note-taking with MCP integration for Claude, Cursor & more. Wikilinks, graph view, drawing editor, LaTeX, Mermaid. Self-hosted, free, open source.">
|
||||||
<meta property="og:image" content="https://www.notediscovery.com/og-image.png">
|
<meta property="og:image" content="https://www.notediscovery.com/og-image.png">
|
||||||
|
<meta property="og:image:type" content="image/png">
|
||||||
<meta property="og:image:width" content="1200">
|
<meta property="og:image:width" content="1200">
|
||||||
<meta property="og:image:height" content="630">
|
<meta property="og:image:height" content="630">
|
||||||
|
<meta property="og:image:alt" content="NoteDiscovery — self-hosted Markdown knowledge base">
|
||||||
<meta property="og:site_name" content="NoteDiscovery">
|
<meta property="og:site_name" content="NoteDiscovery">
|
||||||
|
<meta property="og:locale" content="en_US">
|
||||||
|
|
||||||
<!-- Twitter Card -->
|
<!-- Twitter Card -->
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:site" content="@gamosoft">
|
<meta name="twitter:site" content="@gamosoft">
|
||||||
<meta name="twitter:creator" content="@gamosoft">
|
<meta name="twitter:creator" content="@gamosoft">
|
||||||
|
<meta name="twitter:url" content="https://www.notediscovery.com">
|
||||||
<meta name="twitter:title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
|
<meta name="twitter:title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
|
||||||
<meta name="twitter:description" content="AI-powered note-taking with MCP integration for Claude & Cursor. LaTeX, Mermaid diagrams, graph view. Self-hosted, free, open source.">
|
<meta name="twitter:description" content="AI-powered note-taking with MCP for Claude & Cursor. Wikilinks, graph view, drawing editor, LaTeX, Mermaid. Self-hosted, free, open source.">
|
||||||
<meta name="twitter:image" content="https://www.notediscovery.com/og-image.png">
|
<meta name="twitter:image" content="https://www.notediscovery.com/og-image.png">
|
||||||
<meta name="twitter:image:alt" content="NoteDiscovery - Self-hosted note-taking application interface">
|
<meta name="twitter:image:alt" content="NoteDiscovery — self-hosted Markdown knowledge base">
|
||||||
|
|
||||||
<!-- Favicon -->
|
<!-- Favicon -->
|
||||||
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
|
@ -353,7 +363,7 @@
|
||||||
animation: fadeInScale 0.6s ease-out forwards;
|
animation: fadeInScale 0.6s ease-out forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Stagger animation delays for feature cards (5 rows × 3 cols = 15 cards) */
|
/* Stagger animation delays for feature cards (15 cards) */
|
||||||
.feature.animated:nth-child(1) { animation-delay: 0s; }
|
.feature.animated:nth-child(1) { animation-delay: 0s; }
|
||||||
.feature.animated:nth-child(2) { animation-delay: 0.1s; }
|
.feature.animated:nth-child(2) { animation-delay: 0.1s; }
|
||||||
.feature.animated:nth-child(3) { animation-delay: 0.2s; }
|
.feature.animated:nth-child(3) { animation-delay: 0.2s; }
|
||||||
|
|
@ -689,7 +699,7 @@
|
||||||
<div class="hero animate-on-scroll">
|
<div class="hero animate-on-scroll">
|
||||||
<div class="hero-content">
|
<div class="hero-content">
|
||||||
<h2>Take Control of Your Notes</h2>
|
<h2>Take Control of Your Notes</h2>
|
||||||
<p>A lightweight, privacy-focused note-taking application with powerful features: AI assistant integration (MCP), LaTeX math equations, Mermaid diagrams, smart tags, custom templates, code highlighting, and more. Write and organize your notes with a beautiful, modern interface all running on your own server.</p>
|
<p>A lightweight, privacy-focused note-taking application with powerful features: AI assistant integration (MCP), LaTeX math equations, Mermaid diagrams, an embedded drawing editor for quick sketches, smart tags, custom templates, code highlighting, and more. Write and organize your notes with a beautiful, modern interface all running on your own server.</p>
|
||||||
<div class="cta-buttons">
|
<div class="cta-buttons">
|
||||||
<a href="https://gamosoft-notediscovery-demo.hf.space" class="cta-button demo" target="_blank" rel="noopener">Try Live Demo</a>
|
<a href="https://gamosoft-notediscovery-demo.hf.space" class="cta-button demo" target="_blank" rel="noopener">Try Live Demo</a>
|
||||||
<a href="https://github.com/gamosoft/NoteDiscovery" class="cta-button" target="_blank" rel="noopener">Get Started on GitHub →</a>
|
<a href="https://github.com/gamosoft/NoteDiscovery" class="cta-button" target="_blank" rel="noopener">Get Started on GitHub →</a>
|
||||||
|
|
@ -708,104 +718,104 @@
|
||||||
<h2>See It in Action</h2>
|
<h2>See It in Action</h2>
|
||||||
<p>A clean, intuitive interface designed for productivity and focus</p>
|
<p>A clean, intuitive interface designed for productivity and focus</p>
|
||||||
<div class="screenshot-container">
|
<div class="screenshot-container">
|
||||||
<div class="carousel">
|
<div class="carousel" role="region" aria-roledescription="carousel" aria-label="Product screenshots">
|
||||||
<div class="carousel-track" id="carouselTrack">
|
<div class="carousel-track" id="carouselTrack">
|
||||||
<!-- Slide 1: Main Interface -->
|
<!-- Slide 1: Main Interface -->
|
||||||
<div class="carousel-slide">
|
<div class="carousel-slide">
|
||||||
<div class="screenshot-frame">
|
<div class="screenshot-frame">
|
||||||
<div class="screenshot-window-bar">
|
<div class="screenshot-window-bar">
|
||||||
<div class="screenshot-dots">
|
<div class="screenshot-dots" aria-hidden="true">
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="screenshot-title">Editor View • Main Interface</span>
|
<span class="screenshot-title">Editor View • Main Interface</span>
|
||||||
</div>
|
</div>
|
||||||
<img src="carousel-1.jpg" alt="NoteDiscovery Main Interface" loading="lazy">
|
<img src="carousel-1.jpg" alt="NoteDiscovery editor showing Markdown preview and sidebar" width="1600" height="1000" fetchpriority="high" decoding="async">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Slide 2: Search -->
|
<!-- Slide 2: Search -->
|
||||||
<div class="carousel-slide">
|
<div class="carousel-slide">
|
||||||
<div class="screenshot-frame">
|
<div class="screenshot-frame">
|
||||||
<div class="screenshot-window-bar">
|
<div class="screenshot-window-bar">
|
||||||
<div class="screenshot-dots">
|
<div class="screenshot-dots" aria-hidden="true">
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="screenshot-title">Smart Search • Find Anything Instantly</span>
|
<span class="screenshot-title">Smart Search • Find Anything Instantly</span>
|
||||||
</div>
|
</div>
|
||||||
<img src="carousel-2.jpg" alt="NoteDiscovery Smart Search" loading="lazy">
|
<img src="carousel-2.jpg" alt="NoteDiscovery smart full-text search results" width="1600" height="1000" loading="lazy" decoding="async">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Slide 3: Tag Filter -->
|
<!-- Slide 3: Tag Filter -->
|
||||||
<div class="carousel-slide">
|
<div class="carousel-slide">
|
||||||
<div class="screenshot-frame">
|
<div class="screenshot-frame">
|
||||||
<div class="screenshot-window-bar">
|
<div class="screenshot-window-bar">
|
||||||
<div class="screenshot-dots">
|
<div class="screenshot-dots" aria-hidden="true">
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="screenshot-title">Tag Filtering • Organize by Topics</span>
|
<span class="screenshot-title">Tag Filtering • Organize by Topics</span>
|
||||||
</div>
|
</div>
|
||||||
<img src="carousel-3.jpg" alt="NoteDiscovery Tag Filtering" loading="lazy">
|
<img src="carousel-3.jpg" alt="NoteDiscovery tag filtering panel" width="1600" height="1000" loading="lazy" decoding="async">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Slide 4: Outline -->
|
<!-- Slide 4: Outline -->
|
||||||
<div class="carousel-slide">
|
<div class="carousel-slide">
|
||||||
<div class="screenshot-frame">
|
<div class="screenshot-frame">
|
||||||
<div class="screenshot-window-bar">
|
<div class="screenshot-window-bar">
|
||||||
<div class="screenshot-dots">
|
<div class="screenshot-dots" aria-hidden="true">
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="screenshot-title">Outline Panel • Navigate Headings</span>
|
<span class="screenshot-title">Outline Panel • Navigate Headings</span>
|
||||||
</div>
|
</div>
|
||||||
<img src="carousel-4.jpg" alt="NoteDiscovery Outline Panel" loading="lazy">
|
<img src="carousel-4.jpg" alt="NoteDiscovery outline panel for heading navigation" width="1600" height="1000" loading="lazy" decoding="async">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Slide 5: Card View -->
|
<!-- Slide 5: Card View -->
|
||||||
<div class="carousel-slide">
|
<div class="carousel-slide">
|
||||||
<div class="screenshot-frame">
|
<div class="screenshot-frame">
|
||||||
<div class="screenshot-window-bar">
|
<div class="screenshot-window-bar">
|
||||||
<div class="screenshot-dots">
|
<div class="screenshot-dots" aria-hidden="true">
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="screenshot-title">Card View • Visual Organization</span>
|
<span class="screenshot-title">Card View • Visual Organization</span>
|
||||||
</div>
|
</div>
|
||||||
<img src="carousel-5.jpg" alt="NoteDiscovery Card View" loading="lazy">
|
<img src="carousel-5.jpg" alt="NoteDiscovery card view homepage with recent notes" width="1600" height="1000" loading="lazy" decoding="async">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Slide 6: Graph View -->
|
<!-- Slide 6: Graph View -->
|
||||||
<div class="carousel-slide">
|
<div class="carousel-slide">
|
||||||
<div class="screenshot-frame">
|
<div class="screenshot-frame">
|
||||||
<div class="screenshot-window-bar">
|
<div class="screenshot-window-bar">
|
||||||
<div class="screenshot-dots">
|
<div class="screenshot-dots" aria-hidden="true">
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="screenshot-title">Graph View • Visualize Connections</span>
|
<span class="screenshot-title">Graph View • Visualize Connections</span>
|
||||||
</div>
|
</div>
|
||||||
<img src="carousel-6.jpg" alt="NoteDiscovery Graph View" loading="lazy">
|
<img src="carousel-6.jpg" alt="NoteDiscovery graph view of linked notes" width="1600" height="1000" loading="lazy" decoding="async">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Slide 7: Mobile Support -->
|
<!-- Slide 7: Mobile Support -->
|
||||||
<div class="carousel-slide">
|
<div class="carousel-slide">
|
||||||
<div class="screenshot-frame">
|
<div class="screenshot-frame">
|
||||||
<div class="screenshot-window-bar">
|
<div class="screenshot-window-bar">
|
||||||
<div class="screenshot-dots">
|
<div class="screenshot-dots" aria-hidden="true">
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
<div class="screenshot-dot"></div>
|
<div class="screenshot-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="screenshot-title">Mobile Ready • Notes On The Go</span>
|
<span class="screenshot-title">Mobile Ready • Notes On The Go</span>
|
||||||
</div>
|
</div>
|
||||||
<img src="carousel-7.png" alt="NoteDiscovery Mobile Support" loading="lazy">
|
<img src="carousel-7.png" alt="NoteDiscovery responsive mobile interface" width="800" height="1400" loading="lazy" decoding="async">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -858,6 +868,12 @@
|
||||||
<p>Create flowcharts, mind maps, and diagrams with Mermaid syntax.</p>
|
<p>Create flowcharts, mind maps, and diagrams with Mermaid syntax.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="feature animate-on-scroll">
|
||||||
|
<div class="feature-icon">✏️</div>
|
||||||
|
<h3>Drawing editor</h3>
|
||||||
|
<p>Sketch and annotate directly in the browser—PNG files saved alongside your notes with autosave, shapes, eraser, eyedropper, and undo/redo.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="feature animate-on-scroll">
|
<div class="feature animate-on-scroll">
|
||||||
<div class="feature-icon">💻</div>
|
<div class="feature-icon">💻</div>
|
||||||
<h3>Code Highlighting</h3>
|
<h3>Code Highlighting</h3>
|
||||||
|
|
@ -894,12 +910,6 @@
|
||||||
<p>Several built-in themes with dark/light modes and full customization.</p>
|
<p>Several built-in themes with dark/light modes and full customization.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="feature animate-on-scroll">
|
|
||||||
<div class="feature-icon">⭐</div>
|
|
||||||
<h3>Favorites</h3>
|
|
||||||
<p>Star your most-used notes for instant access from the sidebar.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="feature animate-on-scroll">
|
<div class="feature animate-on-scroll">
|
||||||
<div class="feature-icon">📑</div>
|
<div class="feature-icon">📑</div>
|
||||||
<h3>Outline Panel</h3>
|
<h3>Outline Panel</h3>
|
||||||
|
|
@ -999,7 +1009,7 @@
|
||||||
<span class="emoji">🌐</span>
|
<span class="emoji">🌐</span>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<strong>Public Sharing</strong>
|
<strong>Public Sharing</strong>
|
||||||
Share notes via link, even with auth enabled
|
Share notes via link (works with auth on) and manage them from a dedicated Shared panel in the sidebar
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -1191,27 +1201,104 @@
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
"@type": "SoftwareApplication",
|
"@type": "SoftwareApplication",
|
||||||
"name": "NoteDiscovery",
|
"name": "NoteDiscovery",
|
||||||
"description": "A lightweight, AI-powered Markdown note-taking application with MCP integration for Claude, Cursor and other AI assistants. Features LaTeX math, Mermaid diagrams, graph view, and code highlighting. Self-hosted Obsidian and Evernote alternative. Free and open source.",
|
"alternateName": "NoteDiscovery - Your Self-Hosted Knowledge Base",
|
||||||
|
"description": "A lightweight, AI-powered Markdown note-taking application with MCP integration for Claude, Cursor and other AI assistants. Features wikilinks, graph view, drawing editor, LaTeX math, Mermaid diagrams, tags, templates, and code highlighting. Self-hosted Obsidian/Evernote alternative. Free and open source.",
|
||||||
"url": "https://www.notediscovery.com",
|
"url": "https://www.notediscovery.com",
|
||||||
|
"image": "https://www.notediscovery.com/og-image.png",
|
||||||
|
"screenshot": [
|
||||||
|
"https://www.notediscovery.com/carousel-1.jpg",
|
||||||
|
"https://www.notediscovery.com/carousel-2.jpg",
|
||||||
|
"https://www.notediscovery.com/carousel-3.jpg",
|
||||||
|
"https://www.notediscovery.com/carousel-4.jpg",
|
||||||
|
"https://www.notediscovery.com/carousel-5.jpg",
|
||||||
|
"https://www.notediscovery.com/carousel-6.jpg",
|
||||||
|
"https://www.notediscovery.com/carousel-7.png"
|
||||||
|
],
|
||||||
"applicationCategory": "ProductivityApplication",
|
"applicationCategory": "ProductivityApplication",
|
||||||
|
"applicationSubCategory": "NoteTakingApplication",
|
||||||
"operatingSystem": "Linux, Windows, macOS",
|
"operatingSystem": "Linux, Windows, macOS",
|
||||||
"featureList": "AI assistant integration, MCP (Model Context Protocol), Claude integration, Cursor integration, Markdown editor, Wikilinks, Graph view, LaTeX math equations, Mermaid diagrams, Code syntax highlighting, Dark mode, Plugin system, Internal links, Properties panel, HTML export, Full-text search, Self-hosted, Obsidian alternative, Evernote alternative, Notion alternative, Second brain, AI-powered notes",
|
"browserRequirements": "Requires a modern browser with JavaScript enabled",
|
||||||
|
"softwareVersion": "0.22.1",
|
||||||
|
"datePublished": "2025-01-15",
|
||||||
|
"dateModified": "2026-04-24",
|
||||||
|
"license": "https://opensource.org/licenses/MIT",
|
||||||
|
"downloadUrl": "https://github.com/gamosoft/NoteDiscovery",
|
||||||
|
"codeRepository": "https://github.com/gamosoft/NoteDiscovery",
|
||||||
|
"isAccessibleForFree": true,
|
||||||
|
"featureList": "AI assistant integration, MCP (Model Context Protocol), Claude integration, Cursor integration, Markdown editor, Wikilinks, Graph view, Drawing editor, LaTeX math equations, Mermaid diagrams, Code syntax highlighting, Dark mode, Plugin system, Internal links, Properties panel, HTML export, Full-text search, Public sharing with dedicated sidebar panel, Self-hosted, Obsidian alternative, Evernote alternative, Notion alternative, Second brain, AI-powered notes",
|
||||||
"offers": {
|
"offers": {
|
||||||
"@type": "Offer",
|
"@type": "Offer",
|
||||||
"price": "0",
|
"price": "0",
|
||||||
"priceCurrency": "USD"
|
"priceCurrency": "USD",
|
||||||
|
"availability": "https://schema.org/InStock"
|
||||||
},
|
},
|
||||||
"author": {
|
"author": {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": "Gamosoft"
|
"name": "Gamosoft",
|
||||||
|
"url": "https://github.com/gamosoft"
|
||||||
},
|
},
|
||||||
"softwareVersion": "1.0",
|
"publisher": {
|
||||||
"aggregateRating": {
|
"@type": "Organization",
|
||||||
"@type": "AggregateRating",
|
"name": "Gamosoft",
|
||||||
"ratingValue": "5",
|
"url": "https://github.com/gamosoft",
|
||||||
"ratingCount": "1"
|
"logo": {
|
||||||
|
"@type": "ImageObject",
|
||||||
|
"url": "https://www.notediscovery.com/logo.png",
|
||||||
|
"width": 512,
|
||||||
|
"height": 512
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- FAQ Structured Data -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "FAQPage",
|
||||||
|
"mainEntity": [
|
||||||
|
{
|
||||||
|
"@type": "Question",
|
||||||
|
"name": "Is NoteDiscovery really free?",
|
||||||
|
"acceptedAnswer": {
|
||||||
|
"@type": "Answer",
|
||||||
|
"text": "Yes. NoteDiscovery is free and open source under the MIT license. There are no paid tiers, no accounts, and no telemetry. You self-host it on your own server."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Question",
|
||||||
|
"name": "Does it work with AI tools like Claude or Cursor?",
|
||||||
|
"acceptedAnswer": {
|
||||||
|
"@type": "Answer",
|
||||||
|
"text": "Yes. NoteDiscovery ships with a built-in MCP (Model Context Protocol) server, so AI assistants like Claude Desktop and Cursor can read and edit your notes directly, without any copy-pasting back and forth."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Question",
|
||||||
|
"name": "Do my notes ever leave my computer?",
|
||||||
|
"acceptedAnswer": {
|
||||||
|
"@type": "Answer",
|
||||||
|
"text": "No. Everything stays on the server you choose. There is no cloud sync and no third-party storage. The AI integration runs locally over MCP, and your notes are never sent anywhere unless you explicitly publish a share link."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Question",
|
||||||
|
"name": "Can I move my notes in or out easily?",
|
||||||
|
"acceptedAnswer": {
|
||||||
|
"@type": "Answer",
|
||||||
|
"text": "Yes. Notes are plain Markdown files in normal folders. You can drop an existing Obsidian vault straight in, or open the same files in any other Markdown editor. There is no proprietary database to escape from."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Question",
|
||||||
|
"name": "Do I need to be a developer to install it?",
|
||||||
|
"acceptedAnswer": {
|
||||||
|
"@type": "Answer",
|
||||||
|
"text": "Not really. The recommended setup is a single Docker command, and there is a one-click PikaPods option if you would rather not touch the command line at all."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
|
|
@ -2,7 +2,7 @@
|
||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.notediscovery.com</loc>
|
<loc>https://www.notediscovery.com</loc>
|
||||||
<lastmod>2025-11-09</lastmod>
|
<lastmod>2026-04-24</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>1.0</priority>
|
<priority>1.0</priority>
|
||||||
</url>
|
</url>
|
||||||
|
|
|
||||||
|
|
@ -214,6 +214,31 @@ curl http://localhost:8000/api/media/folder/_attachments/image-20240417093343.pn
|
||||||
- The file exists and is a valid media format
|
- The file exists and is a valid media format
|
||||||
- The requesting user is authenticated (if auth is enabled)
|
- The requesting user is authenticated (if auth is enabled)
|
||||||
|
|
||||||
|
### Update drawing (PNG in place)
|
||||||
|
|
||||||
|
```http
|
||||||
|
PUT /api/media/{media_path}
|
||||||
|
Content-Type: image/png
|
||||||
|
```
|
||||||
|
|
||||||
|
Overwrites an **existing** file in the vault. The server only accepts targets whose filename matches **`drawing-*.png`** (lowercase `.png`). The body must be a valid **PNG** (magic bytes are checked). Used by the in-app drawing editor when saving.
|
||||||
|
|
||||||
|
**Requirements:**
|
||||||
|
- File must already exist (create new drawings via **New drawing** / `POST /api/upload-media` with `next_to_notes`, not via PUT).
|
||||||
|
- Path must stay within the notes directory (same rules as GET).
|
||||||
|
|
||||||
|
**Response:**
|
||||||
|
```json
|
||||||
|
{ "success": true, "path": "folder/drawing-20260101120000.png" }
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
```bash
|
||||||
|
curl -X PUT http://localhost:8000/api/media/myproject/drawing-20260101120000.png \
|
||||||
|
-H "Content-Type: image/png" \
|
||||||
|
--data-binary @sketch.png
|
||||||
|
```
|
||||||
|
|
||||||
### Upload Media
|
### Upload Media
|
||||||
```http
|
```http
|
||||||
POST /api/upload-media
|
POST /api/upload-media
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
# Drawing editor
|
||||||
|
|
||||||
|
NoteDiscovery includes a **built-in drawing editor** for sketching and annotating directly in the app. Drawings are stored as ordinary **PNG files** in your vault, so they work like any other image: previews, export, and backups behave the same.
|
||||||
|
|
||||||
|
## Creating a drawing
|
||||||
|
|
||||||
|
Use the **+ New** menu in the sidebar and choose **New drawing**. The app creates a file named `drawing-{timestamp}.png` next to your notes (in the folder you pick), then opens it in the drawing viewer.
|
||||||
|
|
||||||
|
## Editor overview
|
||||||
|
|
||||||
|
- **Tools** — Freehand pencil, straight line, rectangle, and ellipse; **eraser** (paints with the canvas background color); **eyedropper** to sample a color from the canvas.
|
||||||
|
- **Color & stroke width** — Color picker and width slider appear on the same toolbar as the tools.
|
||||||
|
- **Undo / redo** — Use the main toolbar buttons or **Ctrl+Z** / **Ctrl+Y** (same shortcuts as the note editor; they apply to strokes while a drawing is open).
|
||||||
|
- **Clear** — Replaces the current session with a **blank white image** and schedules a save (see [FEATURES.md](FEATURES.md) for the exact behavior and confirmation).
|
||||||
|
- **Saving** — Changes are saved automatically after you finish a stroke (debounced), and you can press **Ctrl+S** (Cmd+S on Mac) to save the PNG immediately.
|
||||||
|
|
||||||
|
## Files on disk
|
||||||
|
|
||||||
|
- Only files whose names match **`drawing-*.png`** are opened in the drawing editor; other PNGs open as normal images.
|
||||||
|
- The saved PNG’s **pixel dimensions** match the drawing pane at save time (layout and device pixel ratio), similar to a screenshot of the canvas area.
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
To update an existing drawing from automation, use **PUT `/api/media/{path}`** with a **PNG body**; the server only allows in-place updates for `drawing-*.png` paths. See [API.md](API.md#update-drawing-png-in-place).
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [FEATURES.md](FEATURES.md) — Full feature list and keyboard shortcuts
|
||||||
|
- [API.md](API.md) — Media endpoints
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
- **Public Sharing** - Share notes via token-based URLs with optional QR code for mobile (see [SHARING.md](SHARING.md))
|
- **Public Sharing** - Share notes via token-based URLs with optional QR code for mobile (see [SHARING.md](SHARING.md))
|
||||||
|
|
||||||
### Media Support
|
### Media Support
|
||||||
|
- **Drawing editor** — In-app **`drawing-*.png`** sketches next to your notes ([overview](#drawing-editor)); full guide: **[DRAWING.md](DRAWING.md)**
|
||||||
- **Drag & drop upload** - Drop files from your file system directly into the editor
|
- **Drag & drop upload** - Drop files from your file system directly into the editor
|
||||||
- **Clipboard paste** - Paste images from clipboard with Ctrl+V
|
- **Clipboard paste** - Paste images from clipboard with Ctrl+V
|
||||||
- **Images** - JPG, PNG, GIF, WebP (default max 10MB, configurable)
|
- **Images** - JPG, PNG, GIF, WebP (default max 10MB, configurable)
|
||||||
|
|
@ -42,6 +43,16 @@
|
||||||
- **Theme-aware** - Export uses your current theme for consistent appearance
|
- **Theme-aware** - Export uses your current theme for consistent appearance
|
||||||
- **Full rendering** - MathJax equations, Mermaid diagrams, and syntax highlighting included
|
- **Full rendering** - MathJax equations, Mermaid diagrams, and syntax highlighting included
|
||||||
|
|
||||||
|
## ✏️ Drawing editor
|
||||||
|
|
||||||
|
Sketch beside your notes without leaving NoteDiscovery. **+ New → New drawing** creates a **`drawing-{timestamp}.png`** next to your markdown files; those open in the drawing viewer, other images open as usual.
|
||||||
|
|
||||||
|
- **Tools** — Pencil, lines, rectangles, ellipses, eraser, eyedropper, clear; color and stroke width on the toolbar; undo/redo while you work.
|
||||||
|
- **Saving** — Autosave and **Ctrl+S** / **Cmd+S** like the rest of the app.
|
||||||
|
- **Files** — Plain PNGs in your vault—link them in notes and back them up with everything else.
|
||||||
|
|
||||||
|
For file naming, API notes, and more: **[DRAWING.md](DRAWING.md)**
|
||||||
|
|
||||||
## 🔗 Linking & Discovery
|
## 🔗 Linking & Discovery
|
||||||
|
|
||||||
### Graph View
|
### Graph View
|
||||||
|
|
@ -311,11 +322,11 @@ date: {{date}}
|
||||||
| Windows/Linux | Mac | Action |
|
| Windows/Linux | Mac | Action |
|
||||||
|---------------|-----|--------|
|
|---------------|-----|--------|
|
||||||
| `Ctrl+Alt+P` | `Cmd+Option+P` | Quick Switcher (jump to any note) |
|
| `Ctrl+Alt+P` | `Cmd+Option+P` | Quick Switcher (jump to any note) |
|
||||||
| `Ctrl+S` | `Cmd+S` | Save note |
|
| `Ctrl+S` | `Cmd+S` | Save note (or **save drawing PNG** when a `drawing-*.png` is open) |
|
||||||
| `Ctrl+Alt+N` | `Cmd+Option+N` | New note |
|
| `Ctrl+Alt+N` | `Cmd+Option+N` | New note |
|
||||||
| `Ctrl+Alt+F` | `Cmd+Option+F` | New folder |
|
| `Ctrl+Alt+F` | `Cmd+Option+F` | New folder |
|
||||||
| `Ctrl+Z` | `Cmd+Z` | Undo |
|
| `Ctrl+Z` | `Cmd+Z` | Undo (note edits, or **drawing strokes** when a drawing is open) |
|
||||||
| `Ctrl+Y` or `Ctrl+Shift+Z` | `Cmd+Y` or `Cmd+Shift+Z` | Redo |
|
| `Ctrl+Y` or `Ctrl+Shift+Z` | `Cmd+Y` or `Cmd+Shift+Z` | Redo (note edits, or **drawing strokes** when a drawing is open) |
|
||||||
| `Ctrl+Alt+Z` | `Cmd+Option+Z` | Toggle Zen Mode |
|
| `Ctrl+Alt+Z` | `Cmd+Option+Z` | Toggle Zen Mode |
|
||||||
| `Esc` | `Esc` | Exit Zen Mode |
|
| `Esc` | `Esc` | Exit Zen Mode |
|
||||||
| `F3` | `F3` | Next search match |
|
| `F3` | `F3` | Next search match |
|
||||||
|
|
|
||||||
833
frontend/app.js
833
frontend/app.js
File diff suppressed because it is too large
Load Diff
|
|
@ -1522,6 +1522,26 @@
|
||||||
></span>
|
></span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<!-- Shared notes (public links) -->
|
||||||
|
<button
|
||||||
|
class="icon-rail-btn relative"
|
||||||
|
:class="{'active': activePanel === 'shared'}"
|
||||||
|
@click="activePanel = 'shared'"
|
||||||
|
:title="t('share.panel_title')"
|
||||||
|
:aria-label="t('share.panel_title')"
|
||||||
|
>
|
||||||
|
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z"></path>
|
||||||
|
</svg>
|
||||||
|
<span
|
||||||
|
x-show="_sharedNotePathsList.length > 0"
|
||||||
|
x-cloak
|
||||||
|
class="absolute -top-1 -right-1 w-4 h-4 text-[9px] font-bold rounded-full flex items-center justify-center"
|
||||||
|
style="background-color: var(--accent-primary); color: white;"
|
||||||
|
x-text="_sharedNotePathsList.length > 9 ? '9+' : _sharedNotePathsList.length"
|
||||||
|
></span>
|
||||||
|
</button>
|
||||||
|
|
||||||
<div class="icon-rail-spacer"></div>
|
<div class="icon-rail-spacer"></div>
|
||||||
|
|
||||||
<!-- Graph -->
|
<!-- Graph -->
|
||||||
|
|
@ -1992,6 +2012,48 @@
|
||||||
</div>
|
</div>
|
||||||
<!-- END BACKLINKS PANEL -->
|
<!-- END BACKLINKS PANEL -->
|
||||||
|
|
||||||
|
<!-- ==================== SHARED NOTES PANEL ==================== -->
|
||||||
|
<div x-show="activePanel === 'shared'" x-transition:enter="transition ease-out duration-150" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" class="flex flex-col h-full">
|
||||||
|
<div class="flex-shrink-0 px-3 py-2 border-b flex items-center justify-between" style="border-color: var(--border-primary);">
|
||||||
|
<span class="text-xs font-semibold uppercase tracking-wide" style="color: var(--text-tertiary);" x-text="t('share.panel_title')"></span>
|
||||||
|
<span class="text-xs px-1.5 py-0.5 rounded" style="background-color: var(--bg-tertiary); color: var(--text-tertiary);" x-text="_sharedNotePathsList.length"></span>
|
||||||
|
</div>
|
||||||
|
<div class="flex-1 overflow-y-auto custom-scrollbar">
|
||||||
|
<div class="py-2">
|
||||||
|
<template x-if="_sharedNotePathsList.length > 0">
|
||||||
|
<div class="px-2">
|
||||||
|
<template x-for="item in getSharedPanelItems()" :key="item.path">
|
||||||
|
<div
|
||||||
|
@click="openItem(item.path, 'note')"
|
||||||
|
class="hover-accent px-2 py-1.5 text-sm cursor-pointer mb-1 rounded"
|
||||||
|
:style="currentNote === item.path ? 'background-color: var(--accent-light); color: var(--accent-primary);' : 'color: var(--text-primary);'"
|
||||||
|
>
|
||||||
|
<div class="flex items-start gap-2 mb-0.5">
|
||||||
|
<svg class="w-4 h-4 flex-shrink-0 mt-0.5" style="color: var(--accent-primary); opacity: 0.9;" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z"></path>
|
||||||
|
</svg>
|
||||||
|
<div class="min-w-0 flex-1">
|
||||||
|
<div class="font-medium truncate" x-text="item.name" :title="item.name"></div>
|
||||||
|
<div class="text-xs truncate" style="color: var(--text-tertiary);" x-text="item.folder" :title="item.folder"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template x-if="_sharedNotePathsList.length === 0">
|
||||||
|
<div class="text-center py-6 px-3">
|
||||||
|
<svg class="w-12 h-12 mx-auto mb-3 opacity-40" style="color: var(--text-tertiary);" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z"></path>
|
||||||
|
</svg>
|
||||||
|
<p class="text-sm" style="color: var(--text-tertiary);" x-text="t('share.no_shared')"></p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- END SHARED NOTES PANEL -->
|
||||||
|
|
||||||
<!-- ==================== SETTINGS PANEL ==================== -->
|
<!-- ==================== SETTINGS PANEL ==================== -->
|
||||||
<template x-if="activePanel === 'settings'">
|
<template x-if="activePanel === 'settings'">
|
||||||
<div class="flex flex-col h-full">
|
<div class="flex flex-col h-full">
|
||||||
|
|
@ -2408,7 +2470,7 @@
|
||||||
style="position: absolute; top: 8px; right: 8px; opacity: 0; transition: opacity 0.2s; color: var(--error); padding: 4px; border-radius: 4px; background-color: var(--bg-secondary);"
|
style="position: absolute; top: 8px; right: 8px; opacity: 0; transition: opacity 0.2s; color: var(--error); padding: 4px; border-radius: 4px; background-color: var(--bg-secondary);"
|
||||||
onmouseover="this.style.backgroundColor='var(--bg-hover)'"
|
onmouseover="this.style.backgroundColor='var(--bg-hover)'"
|
||||||
onmouseout="this.style.backgroundColor='var(--bg-secondary)'"
|
onmouseout="this.style.backgroundColor='var(--bg-secondary)'"
|
||||||
:title="note.type !== 'note' ? t('toolbar.delete_image') : t('toolbar.delete_note')"
|
:title="note.type === 'note' ? t('toolbar.delete_note') : (note.type === 'drawing' ? t('toolbar.delete_drawing') : t('toolbar.delete_image'))"
|
||||||
>
|
>
|
||||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
||||||
|
|
@ -2467,12 +2529,12 @@
|
||||||
class="text-xl font-semibold border-none focus:outline-none focus:ring-2 rounded px-3 py-1.5"
|
class="text-xl font-semibold border-none focus:outline-none focus:ring-2 rounded px-3 py-1.5"
|
||||||
:style="'background-color: var(--bg-primary); color: var(--text-primary); border: 1px solid var(--border-primary); min-width: 150px; max-width: 300px;' + (!currentNote ? ' cursor: default; opacity: 0.9;' : '')"
|
:style="'background-color: var(--bg-primary); color: var(--text-primary); border: 1px solid var(--border-primary); min-width: 150px; max-width: 300px;' + (!currentNote ? ' cursor: default; opacity: 0.9;' : '')"
|
||||||
>
|
>
|
||||||
<!-- Undo Button -->
|
<!-- Undo Button (note history or drawing strokes when viewing a drawing) -->
|
||||||
<button
|
<button
|
||||||
@click="undo()"
|
@click="currentMediaType === 'drawing' ? drawingUndo() : undo()"
|
||||||
:disabled="undoHistory.length <= 1"
|
:disabled="currentMediaType === 'drawing' ? drawingOps.length === 0 : undoHistory.length <= 1"
|
||||||
class="p-2 rounded-lg"
|
class="p-2 rounded-lg"
|
||||||
:style="undoHistory.length <= 1 ? 'color: var(--text-tertiary); opacity: 0.4; cursor: not-allowed;' : 'color: var(--text-secondary);'"
|
:style="(currentMediaType === 'drawing' ? drawingOps.length === 0 : undoHistory.length <= 1) ? 'color: var(--text-tertiary); opacity: 0.4; cursor: not-allowed;' : 'color: var(--text-secondary);'"
|
||||||
onmouseover="if(!this.disabled) this.style.backgroundColor='var(--bg-hover)'"
|
onmouseover="if(!this.disabled) this.style.backgroundColor='var(--bg-hover)'"
|
||||||
onmouseout="this.style.backgroundColor='transparent'"
|
onmouseout="this.style.backgroundColor='transparent'"
|
||||||
:title="t('toolbar.undo')"
|
:title="t('toolbar.undo')"
|
||||||
|
|
@ -2484,10 +2546,10 @@
|
||||||
|
|
||||||
<!-- Redo Button -->
|
<!-- Redo Button -->
|
||||||
<button
|
<button
|
||||||
@click="redo()"
|
@click="currentMediaType === 'drawing' ? drawingRedo() : redo()"
|
||||||
:disabled="redoHistory.length === 0"
|
:disabled="currentMediaType === 'drawing' ? drawingRedoStack.length === 0 : redoHistory.length === 0"
|
||||||
class="p-2 rounded-lg"
|
class="p-2 rounded-lg"
|
||||||
:style="redoHistory.length === 0 ? 'color: var(--text-tertiary); opacity: 0.4; cursor: not-allowed;' : 'color: var(--text-secondary);'"
|
:style="(currentMediaType === 'drawing' ? drawingRedoStack.length === 0 : redoHistory.length === 0) ? 'color: var(--text-tertiary); opacity: 0.4; cursor: not-allowed;' : 'color: var(--text-secondary);'"
|
||||||
onmouseover="if(!this.disabled) this.style.backgroundColor='var(--bg-hover)'"
|
onmouseover="if(!this.disabled) this.style.backgroundColor='var(--bg-hover)'"
|
||||||
onmouseout="this.style.backgroundColor='transparent'"
|
onmouseout="this.style.backgroundColor='transparent'"
|
||||||
:title="t('toolbar.redo')"
|
:title="t('toolbar.redo')"
|
||||||
|
|
@ -2504,7 +2566,7 @@
|
||||||
style="color: var(--error);"
|
style="color: var(--error);"
|
||||||
onmouseover="this.style.backgroundColor='var(--bg-hover)'"
|
onmouseover="this.style.backgroundColor='var(--bg-hover)'"
|
||||||
onmouseout="this.style.backgroundColor='transparent'"
|
onmouseout="this.style.backgroundColor='transparent'"
|
||||||
:title="currentMedia ? t('toolbar.delete_image') : t('toolbar.delete_note')"
|
:title="currentMedia ? (currentMediaType === 'drawing' ? t('toolbar.delete_drawing') : t('toolbar.delete_image')) : t('toolbar.delete_note')"
|
||||||
>
|
>
|
||||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
||||||
|
|
@ -2654,6 +2716,130 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Drawing tools (below main toolbar; undo/redo use icons above) -->
|
||||||
|
<div
|
||||||
|
x-show="currentMedia && currentMediaType === 'drawing'"
|
||||||
|
class="px-4 py-2 flex flex-wrap gap-2 items-center border-b flex-shrink-0 zen-hide"
|
||||||
|
style="background-color: var(--bg-secondary); border-color: var(--border-primary);"
|
||||||
|
x-cloak
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="p-2 rounded-lg border transition-colors"
|
||||||
|
:style="drawingTool === 'freehand' ? 'background-color: var(--accent-primary); color: white; border-color: var(--accent-primary);' : 'background-color: var(--bg-tertiary); color: var(--text-secondary); border-color: var(--border-primary);'"
|
||||||
|
@click="drawingTool = 'freehand'"
|
||||||
|
:title="t('drawing.tool_freehand')"
|
||||||
|
>
|
||||||
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="p-2 rounded-lg border transition-colors"
|
||||||
|
:style="drawingTool === 'line' ? 'background-color: var(--accent-primary); color: white; border-color: var(--accent-primary);' : 'background-color: var(--bg-tertiary); color: var(--text-secondary); border-color: var(--border-primary);'"
|
||||||
|
@click="drawingTool = 'line'"
|
||||||
|
:title="t('drawing.tool_line')"
|
||||||
|
>
|
||||||
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 20L20 4" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="p-2 rounded-lg border transition-colors"
|
||||||
|
:style="drawingTool === 'rect' ? 'background-color: var(--accent-primary); color: white; border-color: var(--accent-primary);' : 'background-color: var(--bg-tertiary); color: var(--text-secondary); border-color: var(--border-primary);'"
|
||||||
|
@click="drawingTool = 'rect'"
|
||||||
|
:title="t('drawing.tool_rect')"
|
||||||
|
>
|
||||||
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 5a2 2 0 012-2h12a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V5z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="p-2 rounded-lg border transition-colors"
|
||||||
|
:style="drawingTool === 'ellipse' ? 'background-color: var(--accent-primary); color: white; border-color: var(--accent-primary);' : 'background-color: var(--bg-tertiary); color: var(--text-secondary); border-color: var(--border-primary);'"
|
||||||
|
@click="drawingTool = 'ellipse'"
|
||||||
|
:title="t('drawing.tool_ellipse')"
|
||||||
|
>
|
||||||
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="p-2 rounded-lg border transition-colors"
|
||||||
|
:style="drawingTool === 'eraser' ? 'background-color: var(--accent-primary); color: white; border-color: var(--accent-primary);' : 'background-color: var(--bg-tertiary); color: var(--text-secondary); border-color: var(--border-primary);'"
|
||||||
|
@click="drawingTool = 'eraser'"
|
||||||
|
:title="t('drawing.tool_eraser')"
|
||||||
|
>
|
||||||
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21M22 21H7M5 11l9 9" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="p-2 rounded-lg border transition-colors"
|
||||||
|
:style="drawingTool === 'eyedropper' ? 'background-color: var(--accent-primary); color: white; border-color: var(--accent-primary);' : 'background-color: var(--bg-tertiary); color: var(--text-secondary); border-color: var(--border-primary);'"
|
||||||
|
@click="drawingTool = 'eyedropper'"
|
||||||
|
:title="t('drawing.tool_eyedropper')"
|
||||||
|
>
|
||||||
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m15 11.25 1.425 1.425c.671.671.671 1.757 0 2.428l-1.06 1.06c-.671.671-1.757.671-2.428 0l-1.425-1.425m6-6 1.425-1.425c.671-.671 1.757-.671 2.428 0l1.06 1.06c.671.671.671 1.757 0 2.428L21 15.75m-6-6L8.25 3.75a2.121 2.121 0 0 0-3 3L12 15.75l3-3m-3-3-6 6" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="p-2 rounded-lg border transition-colors"
|
||||||
|
:class="!drawingClearEnabled() ? 'opacity-40 cursor-not-allowed' : ''"
|
||||||
|
:style="!drawingClearEnabled()
|
||||||
|
? 'border-color: var(--border-primary); color: var(--text-secondary);'
|
||||||
|
: 'border-color: var(--border-primary); color: var(--text-secondary); background-color: var(--bg-tertiary);'"
|
||||||
|
:disabled="!drawingClearEnabled()"
|
||||||
|
@click="drawingClear()"
|
||||||
|
:title="t('drawing.clear_hint')"
|
||||||
|
>
|
||||||
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<label
|
||||||
|
class="flex h-9 items-center gap-2 rounded-lg border px-2 shrink-0 cursor-pointer"
|
||||||
|
style="border-color: var(--border-primary); background-color: var(--bg-tertiary);"
|
||||||
|
:title="t('drawing.color')"
|
||||||
|
>
|
||||||
|
<span class="text-xs select-none" style="color: var(--text-secondary);" x-text="t('drawing.color')"></span>
|
||||||
|
<input
|
||||||
|
type="color"
|
||||||
|
x-model="drawingColor"
|
||||||
|
class="h-7 w-8 shrink-0 cursor-pointer rounded border p-0"
|
||||||
|
style="border-color: var(--border-primary);"
|
||||||
|
:aria-label="t('drawing.color')"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
<div
|
||||||
|
class="flex h-9 min-w-0 shrink items-center gap-2 rounded-lg border px-2"
|
||||||
|
style="border-color: var(--border-primary); background-color: var(--bg-tertiary);"
|
||||||
|
:title="t('drawing.width')"
|
||||||
|
>
|
||||||
|
<span class="text-xs whitespace-nowrap select-none shrink-0" style="color: var(--text-secondary);" x-text="t('drawing.width')"></span>
|
||||||
|
<input
|
||||||
|
type="range"
|
||||||
|
min="1"
|
||||||
|
max="32"
|
||||||
|
x-model.number="drawingLineWidth"
|
||||||
|
class="w-24 md:w-36 align-middle min-w-0 flex-1"
|
||||||
|
style="accent-color: var(--accent-primary);"
|
||||||
|
:aria-label="t('drawing.width')"
|
||||||
|
:aria-valuemin="1"
|
||||||
|
:aria-valuemax="32"
|
||||||
|
:aria-valuenow="drawingLineWidth"
|
||||||
|
/>
|
||||||
|
<span class="text-xs tabular-nums shrink-0 w-5 text-right" style="color: var(--text-secondary);" x-text="drawingLineWidth"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Editor/Preview/Graph -->
|
<!-- Editor/Preview/Graph -->
|
||||||
<div class="flex-1 flex relative" style="min-height: 0;">
|
<div class="flex-1 flex relative" style="min-height: 0;">
|
||||||
<!-- Editor -->
|
<!-- Editor -->
|
||||||
|
|
@ -2875,8 +3061,9 @@
|
||||||
<!-- Media Viewer (images, audio, video, PDF) -->
|
<!-- Media Viewer (images, audio, video, PDF) -->
|
||||||
<template x-if="currentMedia">
|
<template x-if="currentMedia">
|
||||||
<div
|
<div
|
||||||
class="flex-1 flex items-center justify-center overflow-auto"
|
class="flex-1 flex overflow-auto min-h-0"
|
||||||
style="background-color: var(--bg-primary); min-height: 0;"
|
:class="currentMediaType === 'drawing' ? 'items-stretch justify-stretch' : 'items-center justify-center'"
|
||||||
|
style="background-color: var(--bg-primary);"
|
||||||
>
|
>
|
||||||
<!-- Image -->
|
<!-- Image -->
|
||||||
<template x-if="currentMediaType === 'image'">
|
<template x-if="currentMediaType === 'image'">
|
||||||
|
|
@ -2921,6 +3108,32 @@
|
||||||
:title="currentMedia.split('/').pop()"
|
:title="currentMedia.split('/').pop()"
|
||||||
></iframe>
|
></iframe>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<!-- Drawing (PNG named drawing-*.png); tools row is in header area above -->
|
||||||
|
<template x-if="currentMediaType === 'drawing'">
|
||||||
|
<div
|
||||||
|
class="flex flex-col flex-1 w-full min-w-0 min-h-0 self-stretch"
|
||||||
|
:key="currentMedia"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
x-ref="drawingCanvasWrap"
|
||||||
|
class="flex-1 w-full min-h-0 min-w-0 flex items-center justify-center"
|
||||||
|
style="min-height: 0; background-color: var(--bg-secondary);"
|
||||||
|
>
|
||||||
|
<canvas
|
||||||
|
x-ref="drawingCanvas"
|
||||||
|
class="drawing-surface block"
|
||||||
|
:style="drawingTool === 'eyedropper'
|
||||||
|
? 'touch-action: none; cursor: copy; background: #fff;'
|
||||||
|
: 'touch-action: none; cursor: crosshair; background: #fff;'"
|
||||||
|
@pointerdown.prevent="drawingPointerDown($event)"
|
||||||
|
@pointermove.prevent="drawingPointerMove($event)"
|
||||||
|
@pointerup.prevent="drawingPointerUp($event)"
|
||||||
|
@pointercancel.prevent="drawingPointerUp($event)"
|
||||||
|
></canvas>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -3115,6 +3328,16 @@
|
||||||
<span class="text-lg">📄</span>
|
<span class="text-lg">📄</span>
|
||||||
<span x-text="t('sidebar.new_from_template')"></span>
|
<span x-text="t('sidebar.new_from_template')"></span>
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
@click="createNewDrawing()"
|
||||||
|
class="w-full px-4 py-2.5 text-sm text-left flex items-center gap-3 transition-colors"
|
||||||
|
style="color: var(--text-primary);"
|
||||||
|
onmouseover="this.style.backgroundColor='var(--bg-hover)'"
|
||||||
|
onmouseout="this.style.backgroundColor='transparent'"
|
||||||
|
>
|
||||||
|
<span class="text-lg">✏️</span>
|
||||||
|
<span x-text="t('sidebar.new_drawing')"></span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "Deutsch",
|
"name": "Deutsch",
|
||||||
"flag": "🇩🇪"
|
"flag": "🇩🇪"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "Deine selbstgehostete Wissensdatenbank"
|
"tagline": "Deine selbstgehostete Wissensdatenbank"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Speichern",
|
"save": "Speichern",
|
||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "In Zwischenablage kopieren",
|
"copy_to_clipboard": "In Zwischenablage kopieren",
|
||||||
"failed": "{{action}} fehlgeschlagen. Bitte versuche es erneut."
|
"failed": "{{action}} fehlgeschlagen. Bitte versuche es erneut."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Benachrichtigungen",
|
"region_label": "Benachrichtigungen",
|
||||||
"dismiss": "Schließen"
|
"dismiss": "Schließen"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "DATEIEN",
|
"title": "DATEIEN",
|
||||||
"favorites_title": "Favoriten",
|
"favorites_title": "Favoriten",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "Neue Notiz",
|
"new_note": "Neue Notiz",
|
||||||
"new_folder": "Neuer Ordner",
|
"new_folder": "Neuer Ordner",
|
||||||
"new_from_template": "Neu aus Vorlage",
|
"new_from_template": "Neu aus Vorlage",
|
||||||
|
"new_drawing": "Neue Zeichnung",
|
||||||
"rename_folder": "Ordner umbenennen",
|
"rename_folder": "Ordner umbenennen",
|
||||||
"delete_folder": "Ordner löschen",
|
"delete_folder": "Ordner löschen",
|
||||||
"search_placeholder": "Notizen durchsuchen...",
|
"search_placeholder": "Notizen durchsuchen...",
|
||||||
|
|
@ -72,7 +69,6 @@
|
||||||
"settings_title": "EINSTELLUNGEN",
|
"settings_title": "EINSTELLUNGEN",
|
||||||
"filtered_notes": "Gefilterte Notizen"
|
"filtered_notes": "Gefilterte Notizen"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Schreibe in Markdown...",
|
"placeholder": "Schreibe in Markdown...",
|
||||||
"drop_hint": "💡 Hier ablegen, um an Cursorposition einzufügen...",
|
"drop_hint": "💡 Hier ablegen, um an Cursorposition einzufügen...",
|
||||||
|
|
@ -85,7 +81,6 @@
|
||||||
"hours_ago": "vor {{count}}h",
|
"hours_ago": "vor {{count}}h",
|
||||||
"days_ago": "vor {{count}}T"
|
"days_ago": "vor {{count}}T"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "\"{{name}}\" löschen?",
|
"confirm_delete": "\"{{name}}\" löschen?",
|
||||||
"already_exists": "Eine Notiz mit dem Namen \"{{name}}\" existiert bereits an diesem Ort.\nBitte wähle einen anderen Namen.",
|
"already_exists": "Eine Notiz mit dem Namen \"{{name}}\" existiert bereits an diesem Ort.\nBitte wähle einen anderen Namen.",
|
||||||
|
|
@ -101,7 +96,6 @@
|
||||||
"no_content": "Kein Inhalt zum Exportieren",
|
"no_content": "Kein Inhalt zum Exportieren",
|
||||||
"open_first": "Bitte öffne zuerst eine Notiz, bevor du Bilder hochlädst."
|
"open_first": "Bitte öffne zuerst eine Notiz, bevor du Bilder hochlädst."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ WARNUNG ⚠️\n\nBist du sicher, dass du den Ordner \"{{name}}\" löschen möchtest?\n\nDies LÖSCHT DAUERHAFT:\n• Alle Notizen in diesem Ordner\n• Alle Unterordner und deren Inhalte\n\nDiese Aktion kann NICHT rückgängig gemacht werden!",
|
"confirm_delete": "⚠️ WARNUNG ⚠️\n\nBist du sicher, dass du den Ordner \"{{name}}\" löschen möchtest?\n\nDies LÖSCHT DAUERHAFT:\n• Alle Notizen in diesem Ordner\n• Alle Unterordner und deren Inhalte\n\nDiese Aktion kann NICHT rückgängig gemacht werden!",
|
||||||
"already_exists": "Ein Ordner mit dem Namen \"{{name}}\" existiert bereits an diesem Ort.\nBitte wähle einen anderen Namen.",
|
"already_exists": "Ein Ordner mit dem Namen \"{{name}}\" existiert bereits an diesem Ort.\nBitte wähle einen anderen Namen.",
|
||||||
|
|
@ -118,26 +112,24 @@
|
||||||
"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"
|
"empty": "leer"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Rückgängig (Strg+Z)",
|
"undo": "Rückgängig (Strg+Z)",
|
||||||
"redo": "Wiederholen (Strg+Y)",
|
"redo": "Wiederholen (Strg+Y)",
|
||||||
"delete_note": "Notiz löschen",
|
"delete_note": "Notiz löschen",
|
||||||
"delete_image": "Bild löschen",
|
"delete_image": "Bild löschen",
|
||||||
|
"delete_drawing": "Zeichnung löschen",
|
||||||
"export_html": "Als HTML exportieren",
|
"export_html": "Als HTML exportieren",
|
||||||
"print_preview": "Druckvorschau",
|
"print_preview": "Druckvorschau",
|
||||||
"copy_link": "Link in Zwischenablage kopieren",
|
"copy_link": "Link in Zwischenablage kopieren",
|
||||||
"add_favorite": "Zu Favoriten hinzufügen",
|
"add_favorite": "Zu Favoriten hinzufügen",
|
||||||
"remove_favorite": "Aus Favoriten entfernen"
|
"remove_favorite": "Aus Favoriten entfernen"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Zen-Modus",
|
"title": "Zen-Modus",
|
||||||
"tooltip": "Zen-Modus (Strg+Alt+Z)",
|
"tooltip": "Zen-Modus (Strg+Alt+Z)",
|
||||||
"exit": "Zen-Modus beenden",
|
"exit": "Zen-Modus beenden",
|
||||||
"exit_hint": "Zen-Modus beenden (Esc)"
|
"exit_hint": "Zen-Modus beenden (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Notiz teilen",
|
"button_tooltip": "Notiz teilen",
|
||||||
"modal_title": "Notiz teilen",
|
"modal_title": "Notiz teilen",
|
||||||
|
|
@ -150,9 +142,10 @@
|
||||||
"error_creating": "Fehler beim Erstellen des Freigabelinks: {{error}}",
|
"error_creating": "Fehler beim Erstellen des Freigabelinks: {{error}}",
|
||||||
"error_revoking": "Fehler beim Widerrufen des Freigabelinks: {{error}}",
|
"error_revoking": "Fehler beim Widerrufen des Freigabelinks: {{error}}",
|
||||||
"show_qr": "QR-Code anzeigen",
|
"show_qr": "QR-Code anzeigen",
|
||||||
"hide_qr": "QR-Code ausblenden"
|
"hide_qr": "QR-Code ausblenden",
|
||||||
|
"panel_title": "Geteilt",
|
||||||
|
"no_shared": "Keine geteilten Notizen"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Notizen suchen...",
|
"placeholder": "Notizen suchen...",
|
||||||
"no_results": "Keine Ergebnisse",
|
"no_results": "Keine Ergebnisse",
|
||||||
|
|
@ -161,7 +154,6 @@
|
||||||
"open": "öffnen",
|
"open": "öffnen",
|
||||||
"close": "schließen"
|
"close": "schließen"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Tags",
|
"title": "Tags",
|
||||||
"no_tags": "Keine Tags gefunden",
|
"no_tags": "Keine Tags gefunden",
|
||||||
|
|
@ -170,13 +162,11 @@
|
||||||
"clear_all": "Tag-Filter löschen",
|
"clear_all": "Tag-Filter löschen",
|
||||||
"filter_by": "Nach {{tag}} filtern ({{count}} Notizen)"
|
"filter_by": "Nach {{tag}} filtern ({{count}} Notizen)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Gliederung",
|
"title": "Gliederung",
|
||||||
"no_headings": "Keine Überschriften gefunden",
|
"no_headings": "Keine Überschriften gefunden",
|
||||||
"hint": "Überschriften mit # hinzufügen"
|
"hint": "Überschriften mit # hinzufügen"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Rückverweise",
|
"title": "Rückverweise",
|
||||||
"no_backlinks": "Keine Rückverweise gefunden",
|
"no_backlinks": "Keine Rückverweise gefunden",
|
||||||
|
|
@ -184,21 +174,18 @@
|
||||||
"select_note": "Wählen Sie eine Notiz um Rückverweise zu sehen",
|
"select_note": "Wählen Sie eine Notiz um Rückverweise zu sehen",
|
||||||
"more_refs": "mehr"
|
"more_refs": "mehr"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "Wörter",
|
"words": "Wörter",
|
||||||
"reading_time": "~{{minutes}} Min. Lesezeit",
|
"reading_time": "~{{minutes}} Min. Lesezeit",
|
||||||
"links": "{{count}} Links",
|
"links": "{{count}} Links",
|
||||||
"click_details": "▼ Klicken für Details"
|
"click_details": "▼ Klicken für Details"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Graphansicht",
|
"title": "Graphansicht",
|
||||||
"empty": "Keine Verbindungen anzuzeigen",
|
"empty": "Keine Verbindungen anzuzeigen",
|
||||||
"markdown_links": "Markdown-Links",
|
"markdown_links": "Markdown-Links",
|
||||||
"click_hint": "Klick: auswählen • Doppelklick: öffnen"
|
"click_hint": "Klick: auswählen • Doppelklick: öffnen"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Vorlagen",
|
"title": "Vorlagen",
|
||||||
"select": "Vorlage auswählen...",
|
"select": "Vorlage auswählen...",
|
||||||
|
|
@ -212,11 +199,9 @@
|
||||||
"available_placeholders": "Verfügbare Platzhalter",
|
"available_placeholders": "Verfügbare Platzhalter",
|
||||||
"create_note": "Notiz erstellen"
|
"create_note": "Notiz erstellen"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "HTML-Export fehlgeschlagen: {{error}}"
|
"failed": "HTML-Export fehlgeschlagen: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Anmelden",
|
"title": "Anmelden",
|
||||||
"tagline": "Deine selbstgehostete Wissensdatenbank",
|
"tagline": "Deine selbstgehostete Wissensdatenbank",
|
||||||
|
|
@ -225,20 +210,31 @@
|
||||||
"footer": "🔒 Sicher & Selbstgehostet",
|
"footer": "🔒 Sicher & Selbstgehostet",
|
||||||
"error_incorrect_password": "Falsches Passwort. Bitte versuche es erneut."
|
"error_incorrect_password": "Falsches Passwort. Bitte versuche es erneut."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Stift — Freihand",
|
||||||
|
"tool_line": "Gerade Linie",
|
||||||
|
"tool_rect": "Rechteck",
|
||||||
|
"tool_ellipse": "Kreis",
|
||||||
|
"color": "Farbe",
|
||||||
|
"width": "Strichstärke",
|
||||||
|
"tool_eraser": "Radierer (malt mit Hintergrundfarbe)",
|
||||||
|
"tool_eyedropper": "Pipette — Farbe vom Bild aufnehmen",
|
||||||
|
"clear": "Leeren",
|
||||||
|
"clear_hint": "Durch leeres Bild ersetzen",
|
||||||
|
"clear_title": "Durch leere Leinwand ersetzen?",
|
||||||
|
"clear_confirm": "Die gespeicherte PNG-Datei und alle Striche in dieser Sitzung werden durch ein weißes Bild ersetzt. Dies kann nicht rückgängig gemacht werden."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "\"{{name}}\" löschen?",
|
"confirm_delete": "\"{{name}}\" löschen?",
|
||||||
"upload_failed": "Datei-Upload fehlgeschlagen",
|
"upload_failed": "Datei-Upload fehlgeschlagen",
|
||||||
"no_valid_files": "Keine gültigen Dateien gefunden. Unterstützt: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "Keine gültigen Dateien gefunden. Unterstützt: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Verschieben der Notiz fehlgeschlagen.",
|
"failed_note": "Verschieben der Notiz fehlgeschlagen.",
|
||||||
"failed_folder": "Verschieben des Ordners fehlgeschlagen.",
|
"failed_folder": "Verschieben des Ordners fehlgeschlagen.",
|
||||||
"failed_media": "Verschieben der Mediendatei fehlgeschlagen."
|
"failed_media": "Verschieben der Mediendatei fehlgeschlagen."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Vorheriger (Umschalt+F3)",
|
"previous": "Vorheriger (Umschalt+F3)",
|
||||||
"next": "Nächster (F3)",
|
"next": "Nächster (F3)",
|
||||||
|
|
@ -249,22 +245,18 @@
|
||||||
"no_results": "Keine Notizen enthalten \"{{query}}\"",
|
"no_results": "Keine Notizen enthalten \"{{query}}\"",
|
||||||
"searching": "Suche nach \"{{query}}\"..."
|
"searching": "Suche nach \"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Design"
|
"title": "Design"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Sprache"
|
"title": "Sprache"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Syntax-Highlighting",
|
"title": "Syntax-Highlighting",
|
||||||
"description": "Markdown-Syntax im Editor einfärben",
|
"description": "Markdown-Syntax im Editor einfärben",
|
||||||
"enable": "Syntax-Highlighting aktivieren",
|
"enable": "Syntax-Highlighting aktivieren",
|
||||||
"disable": "Syntax-Highlighting deaktivieren"
|
"disable": "Syntax-Highlighting deaktivieren"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Konto",
|
"account": "Konto",
|
||||||
"logout": "Abmelden",
|
"logout": "Abmelden",
|
||||||
|
|
@ -275,7 +267,6 @@
|
||||||
"tab_inserts_tab": "Tab-Taste fügt Tab ein",
|
"tab_inserts_tab": "Tab-Taste fügt Tab ein",
|
||||||
"tab_inserts_tab_desc": "Tab drücken, um ein Tabulatorzeichen einzufügen statt den Fokus zu wechseln"
|
"tab_inserts_tab_desc": "Tab drücken, um ein Tabulatorzeichen einzufügen statt den Fokus zu wechseln"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Startseite",
|
"title": "Startseite",
|
||||||
"welcome": "Willkommen bei NoteDiscovery",
|
"welcome": "Willkommen bei NoteDiscovery",
|
||||||
|
|
@ -288,7 +279,6 @@
|
||||||
"folder_singular": "Ordner",
|
"folder_singular": "Ordner",
|
||||||
"folder_plural": "Ordner"
|
"folder_plural": "Ordner"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Fett",
|
"bold": "Fett",
|
||||||
"italic": "Kursiv",
|
"italic": "Kursiv",
|
||||||
|
|
@ -304,23 +294,19 @@
|
||||||
"checkbox": "Kontrollkästchen",
|
"checkbox": "Kontrollkästchen",
|
||||||
"table": "Tabelle"
|
"table": "Tabelle"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "Der Name enthält unzulässige Zeichen: {{chars}}",
|
"forbidden_chars": "Der Name enthält unzulässige Zeichen: {{chars}}",
|
||||||
"reserved_name": "Dieser Name ist vom Betriebssystem reserviert.",
|
"reserved_name": "Dieser Name ist vom Betriebssystem reserviert.",
|
||||||
"invalid_dot": "Der Name darf nicht nur ein Punkt sein.",
|
"invalid_dot": "Der Name darf nicht nur ein Punkt sein.",
|
||||||
"trailing_dot_space": "Der Name darf nicht mit einem Punkt oder Leerzeichen enden."
|
"trailing_dot_space": "Der Name darf nicht mit einem Punkt oder Leerzeichen enden."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Unterstütze dieses Projekt",
|
"enjoying_demo": "Unterstütze dieses Projekt",
|
||||||
"deploy_own": "Eigene Instanz bereitstellen",
|
"deploy_own": "Eigene Instanz bereitstellen",
|
||||||
"thank_you": "Danke für deine Unterstützung! 💚"
|
"thank_you": "Danke für deine Unterstützung! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "DEMO-MODUS",
|
"title": "DEMO-MODUS",
|
||||||
"warning": "Inhalte werden täglich zurückgesetzt. Änderungen können von anderen Benutzern überschrieben werden."
|
"warning": "Inhalte werden täglich zurückgesetzt. Änderungen können von anderen Benutzern überschrieben werden."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "English",
|
"name": "English",
|
||||||
"flag": "🇬🇧"
|
"flag": "🇬🇧"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "Your Self-Hosted Knowledge Base"
|
"tagline": "Your Self-Hosted Knowledge Base"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "Copy to clipboard",
|
"copy_to_clipboard": "Copy to clipboard",
|
||||||
"failed": "Failed to {{action}}. Please try again."
|
"failed": "Failed to {{action}}. Please try again."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Notifications",
|
"region_label": "Notifications",
|
||||||
"dismiss": "Dismiss"
|
"dismiss": "Dismiss"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "FILES",
|
"title": "FILES",
|
||||||
"favorites_title": "Favourites",
|
"favorites_title": "Favourites",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "New Note",
|
"new_note": "New Note",
|
||||||
"new_folder": "New Folder",
|
"new_folder": "New Folder",
|
||||||
"new_from_template": "New from Template",
|
"new_from_template": "New from Template",
|
||||||
|
"new_drawing": "New Drawing",
|
||||||
"rename_folder": "Rename folder",
|
"rename_folder": "Rename folder",
|
||||||
"delete_folder": "Delete folder",
|
"delete_folder": "Delete folder",
|
||||||
"search_placeholder": "Search notes...",
|
"search_placeholder": "Search notes...",
|
||||||
|
|
@ -71,7 +68,6 @@
|
||||||
"settings_title": "SETTINGS",
|
"settings_title": "SETTINGS",
|
||||||
"filtered_notes": "Filtered Notes"
|
"filtered_notes": "Filtered Notes"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Start writing in markdown...",
|
"placeholder": "Start writing in markdown...",
|
||||||
"drop_hint": "💡 Drop here to insert at cursor position...",
|
"drop_hint": "💡 Drop here to insert at cursor position...",
|
||||||
|
|
@ -84,7 +80,6 @@
|
||||||
"hours_ago": "{{count}}h ago",
|
"hours_ago": "{{count}}h ago",
|
||||||
"days_ago": "{{count}}d ago"
|
"days_ago": "{{count}}d ago"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "Delete \"{{name}}\"?",
|
"confirm_delete": "Delete \"{{name}}\"?",
|
||||||
"already_exists": "A note named \"{{name}}\" already exists in this location.\nPlease choose a different name.",
|
"already_exists": "A note named \"{{name}}\" already exists in this location.\nPlease choose a different name.",
|
||||||
|
|
@ -100,7 +95,6 @@
|
||||||
"no_content": "No note content to export",
|
"no_content": "No note content to export",
|
||||||
"open_first": "Please open a note first before uploading images."
|
"open_first": "Please open a note first before uploading images."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ WARNING ⚠️\n\nAre you sure you want to delete the folder \"{{name}}\"?\n\nThis will PERMANENTLY delete:\n• All notes inside this folder\n• All subfolders and their contents\n\nThis action CANNOT be undone!",
|
"confirm_delete": "⚠️ WARNING ⚠️\n\nAre you sure you want to delete the folder \"{{name}}\"?\n\nThis will PERMANENTLY delete:\n• All notes inside this folder\n• All subfolders and their contents\n\nThis action CANNOT be undone!",
|
||||||
"already_exists": "A folder named \"{{name}}\" already exists in this location.\nPlease choose a different name.",
|
"already_exists": "A folder named \"{{name}}\" already exists in this location.\nPlease choose a different name.",
|
||||||
|
|
@ -117,26 +111,24 @@
|
||||||
"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"
|
"empty": "empty"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Undo (Ctrl+Z)",
|
"undo": "Undo (Ctrl+Z)",
|
||||||
"redo": "Redo (Ctrl+Y)",
|
"redo": "Redo (Ctrl+Y)",
|
||||||
"delete_note": "Delete note",
|
"delete_note": "Delete note",
|
||||||
"delete_image": "Delete image",
|
"delete_image": "Delete image",
|
||||||
|
"delete_drawing": "Delete drawing",
|
||||||
"export_html": "Export as HTML",
|
"export_html": "Export as HTML",
|
||||||
"print_preview": "Print preview",
|
"print_preview": "Print preview",
|
||||||
"copy_link": "Copy link to clipboard",
|
"copy_link": "Copy link to clipboard",
|
||||||
"add_favorite": "Add to favourites",
|
"add_favorite": "Add to favourites",
|
||||||
"remove_favorite": "Remove from favourites"
|
"remove_favorite": "Remove from favourites"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Zen Mode",
|
"title": "Zen Mode",
|
||||||
"tooltip": "Zen Mode (Ctrl+Alt+Z)",
|
"tooltip": "Zen Mode (Ctrl+Alt+Z)",
|
||||||
"exit": "Exit Zen Mode",
|
"exit": "Exit Zen Mode",
|
||||||
"exit_hint": "Exit Zen Mode (Esc)"
|
"exit_hint": "Exit Zen Mode (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Share note",
|
"button_tooltip": "Share note",
|
||||||
"modal_title": "Share Note",
|
"modal_title": "Share Note",
|
||||||
|
|
@ -149,9 +141,10 @@
|
||||||
"error_creating": "Failed to create share link: {{error}}",
|
"error_creating": "Failed to create share link: {{error}}",
|
||||||
"error_revoking": "Failed to revoke share link: {{error}}",
|
"error_revoking": "Failed to revoke share link: {{error}}",
|
||||||
"show_qr": "Show QR Code",
|
"show_qr": "Show QR Code",
|
||||||
"hide_qr": "Hide QR Code"
|
"hide_qr": "Hide QR Code",
|
||||||
|
"panel_title": "Shared",
|
||||||
|
"no_shared": "No shared notes"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Type to search notes...",
|
"placeholder": "Type to search notes...",
|
||||||
"no_results": "No matching notes",
|
"no_results": "No matching notes",
|
||||||
|
|
@ -160,7 +153,6 @@
|
||||||
"open": "open",
|
"open": "open",
|
||||||
"close": "close"
|
"close": "close"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Tags",
|
"title": "Tags",
|
||||||
"no_tags": "No tags found",
|
"no_tags": "No tags found",
|
||||||
|
|
@ -169,13 +161,11 @@
|
||||||
"clear_all": "Clear tag filters",
|
"clear_all": "Clear tag filters",
|
||||||
"filter_by": "Filter by {{tag}} ({{count}} notes)"
|
"filter_by": "Filter by {{tag}} ({{count}} notes)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Outline",
|
"title": "Outline",
|
||||||
"no_headings": "No headings found",
|
"no_headings": "No headings found",
|
||||||
"hint": "Add headings using # syntax"
|
"hint": "Add headings using # syntax"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Backlinks",
|
"title": "Backlinks",
|
||||||
"no_backlinks": "No backlinks found",
|
"no_backlinks": "No backlinks found",
|
||||||
|
|
@ -183,21 +173,18 @@
|
||||||
"select_note": "Select a note to see backlinks",
|
"select_note": "Select a note to see backlinks",
|
||||||
"more_refs": "more"
|
"more_refs": "more"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "words",
|
"words": "words",
|
||||||
"reading_time": "~{{minutes}}m read",
|
"reading_time": "~{{minutes}}m read",
|
||||||
"links": "{{count}} links",
|
"links": "{{count}} links",
|
||||||
"click_details": "▼ Click for details"
|
"click_details": "▼ Click for details"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Graph View",
|
"title": "Graph View",
|
||||||
"empty": "No connections to display",
|
"empty": "No connections to display",
|
||||||
"markdown_links": "Markdown links",
|
"markdown_links": "Markdown links",
|
||||||
"click_hint": "Click: select • Double-click: open"
|
"click_hint": "Click: select • Double-click: open"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Templates",
|
"title": "Templates",
|
||||||
"select": "Select a template...",
|
"select": "Select a template...",
|
||||||
|
|
@ -211,11 +198,9 @@
|
||||||
"available_placeholders": "Available placeholders",
|
"available_placeholders": "Available placeholders",
|
||||||
"create_note": "Create Note"
|
"create_note": "Create Note"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "Failed to export HTML: {{error}}"
|
"failed": "Failed to export HTML: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Login",
|
"title": "Login",
|
||||||
"tagline": "Your Self-Hosted Knowledge Base",
|
"tagline": "Your Self-Hosted Knowledge Base",
|
||||||
|
|
@ -224,20 +209,31 @@
|
||||||
"footer": "🔒 Secure & Self-Hosted",
|
"footer": "🔒 Secure & Self-Hosted",
|
||||||
"error_incorrect_password": "Incorrect password. Please try again."
|
"error_incorrect_password": "Incorrect password. Please try again."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Pencil — freehand drawing",
|
||||||
|
"tool_line": "Straight line",
|
||||||
|
"tool_rect": "Rectangle",
|
||||||
|
"tool_ellipse": "Circle",
|
||||||
|
"color": "Colour",
|
||||||
|
"width": "Stroke width",
|
||||||
|
"tool_eraser": "Eraser (paints with background colour)",
|
||||||
|
"tool_eyedropper": "Eyedropper — pick a colour from the canvas",
|
||||||
|
"clear": "Clear",
|
||||||
|
"clear_hint": "Replace with a blank image",
|
||||||
|
"clear_title": "Replace with a blank canvas?",
|
||||||
|
"clear_confirm": "The saved PNG and all strokes in this session will be replaced with a blank white image. You cannot undo this."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "Delete \"{{name}}\"?",
|
"confirm_delete": "Delete \"{{name}}\"?",
|
||||||
"upload_failed": "Failed to upload file",
|
"upload_failed": "Failed to upload file",
|
||||||
"no_valid_files": "No valid files found. Supported: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "No valid files found. Supported: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Failed to move note.",
|
"failed_note": "Failed to move note.",
|
||||||
"failed_folder": "Failed to move folder.",
|
"failed_folder": "Failed to move folder.",
|
||||||
"failed_media": "Failed to move media file."
|
"failed_media": "Failed to move media file."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Previous (Shift+F3)",
|
"previous": "Previous (Shift+F3)",
|
||||||
"next": "Next (F3)",
|
"next": "Next (F3)",
|
||||||
|
|
@ -248,22 +244,18 @@
|
||||||
"no_results": "No notes contain \"{{query}}\"",
|
"no_results": "No notes contain \"{{query}}\"",
|
||||||
"searching": "Searching for \"{{query}}\"..."
|
"searching": "Searching for \"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Theme"
|
"title": "Theme"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Language"
|
"title": "Language"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Editor Syntax Highlight",
|
"title": "Editor Syntax Highlight",
|
||||||
"description": "Colourise markdown syntax in editor",
|
"description": "Colourise markdown syntax in editor",
|
||||||
"enable": "Enable syntax highlighting",
|
"enable": "Enable syntax highlighting",
|
||||||
"disable": "Disable syntax highlighting"
|
"disable": "Disable syntax highlighting"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Account",
|
"account": "Account",
|
||||||
"logout": "Logout",
|
"logout": "Logout",
|
||||||
|
|
@ -274,7 +266,6 @@
|
||||||
"tab_inserts_tab": "Tab key inserts tab",
|
"tab_inserts_tab": "Tab key inserts tab",
|
||||||
"tab_inserts_tab_desc": "Press Tab to insert a tab character instead of changing focus"
|
"tab_inserts_tab_desc": "Press Tab to insert a tab character instead of changing focus"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Home",
|
"title": "Home",
|
||||||
"welcome": "Welcome to NoteDiscovery",
|
"welcome": "Welcome to NoteDiscovery",
|
||||||
|
|
@ -287,7 +278,6 @@
|
||||||
"folder_singular": "folder",
|
"folder_singular": "folder",
|
||||||
"folder_plural": "folders"
|
"folder_plural": "folders"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Bold",
|
"bold": "Bold",
|
||||||
"italic": "Italic",
|
"italic": "Italic",
|
||||||
|
|
@ -303,23 +293,19 @@
|
||||||
"checkbox": "Checkbox",
|
"checkbox": "Checkbox",
|
||||||
"table": "Table"
|
"table": "Table"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "Name contains forbidden characters: {{chars}}",
|
"forbidden_chars": "Name contains forbidden characters: {{chars}}",
|
||||||
"reserved_name": "This name is reserved by the operating system.",
|
"reserved_name": "This name is reserved by the operating system.",
|
||||||
"invalid_dot": "Name cannot be just a dot.",
|
"invalid_dot": "Name cannot be just a dot.",
|
||||||
"trailing_dot_space": "Name cannot end with a dot or space."
|
"trailing_dot_space": "Name cannot end with a dot or space."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Support this project",
|
"enjoying_demo": "Support this project",
|
||||||
"deploy_own": "Deploy your own instance",
|
"deploy_own": "Deploy your own instance",
|
||||||
"thank_you": "Thank you for your support! 💚"
|
"thank_you": "Thank you for your support! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "DEMO MODE",
|
"title": "DEMO MODE",
|
||||||
"warning": "Contents reset daily. Changes may be overwritten by other users."
|
"warning": "Contents reset daily. Changes may be overwritten by other users."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "English",
|
"name": "English",
|
||||||
"flag": "🇺🇸"
|
"flag": "🇺🇸"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "Your Self-Hosted Knowledge Base"
|
"tagline": "Your Self-Hosted Knowledge Base"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "Copy to clipboard",
|
"copy_to_clipboard": "Copy to clipboard",
|
||||||
"failed": "Failed to {{action}}. Please try again."
|
"failed": "Failed to {{action}}. Please try again."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Notifications",
|
"region_label": "Notifications",
|
||||||
"dismiss": "Dismiss"
|
"dismiss": "Dismiss"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "FILES",
|
"title": "FILES",
|
||||||
"favorites_title": "Favorites",
|
"favorites_title": "Favorites",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "New Note",
|
"new_note": "New Note",
|
||||||
"new_folder": "New Folder",
|
"new_folder": "New Folder",
|
||||||
"new_from_template": "New from Template",
|
"new_from_template": "New from Template",
|
||||||
|
"new_drawing": "New Drawing",
|
||||||
"rename_folder": "Rename folder",
|
"rename_folder": "Rename folder",
|
||||||
"delete_folder": "Delete folder",
|
"delete_folder": "Delete folder",
|
||||||
"search_placeholder": "Search notes...",
|
"search_placeholder": "Search notes...",
|
||||||
|
|
@ -72,7 +69,6 @@
|
||||||
"settings_title": "SETTINGS",
|
"settings_title": "SETTINGS",
|
||||||
"filtered_notes": "Filtered Notes"
|
"filtered_notes": "Filtered Notes"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Start writing in markdown...",
|
"placeholder": "Start writing in markdown...",
|
||||||
"drop_hint": "💡 Drop here to insert at cursor position...",
|
"drop_hint": "💡 Drop here to insert at cursor position...",
|
||||||
|
|
@ -85,7 +81,6 @@
|
||||||
"hours_ago": "{{count}}h ago",
|
"hours_ago": "{{count}}h ago",
|
||||||
"days_ago": "{{count}}d ago"
|
"days_ago": "{{count}}d ago"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "Delete \"{{name}}\"?",
|
"confirm_delete": "Delete \"{{name}}\"?",
|
||||||
"already_exists": "A note named \"{{name}}\" already exists in this location.\nPlease choose a different name.",
|
"already_exists": "A note named \"{{name}}\" already exists in this location.\nPlease choose a different name.",
|
||||||
|
|
@ -101,7 +96,6 @@
|
||||||
"no_content": "No note content to export",
|
"no_content": "No note content to export",
|
||||||
"open_first": "Please open a note first before uploading images."
|
"open_first": "Please open a note first before uploading images."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ WARNING ⚠️\n\nAre you sure you want to delete the folder \"{{name}}\"?\n\nThis will PERMANENTLY delete:\n• All notes inside this folder\n• All subfolders and their contents\n\nThis action CANNOT be undone!",
|
"confirm_delete": "⚠️ WARNING ⚠️\n\nAre you sure you want to delete the folder \"{{name}}\"?\n\nThis will PERMANENTLY delete:\n• All notes inside this folder\n• All subfolders and their contents\n\nThis action CANNOT be undone!",
|
||||||
"already_exists": "A folder named \"{{name}}\" already exists in this location.\nPlease choose a different name.",
|
"already_exists": "A folder named \"{{name}}\" already exists in this location.\nPlease choose a different name.",
|
||||||
|
|
@ -118,26 +112,24 @@
|
||||||
"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"
|
"empty": "empty"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Undo (Ctrl+Z)",
|
"undo": "Undo (Ctrl+Z)",
|
||||||
"redo": "Redo (Ctrl+Y)",
|
"redo": "Redo (Ctrl+Y)",
|
||||||
"delete_note": "Delete note",
|
"delete_note": "Delete note",
|
||||||
"delete_image": "Delete image",
|
"delete_image": "Delete image",
|
||||||
|
"delete_drawing": "Delete drawing",
|
||||||
"export_html": "Export as HTML",
|
"export_html": "Export as HTML",
|
||||||
"print_preview": "Print preview",
|
"print_preview": "Print preview",
|
||||||
"copy_link": "Copy link to clipboard",
|
"copy_link": "Copy link to clipboard",
|
||||||
"add_favorite": "Add to favorites",
|
"add_favorite": "Add to favorites",
|
||||||
"remove_favorite": "Remove from favorites"
|
"remove_favorite": "Remove from favorites"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Zen Mode",
|
"title": "Zen Mode",
|
||||||
"tooltip": "Zen Mode (Ctrl+Alt+Z)",
|
"tooltip": "Zen Mode (Ctrl+Alt+Z)",
|
||||||
"exit": "Exit Zen Mode",
|
"exit": "Exit Zen Mode",
|
||||||
"exit_hint": "Exit Zen Mode (Esc)"
|
"exit_hint": "Exit Zen Mode (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Share note",
|
"button_tooltip": "Share note",
|
||||||
"modal_title": "Share Note",
|
"modal_title": "Share Note",
|
||||||
|
|
@ -150,9 +142,10 @@
|
||||||
"error_creating": "Failed to create share link: {{error}}",
|
"error_creating": "Failed to create share link: {{error}}",
|
||||||
"error_revoking": "Failed to revoke share link: {{error}}",
|
"error_revoking": "Failed to revoke share link: {{error}}",
|
||||||
"show_qr": "Show QR Code",
|
"show_qr": "Show QR Code",
|
||||||
"hide_qr": "Hide QR Code"
|
"hide_qr": "Hide QR Code",
|
||||||
|
"panel_title": "Shared",
|
||||||
|
"no_shared": "No shared notes"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Type to search notes...",
|
"placeholder": "Type to search notes...",
|
||||||
"no_results": "No matching notes",
|
"no_results": "No matching notes",
|
||||||
|
|
@ -161,7 +154,6 @@
|
||||||
"open": "open",
|
"open": "open",
|
||||||
"close": "close"
|
"close": "close"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Tags",
|
"title": "Tags",
|
||||||
"no_tags": "No tags found",
|
"no_tags": "No tags found",
|
||||||
|
|
@ -170,13 +162,11 @@
|
||||||
"clear_all": "Clear tag filters",
|
"clear_all": "Clear tag filters",
|
||||||
"filter_by": "Filter by {{tag}} ({{count}} notes)"
|
"filter_by": "Filter by {{tag}} ({{count}} notes)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Outline",
|
"title": "Outline",
|
||||||
"no_headings": "No headings found",
|
"no_headings": "No headings found",
|
||||||
"hint": "Add headings using # syntax"
|
"hint": "Add headings using # syntax"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Backlinks",
|
"title": "Backlinks",
|
||||||
"no_backlinks": "No backlinks found",
|
"no_backlinks": "No backlinks found",
|
||||||
|
|
@ -184,21 +174,18 @@
|
||||||
"select_note": "Select a note to see backlinks",
|
"select_note": "Select a note to see backlinks",
|
||||||
"more_refs": "more"
|
"more_refs": "more"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "words",
|
"words": "words",
|
||||||
"reading_time": "~{{minutes}}m read",
|
"reading_time": "~{{minutes}}m read",
|
||||||
"links": "{{count}} links",
|
"links": "{{count}} links",
|
||||||
"click_details": "▼ Click for details"
|
"click_details": "▼ Click for details"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Graph View",
|
"title": "Graph View",
|
||||||
"empty": "No connections to display",
|
"empty": "No connections to display",
|
||||||
"markdown_links": "Markdown links",
|
"markdown_links": "Markdown links",
|
||||||
"click_hint": "Click: select • Double-click: open"
|
"click_hint": "Click: select • Double-click: open"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Templates",
|
"title": "Templates",
|
||||||
"select": "Select a template...",
|
"select": "Select a template...",
|
||||||
|
|
@ -212,11 +199,9 @@
|
||||||
"available_placeholders": "Available placeholders",
|
"available_placeholders": "Available placeholders",
|
||||||
"create_note": "Create Note"
|
"create_note": "Create Note"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "Failed to export HTML: {{error}}"
|
"failed": "Failed to export HTML: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Login",
|
"title": "Login",
|
||||||
"tagline": "Your Self-Hosted Knowledge Base",
|
"tagline": "Your Self-Hosted Knowledge Base",
|
||||||
|
|
@ -225,20 +210,31 @@
|
||||||
"footer": "🔒 Secure & Self-Hosted",
|
"footer": "🔒 Secure & Self-Hosted",
|
||||||
"error_incorrect_password": "Incorrect password. Please try again."
|
"error_incorrect_password": "Incorrect password. Please try again."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Pencil — freehand drawing",
|
||||||
|
"tool_line": "Straight line",
|
||||||
|
"tool_rect": "Rectangle",
|
||||||
|
"tool_ellipse": "Circle",
|
||||||
|
"color": "Color",
|
||||||
|
"width": "Stroke width",
|
||||||
|
"tool_eraser": "Eraser (paints with background color)",
|
||||||
|
"tool_eyedropper": "Eyedropper — pick a color from the canvas",
|
||||||
|
"clear": "Clear",
|
||||||
|
"clear_hint": "Replace with a blank image",
|
||||||
|
"clear_title": "Replace with a blank canvas?",
|
||||||
|
"clear_confirm": "The saved PNG and all strokes in this session will be replaced with a blank white image. You cannot undo this."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "Delete \"{{name}}\"?",
|
"confirm_delete": "Delete \"{{name}}\"?",
|
||||||
"upload_failed": "Failed to upload file",
|
"upload_failed": "Failed to upload file",
|
||||||
"no_valid_files": "No valid files found. Supported: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "No valid files found. Supported: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Failed to move note.",
|
"failed_note": "Failed to move note.",
|
||||||
"failed_folder": "Failed to move folder.",
|
"failed_folder": "Failed to move folder.",
|
||||||
"failed_media": "Failed to move media file."
|
"failed_media": "Failed to move media file."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Previous (Shift+F3)",
|
"previous": "Previous (Shift+F3)",
|
||||||
"next": "Next (F3)",
|
"next": "Next (F3)",
|
||||||
|
|
@ -249,22 +245,18 @@
|
||||||
"no_results": "No notes contain \"{{query}}\"",
|
"no_results": "No notes contain \"{{query}}\"",
|
||||||
"searching": "Searching for \"{{query}}\"..."
|
"searching": "Searching for \"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Theme"
|
"title": "Theme"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Language"
|
"title": "Language"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Editor Syntax Highlight",
|
"title": "Editor Syntax Highlight",
|
||||||
"description": "Colorize markdown syntax in editor",
|
"description": "Colorize markdown syntax in editor",
|
||||||
"enable": "Enable syntax highlighting",
|
"enable": "Enable syntax highlighting",
|
||||||
"disable": "Disable syntax highlighting"
|
"disable": "Disable syntax highlighting"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Account",
|
"account": "Account",
|
||||||
"logout": "Logout",
|
"logout": "Logout",
|
||||||
|
|
@ -275,7 +267,6 @@
|
||||||
"tab_inserts_tab": "Tab key inserts tab",
|
"tab_inserts_tab": "Tab key inserts tab",
|
||||||
"tab_inserts_tab_desc": "Press Tab to insert a tab character instead of changing focus"
|
"tab_inserts_tab_desc": "Press Tab to insert a tab character instead of changing focus"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Home",
|
"title": "Home",
|
||||||
"welcome": "Welcome to NoteDiscovery",
|
"welcome": "Welcome to NoteDiscovery",
|
||||||
|
|
@ -288,7 +279,6 @@
|
||||||
"folder_singular": "folder",
|
"folder_singular": "folder",
|
||||||
"folder_plural": "folders"
|
"folder_plural": "folders"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Bold",
|
"bold": "Bold",
|
||||||
"italic": "Italic",
|
"italic": "Italic",
|
||||||
|
|
@ -304,23 +294,19 @@
|
||||||
"checkbox": "Checkbox",
|
"checkbox": "Checkbox",
|
||||||
"table": "Table"
|
"table": "Table"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "Name contains forbidden characters: {{chars}}",
|
"forbidden_chars": "Name contains forbidden characters: {{chars}}",
|
||||||
"reserved_name": "This name is reserved by the operating system.",
|
"reserved_name": "This name is reserved by the operating system.",
|
||||||
"invalid_dot": "Name cannot be just a dot.",
|
"invalid_dot": "Name cannot be just a dot.",
|
||||||
"trailing_dot_space": "Name cannot end with a dot or space."
|
"trailing_dot_space": "Name cannot end with a dot or space."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Support this project",
|
"enjoying_demo": "Support this project",
|
||||||
"deploy_own": "Deploy your own instance",
|
"deploy_own": "Deploy your own instance",
|
||||||
"thank_you": "Thank you for your support! 💚"
|
"thank_you": "Thank you for your support! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "DEMO MODE",
|
"title": "DEMO MODE",
|
||||||
"warning": "Contents reset daily. Changes may be overwritten by other users."
|
"warning": "Contents reset daily. Changes may be overwritten by other users."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "Español",
|
"name": "Español",
|
||||||
"flag": "🇪🇸"
|
"flag": "🇪🇸"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "Tu Base de Conocimientos Autoalojada"
|
"tagline": "Tu Base de Conocimientos Autoalojada"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "Copiar al portapapeles",
|
"copy_to_clipboard": "Copiar al portapapeles",
|
||||||
"failed": "Error al {{action}}. Por favor, inténtalo de nuevo."
|
"failed": "Error al {{action}}. Por favor, inténtalo de nuevo."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Notificaciones",
|
"region_label": "Notificaciones",
|
||||||
"dismiss": "Cerrar"
|
"dismiss": "Cerrar"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "ARCHIVOS",
|
"title": "ARCHIVOS",
|
||||||
"favorites_title": "Favoritos",
|
"favorites_title": "Favoritos",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "Nueva Nota",
|
"new_note": "Nueva Nota",
|
||||||
"new_folder": "Nueva Carpeta",
|
"new_folder": "Nueva Carpeta",
|
||||||
"new_from_template": "Nueva desde Plantilla",
|
"new_from_template": "Nueva desde Plantilla",
|
||||||
|
"new_drawing": "Nuevo dibujo",
|
||||||
"rename_folder": "Renombrar carpeta",
|
"rename_folder": "Renombrar carpeta",
|
||||||
"delete_folder": "Eliminar carpeta",
|
"delete_folder": "Eliminar carpeta",
|
||||||
"search_placeholder": "Buscar notas...",
|
"search_placeholder": "Buscar notas...",
|
||||||
|
|
@ -72,7 +69,6 @@
|
||||||
"settings_title": "CONFIGURACIÓN",
|
"settings_title": "CONFIGURACIÓN",
|
||||||
"filtered_notes": "Notas Filtradas"
|
"filtered_notes": "Notas Filtradas"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Empieza a escribir en markdown...",
|
"placeholder": "Empieza a escribir en markdown...",
|
||||||
"drop_hint": "💡 Suelta aquí para insertar en la posición del cursor...",
|
"drop_hint": "💡 Suelta aquí para insertar en la posición del cursor...",
|
||||||
|
|
@ -85,7 +81,6 @@
|
||||||
"hours_ago": "hace {{count}}h",
|
"hours_ago": "hace {{count}}h",
|
||||||
"days_ago": "hace {{count}}d"
|
"days_ago": "hace {{count}}d"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "¿Eliminar \"{{name}}\"?",
|
"confirm_delete": "¿Eliminar \"{{name}}\"?",
|
||||||
"already_exists": "Ya existe una nota llamada \"{{name}}\" en esta ubicación.\nPor favor, elige un nombre diferente.",
|
"already_exists": "Ya existe una nota llamada \"{{name}}\" en esta ubicación.\nPor favor, elige un nombre diferente.",
|
||||||
|
|
@ -101,7 +96,6 @@
|
||||||
"no_content": "No hay contenido para exportar",
|
"no_content": "No hay contenido para exportar",
|
||||||
"open_first": "Por favor, abre una nota antes de subir imágenes."
|
"open_first": "Por favor, abre una nota antes de subir imágenes."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ ADVERTENCIA ⚠️\n\n¿Estás seguro de que quieres eliminar la carpeta \"{{name}}\"?\n\nEsto eliminará PERMANENTEMENTE:\n• Todas las notas dentro de esta carpeta\n• Todas las subcarpetas y su contenido\n\n¡Esta acción NO se puede deshacer!",
|
"confirm_delete": "⚠️ ADVERTENCIA ⚠️\n\n¿Estás seguro de que quieres eliminar la carpeta \"{{name}}\"?\n\nEsto eliminará PERMANENTEMENTE:\n• Todas las notas dentro de esta carpeta\n• Todas las subcarpetas y su contenido\n\n¡Esta acción NO se puede deshacer!",
|
||||||
"already_exists": "Ya existe una carpeta llamada \"{{name}}\" en esta ubicación.\nPor favor, elige un nombre diferente.",
|
"already_exists": "Ya existe una carpeta llamada \"{{name}}\" en esta ubicación.\nPor favor, elige un nombre diferente.",
|
||||||
|
|
@ -118,26 +112,24 @@
|
||||||
"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"
|
"empty": "vacía"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Deshacer (Ctrl+Z)",
|
"undo": "Deshacer (Ctrl+Z)",
|
||||||
"redo": "Rehacer (Ctrl+Y)",
|
"redo": "Rehacer (Ctrl+Y)",
|
||||||
"delete_note": "Eliminar nota",
|
"delete_note": "Eliminar nota",
|
||||||
"delete_image": "Eliminar imagen",
|
"delete_image": "Eliminar imagen",
|
||||||
|
"delete_drawing": "Eliminar dibujo",
|
||||||
"export_html": "Exportar como HTML",
|
"export_html": "Exportar como HTML",
|
||||||
"print_preview": "Vista previa de impresión",
|
"print_preview": "Vista previa de impresión",
|
||||||
"copy_link": "Copiar enlace al portapapeles",
|
"copy_link": "Copiar enlace al portapapeles",
|
||||||
"add_favorite": "Añadir a favoritos",
|
"add_favorite": "Añadir a favoritos",
|
||||||
"remove_favorite": "Quitar de favoritos"
|
"remove_favorite": "Quitar de favoritos"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Modo Zen",
|
"title": "Modo Zen",
|
||||||
"tooltip": "Modo Zen (Ctrl+Alt+Z)",
|
"tooltip": "Modo Zen (Ctrl+Alt+Z)",
|
||||||
"exit": "Salir del Modo Zen",
|
"exit": "Salir del Modo Zen",
|
||||||
"exit_hint": "Salir del Modo Zen (Esc)"
|
"exit_hint": "Salir del Modo Zen (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Compartir nota",
|
"button_tooltip": "Compartir nota",
|
||||||
"modal_title": "Compartir Nota",
|
"modal_title": "Compartir Nota",
|
||||||
|
|
@ -150,9 +142,10 @@
|
||||||
"error_creating": "Error al crear el enlace: {{error}}",
|
"error_creating": "Error al crear el enlace: {{error}}",
|
||||||
"error_revoking": "Error al revocar el enlace: {{error}}",
|
"error_revoking": "Error al revocar el enlace: {{error}}",
|
||||||
"show_qr": "Mostrar código QR",
|
"show_qr": "Mostrar código QR",
|
||||||
"hide_qr": "Ocultar código QR"
|
"hide_qr": "Ocultar código QR",
|
||||||
|
"panel_title": "Compartidas",
|
||||||
|
"no_shared": "No hay notas compartidas"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Escribe para buscar notas...",
|
"placeholder": "Escribe para buscar notas...",
|
||||||
"no_results": "Sin resultados",
|
"no_results": "Sin resultados",
|
||||||
|
|
@ -161,7 +154,6 @@
|
||||||
"open": "abrir",
|
"open": "abrir",
|
||||||
"close": "cerrar"
|
"close": "cerrar"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Etiquetas",
|
"title": "Etiquetas",
|
||||||
"no_tags": "No se encontraron etiquetas",
|
"no_tags": "No se encontraron etiquetas",
|
||||||
|
|
@ -170,13 +162,11 @@
|
||||||
"clear_all": "Limpiar filtros de etiquetas",
|
"clear_all": "Limpiar filtros de etiquetas",
|
||||||
"filter_by": "Filtrar por {{tag}} ({{count}} notas)"
|
"filter_by": "Filtrar por {{tag}} ({{count}} notas)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Esquema",
|
"title": "Esquema",
|
||||||
"no_headings": "No se encontraron encabezados",
|
"no_headings": "No se encontraron encabezados",
|
||||||
"hint": "Añade encabezados usando sintaxis #"
|
"hint": "Añade encabezados usando sintaxis #"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Backlinks",
|
"title": "Backlinks",
|
||||||
"no_backlinks": "No se encontraron backlinks",
|
"no_backlinks": "No se encontraron backlinks",
|
||||||
|
|
@ -184,21 +174,18 @@
|
||||||
"select_note": "Selecciona una nota para ver backlinks",
|
"select_note": "Selecciona una nota para ver backlinks",
|
||||||
"more_refs": "más"
|
"more_refs": "más"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "palabras",
|
"words": "palabras",
|
||||||
"reading_time": "~{{minutes}}m de lectura",
|
"reading_time": "~{{minutes}}m de lectura",
|
||||||
"links": "{{count}} enlaces",
|
"links": "{{count}} enlaces",
|
||||||
"click_details": "▼ Clic para detalles"
|
"click_details": "▼ Clic para detalles"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Vista de Grafo",
|
"title": "Vista de Grafo",
|
||||||
"empty": "No hay conexiones para mostrar",
|
"empty": "No hay conexiones para mostrar",
|
||||||
"markdown_links": "Enlaces Markdown",
|
"markdown_links": "Enlaces Markdown",
|
||||||
"click_hint": "Clic: seleccionar • Doble clic: abrir"
|
"click_hint": "Clic: seleccionar • Doble clic: abrir"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Plantillas",
|
"title": "Plantillas",
|
||||||
"select": "Selecciona una plantilla...",
|
"select": "Selecciona una plantilla...",
|
||||||
|
|
@ -212,11 +199,9 @@
|
||||||
"available_placeholders": "Marcadores disponibles",
|
"available_placeholders": "Marcadores disponibles",
|
||||||
"create_note": "Crear Nota"
|
"create_note": "Crear Nota"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "Error al exportar HTML: {{error}}"
|
"failed": "Error al exportar HTML: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Iniciar sesión",
|
"title": "Iniciar sesión",
|
||||||
"tagline": "Tu Base de Conocimientos Autoalojada",
|
"tagline": "Tu Base de Conocimientos Autoalojada",
|
||||||
|
|
@ -225,20 +210,31 @@
|
||||||
"footer": "🔒 Seguro y Autoalojado",
|
"footer": "🔒 Seguro y Autoalojado",
|
||||||
"error_incorrect_password": "Contraseña incorrecta. Por favor, inténtalo de nuevo."
|
"error_incorrect_password": "Contraseña incorrecta. Por favor, inténtalo de nuevo."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Lápiz — trazo libre",
|
||||||
|
"tool_line": "Línea recta",
|
||||||
|
"tool_rect": "Rectángulo",
|
||||||
|
"tool_ellipse": "Círculo",
|
||||||
|
"color": "Color",
|
||||||
|
"width": "Grosor del trazo",
|
||||||
|
"tool_eraser": "Borrador (pinta con el color de fondo)",
|
||||||
|
"tool_eyedropper": "Cuentagotas — tomar color del lienzo",
|
||||||
|
"clear": "Borrar",
|
||||||
|
"clear_hint": "Sustituir por imagen en blanco",
|
||||||
|
"clear_title": "¿Sustituir por lienzo en blanco?",
|
||||||
|
"clear_confirm": "El PNG guardado y todos los trazos de esta sesión se sustituirán por una imagen en blanco. No se puede deshacer."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "¿Eliminar \"{{name}}\"?",
|
"confirm_delete": "¿Eliminar \"{{name}}\"?",
|
||||||
"upload_failed": "Error al subir archivo",
|
"upload_failed": "Error al subir archivo",
|
||||||
"no_valid_files": "No se encontraron archivos válidos. Soporta: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "No se encontraron archivos válidos. Soporta: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Error al mover la nota.",
|
"failed_note": "Error al mover la nota.",
|
||||||
"failed_folder": "Error al mover la carpeta.",
|
"failed_folder": "Error al mover la carpeta.",
|
||||||
"failed_media": "Error al mover el archivo multimedia."
|
"failed_media": "Error al mover el archivo multimedia."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Anterior (Shift+F3)",
|
"previous": "Anterior (Shift+F3)",
|
||||||
"next": "Siguiente (F3)",
|
"next": "Siguiente (F3)",
|
||||||
|
|
@ -249,22 +245,18 @@
|
||||||
"no_results": "Ninguna nota contiene \"{{query}}\"",
|
"no_results": "Ninguna nota contiene \"{{query}}\"",
|
||||||
"searching": "Buscando \"{{query}}\"..."
|
"searching": "Buscando \"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Tema"
|
"title": "Tema"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Idioma"
|
"title": "Idioma"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Resaltado de Sintaxis del Editor",
|
"title": "Resaltado de Sintaxis del Editor",
|
||||||
"description": "Colorear sintaxis markdown en el editor",
|
"description": "Colorear sintaxis markdown en el editor",
|
||||||
"enable": "Activar resaltado de sintaxis",
|
"enable": "Activar resaltado de sintaxis",
|
||||||
"disable": "Desactivar resaltado de sintaxis"
|
"disable": "Desactivar resaltado de sintaxis"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Cuenta",
|
"account": "Cuenta",
|
||||||
"logout": "Cerrar sesión",
|
"logout": "Cerrar sesión",
|
||||||
|
|
@ -275,7 +267,6 @@
|
||||||
"tab_inserts_tab": "Tabulador inserta tabulación",
|
"tab_inserts_tab": "Tabulador inserta tabulación",
|
||||||
"tab_inserts_tab_desc": "Pulsa Tab para insertar un tabulador en lugar de cambiar el foco"
|
"tab_inserts_tab_desc": "Pulsa Tab para insertar un tabulador en lugar de cambiar el foco"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Inicio",
|
"title": "Inicio",
|
||||||
"welcome": "Bienvenido a NoteDiscovery",
|
"welcome": "Bienvenido a NoteDiscovery",
|
||||||
|
|
@ -288,7 +279,6 @@
|
||||||
"folder_singular": "carpeta",
|
"folder_singular": "carpeta",
|
||||||
"folder_plural": "carpetas"
|
"folder_plural": "carpetas"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Negrita",
|
"bold": "Negrita",
|
||||||
"italic": "Cursiva",
|
"italic": "Cursiva",
|
||||||
|
|
@ -304,23 +294,19 @@
|
||||||
"checkbox": "Casilla de verificación",
|
"checkbox": "Casilla de verificación",
|
||||||
"table": "Tabla"
|
"table": "Tabla"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "El nombre contiene caracteres no permitidos: {{chars}}",
|
"forbidden_chars": "El nombre contiene caracteres no permitidos: {{chars}}",
|
||||||
"reserved_name": "Este nombre está reservado por el sistema operativo.",
|
"reserved_name": "Este nombre está reservado por el sistema operativo.",
|
||||||
"invalid_dot": "El nombre no puede ser solo un punto.",
|
"invalid_dot": "El nombre no puede ser solo un punto.",
|
||||||
"trailing_dot_space": "El nombre no puede terminar con un punto o espacio."
|
"trailing_dot_space": "El nombre no puede terminar con un punto o espacio."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Apoya este proyecto",
|
"enjoying_demo": "Apoya este proyecto",
|
||||||
"deploy_own": "Despliega tu propia instancia",
|
"deploy_own": "Despliega tu propia instancia",
|
||||||
"thank_you": "¡Gracias por tu apoyo! 💚"
|
"thank_you": "¡Gracias por tu apoyo! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "MODO DEMO",
|
"title": "MODO DEMO",
|
||||||
"warning": "El contenido se reinicia diariamente. Los cambios pueden ser sobrescritos por otros usuarios."
|
"warning": "El contenido se reinicia diariamente. Los cambios pueden ser sobrescritos por otros usuarios."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "Français",
|
"name": "Français",
|
||||||
"flag": "🇫🇷"
|
"flag": "🇫🇷"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "Votre Base de Connaissances Auto-Hébergée"
|
"tagline": "Votre Base de Connaissances Auto-Hébergée"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Enregistrer",
|
"save": "Enregistrer",
|
||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "Copier dans le presse-papiers",
|
"copy_to_clipboard": "Copier dans le presse-papiers",
|
||||||
"failed": "Échec de {{action}}. Veuillez réessayer."
|
"failed": "Échec de {{action}}. Veuillez réessayer."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Notifications",
|
"region_label": "Notifications",
|
||||||
"dismiss": "Fermer"
|
"dismiss": "Fermer"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "FICHIERS",
|
"title": "FICHIERS",
|
||||||
"favorites_title": "Favoris",
|
"favorites_title": "Favoris",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "Nouvelle Note",
|
"new_note": "Nouvelle Note",
|
||||||
"new_folder": "Nouveau Dossier",
|
"new_folder": "Nouveau Dossier",
|
||||||
"new_from_template": "Nouveau depuis Modèle",
|
"new_from_template": "Nouveau depuis Modèle",
|
||||||
|
"new_drawing": "Nouveau dessin",
|
||||||
"rename_folder": "Renommer le dossier",
|
"rename_folder": "Renommer le dossier",
|
||||||
"delete_folder": "Supprimer le dossier",
|
"delete_folder": "Supprimer le dossier",
|
||||||
"search_placeholder": "Rechercher des notes...",
|
"search_placeholder": "Rechercher des notes...",
|
||||||
|
|
@ -72,7 +69,6 @@
|
||||||
"settings_title": "PARAMÈTRES",
|
"settings_title": "PARAMÈTRES",
|
||||||
"filtered_notes": "Notes Filtrées"
|
"filtered_notes": "Notes Filtrées"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Commencez à écrire en markdown...",
|
"placeholder": "Commencez à écrire en markdown...",
|
||||||
"drop_hint": "💡 Déposez ici pour insérer à la position du curseur...",
|
"drop_hint": "💡 Déposez ici pour insérer à la position du curseur...",
|
||||||
|
|
@ -85,7 +81,6 @@
|
||||||
"hours_ago": "il y a {{count}}h",
|
"hours_ago": "il y a {{count}}h",
|
||||||
"days_ago": "il y a {{count}}j"
|
"days_ago": "il y a {{count}}j"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "Supprimer \"{{name}}\" ?",
|
"confirm_delete": "Supprimer \"{{name}}\" ?",
|
||||||
"already_exists": "Une note nommée \"{{name}}\" existe déjà à cet emplacement.\nVeuillez choisir un autre nom.",
|
"already_exists": "Une note nommée \"{{name}}\" existe déjà à cet emplacement.\nVeuillez choisir un autre nom.",
|
||||||
|
|
@ -101,7 +96,6 @@
|
||||||
"no_content": "Aucun contenu à exporter",
|
"no_content": "Aucun contenu à exporter",
|
||||||
"open_first": "Veuillez d'abord ouvrir une note avant de télécharger des images."
|
"open_first": "Veuillez d'abord ouvrir une note avant de télécharger des images."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ ATTENTION ⚠️\n\nÊtes-vous sûr de vouloir supprimer le dossier \"{{name}}\" ?\n\nCeci supprimera DÉFINITIVEMENT :\n• Toutes les notes dans ce dossier\n• Tous les sous-dossiers et leur contenu\n\nCette action est IRRÉVERSIBLE !",
|
"confirm_delete": "⚠️ ATTENTION ⚠️\n\nÊtes-vous sûr de vouloir supprimer le dossier \"{{name}}\" ?\n\nCeci supprimera DÉFINITIVEMENT :\n• Toutes les notes dans ce dossier\n• Tous les sous-dossiers et leur contenu\n\nCette action est IRRÉVERSIBLE !",
|
||||||
"already_exists": "Un dossier nommé \"{{name}}\" existe déjà à cet emplacement.\nVeuillez choisir un autre nom.",
|
"already_exists": "Un dossier nommé \"{{name}}\" existe déjà à cet emplacement.\nVeuillez choisir un autre nom.",
|
||||||
|
|
@ -118,26 +112,24 @@
|
||||||
"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"
|
"empty": "vide"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Annuler (Ctrl+Z)",
|
"undo": "Annuler (Ctrl+Z)",
|
||||||
"redo": "Rétablir (Ctrl+Y)",
|
"redo": "Rétablir (Ctrl+Y)",
|
||||||
"delete_note": "Supprimer la note",
|
"delete_note": "Supprimer la note",
|
||||||
"delete_image": "Supprimer l'image",
|
"delete_image": "Supprimer l'image",
|
||||||
|
"delete_drawing": "Supprimer le dessin",
|
||||||
"export_html": "Exporter en HTML",
|
"export_html": "Exporter en HTML",
|
||||||
"print_preview": "Aperçu avant impression",
|
"print_preview": "Aperçu avant impression",
|
||||||
"copy_link": "Copier le lien dans le presse-papiers",
|
"copy_link": "Copier le lien dans le presse-papiers",
|
||||||
"add_favorite": "Ajouter aux favoris",
|
"add_favorite": "Ajouter aux favoris",
|
||||||
"remove_favorite": "Retirer des favoris"
|
"remove_favorite": "Retirer des favoris"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Mode Zen",
|
"title": "Mode Zen",
|
||||||
"tooltip": "Mode Zen (Ctrl+Alt+Z)",
|
"tooltip": "Mode Zen (Ctrl+Alt+Z)",
|
||||||
"exit": "Quitter le Mode Zen",
|
"exit": "Quitter le Mode Zen",
|
||||||
"exit_hint": "Quitter le Mode Zen (Échap)"
|
"exit_hint": "Quitter le Mode Zen (Échap)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Partager la note",
|
"button_tooltip": "Partager la note",
|
||||||
"modal_title": "Partager la Note",
|
"modal_title": "Partager la Note",
|
||||||
|
|
@ -150,9 +142,10 @@
|
||||||
"error_creating": "Échec de la création du lien : {{error}}",
|
"error_creating": "Échec de la création du lien : {{error}}",
|
||||||
"error_revoking": "Échec de la révocation du lien : {{error}}",
|
"error_revoking": "Échec de la révocation du lien : {{error}}",
|
||||||
"show_qr": "Afficher le code QR",
|
"show_qr": "Afficher le code QR",
|
||||||
"hide_qr": "Masquer le code QR"
|
"hide_qr": "Masquer le code QR",
|
||||||
|
"panel_title": "Partagées",
|
||||||
|
"no_shared": "Aucune note partagée"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Rechercher des notes...",
|
"placeholder": "Rechercher des notes...",
|
||||||
"no_results": "Aucun résultat",
|
"no_results": "Aucun résultat",
|
||||||
|
|
@ -161,7 +154,6 @@
|
||||||
"open": "ouvrir",
|
"open": "ouvrir",
|
||||||
"close": "fermer"
|
"close": "fermer"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Étiquettes",
|
"title": "Étiquettes",
|
||||||
"no_tags": "Aucune étiquette trouvée",
|
"no_tags": "Aucune étiquette trouvée",
|
||||||
|
|
@ -170,13 +162,11 @@
|
||||||
"clear_all": "Effacer les filtres d'étiquettes",
|
"clear_all": "Effacer les filtres d'étiquettes",
|
||||||
"filter_by": "Filtrer par {{tag}} ({{count}} notes)"
|
"filter_by": "Filtrer par {{tag}} ({{count}} notes)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Plan",
|
"title": "Plan",
|
||||||
"no_headings": "Aucun titre trouvé",
|
"no_headings": "Aucun titre trouvé",
|
||||||
"hint": "Ajoutez des titres avec la syntaxe #"
|
"hint": "Ajoutez des titres avec la syntaxe #"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Rétroliens",
|
"title": "Rétroliens",
|
||||||
"no_backlinks": "Aucun rétrolien trouvé",
|
"no_backlinks": "Aucun rétrolien trouvé",
|
||||||
|
|
@ -184,21 +174,18 @@
|
||||||
"select_note": "Sélectionnez une note pour voir les rétroliens",
|
"select_note": "Sélectionnez une note pour voir les rétroliens",
|
||||||
"more_refs": "de plus"
|
"more_refs": "de plus"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "mots",
|
"words": "mots",
|
||||||
"reading_time": "~{{minutes}}m de lecture",
|
"reading_time": "~{{minutes}}m de lecture",
|
||||||
"links": "{{count}} liens",
|
"links": "{{count}} liens",
|
||||||
"click_details": "▼ Cliquez pour les détails"
|
"click_details": "▼ Cliquez pour les détails"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Vue Graphique",
|
"title": "Vue Graphique",
|
||||||
"empty": "Aucune connexion à afficher",
|
"empty": "Aucune connexion à afficher",
|
||||||
"markdown_links": "Liens Markdown",
|
"markdown_links": "Liens Markdown",
|
||||||
"click_hint": "Clic : sélectionner • Double-clic : ouvrir"
|
"click_hint": "Clic : sélectionner • Double-clic : ouvrir"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Modèles",
|
"title": "Modèles",
|
||||||
"select": "Sélectionner un modèle...",
|
"select": "Sélectionner un modèle...",
|
||||||
|
|
@ -212,11 +199,9 @@
|
||||||
"available_placeholders": "Variables disponibles",
|
"available_placeholders": "Variables disponibles",
|
||||||
"create_note": "Créer la Note"
|
"create_note": "Créer la Note"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "Échec de l'export HTML : {{error}}"
|
"failed": "Échec de l'export HTML : {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Connexion",
|
"title": "Connexion",
|
||||||
"tagline": "Votre Base de Connaissances Auto-Hébergée",
|
"tagline": "Votre Base de Connaissances Auto-Hébergée",
|
||||||
|
|
@ -225,20 +210,31 @@
|
||||||
"footer": "🔒 Sécurisé et Auto-Hébergé",
|
"footer": "🔒 Sécurisé et Auto-Hébergé",
|
||||||
"error_incorrect_password": "Mot de passe incorrect. Veuillez réessayer."
|
"error_incorrect_password": "Mot de passe incorrect. Veuillez réessayer."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Crayon — main levée",
|
||||||
|
"tool_line": "Ligne droite",
|
||||||
|
"tool_rect": "Rectangle",
|
||||||
|
"tool_ellipse": "Cercle",
|
||||||
|
"color": "Couleur",
|
||||||
|
"width": "Épaisseur du trait",
|
||||||
|
"tool_eraser": "Gomme (peint avec la couleur de fond)",
|
||||||
|
"tool_eyedropper": "Pipette — choisir une couleur sur le canevas",
|
||||||
|
"clear": "Effacer",
|
||||||
|
"clear_hint": "Remplacer par une image vide",
|
||||||
|
"clear_title": "Remplacer par un canevas vide ?",
|
||||||
|
"clear_confirm": "Le PNG enregistré et tous les traits de cette session seront remplacés par une image blanche vide. Cette action est irréversible."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "Supprimer \"{{name}}\" ?",
|
"confirm_delete": "Supprimer \"{{name}}\" ?",
|
||||||
"upload_failed": "Échec du téléchargement du fichier",
|
"upload_failed": "Échec du téléchargement du fichier",
|
||||||
"no_valid_files": "Aucun fichier valide trouvé. Supporté : JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "Aucun fichier valide trouvé. Supporté : JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Échec du déplacement de la note.",
|
"failed_note": "Échec du déplacement de la note.",
|
||||||
"failed_folder": "Échec du déplacement du dossier.",
|
"failed_folder": "Échec du déplacement du dossier.",
|
||||||
"failed_media": "Échec du déplacement du fichier multimédia."
|
"failed_media": "Échec du déplacement du fichier multimédia."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Précédent (Maj+F3)",
|
"previous": "Précédent (Maj+F3)",
|
||||||
"next": "Suivant (F3)",
|
"next": "Suivant (F3)",
|
||||||
|
|
@ -249,22 +245,18 @@
|
||||||
"no_results": "Aucune note ne contient \"{{query}}\"",
|
"no_results": "Aucune note ne contient \"{{query}}\"",
|
||||||
"searching": "Recherche de \"{{query}}\"..."
|
"searching": "Recherche de \"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Thème"
|
"title": "Thème"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Langue"
|
"title": "Langue"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Coloration Syntaxique de l'Éditeur",
|
"title": "Coloration Syntaxique de l'Éditeur",
|
||||||
"description": "Coloriser la syntaxe markdown dans l'éditeur",
|
"description": "Coloriser la syntaxe markdown dans l'éditeur",
|
||||||
"enable": "Activer la coloration syntaxique",
|
"enable": "Activer la coloration syntaxique",
|
||||||
"disable": "Désactiver la coloration syntaxique"
|
"disable": "Désactiver la coloration syntaxique"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Compte",
|
"account": "Compte",
|
||||||
"logout": "Déconnexion",
|
"logout": "Déconnexion",
|
||||||
|
|
@ -275,7 +267,6 @@
|
||||||
"tab_inserts_tab": "Tab insère une tabulation",
|
"tab_inserts_tab": "Tab insère une tabulation",
|
||||||
"tab_inserts_tab_desc": "Appuyez sur Tab pour insérer une tabulation au lieu de changer le focus"
|
"tab_inserts_tab_desc": "Appuyez sur Tab pour insérer une tabulation au lieu de changer le focus"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Accueil",
|
"title": "Accueil",
|
||||||
"welcome": "Bienvenue sur NoteDiscovery",
|
"welcome": "Bienvenue sur NoteDiscovery",
|
||||||
|
|
@ -288,7 +279,6 @@
|
||||||
"folder_singular": "dossier",
|
"folder_singular": "dossier",
|
||||||
"folder_plural": "dossiers"
|
"folder_plural": "dossiers"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Gras",
|
"bold": "Gras",
|
||||||
"italic": "Italique",
|
"italic": "Italique",
|
||||||
|
|
@ -304,23 +294,19 @@
|
||||||
"checkbox": "Case à cocher",
|
"checkbox": "Case à cocher",
|
||||||
"table": "Tableau"
|
"table": "Tableau"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "Le nom contient des caractères interdits : {{chars}}",
|
"forbidden_chars": "Le nom contient des caractères interdits : {{chars}}",
|
||||||
"reserved_name": "Ce nom est réservé par le système d'exploitation.",
|
"reserved_name": "Ce nom est réservé par le système d'exploitation.",
|
||||||
"invalid_dot": "Le nom ne peut pas être juste un point.",
|
"invalid_dot": "Le nom ne peut pas être juste un point.",
|
||||||
"trailing_dot_space": "Le nom ne peut pas se terminer par un point ou un espace."
|
"trailing_dot_space": "Le nom ne peut pas se terminer par un point ou un espace."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Soutenez ce projet",
|
"enjoying_demo": "Soutenez ce projet",
|
||||||
"deploy_own": "Déployez votre propre instance",
|
"deploy_own": "Déployez votre propre instance",
|
||||||
"thank_you": "Merci pour votre soutien ! 💚"
|
"thank_you": "Merci pour votre soutien ! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "MODE DÉMO",
|
"title": "MODE DÉMO",
|
||||||
"warning": "Le contenu est réinitialisé quotidiennement. Les modifications peuvent être écrasées par d'autres utilisateurs."
|
"warning": "Le contenu est réinitialisé quotidiennement. Les modifications peuvent être écrasées par d'autres utilisateurs."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "Magyar",
|
"name": "Magyar",
|
||||||
"flag": "🇭🇺"
|
"flag": "🇭🇺"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "A Saját, Önálló Tudásbázisod"
|
"tagline": "A Saját, Önálló Tudásbázisod"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Mentés",
|
"save": "Mentés",
|
||||||
"cancel": "Mégse",
|
"cancel": "Mégse",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "Másolás",
|
"copy_to_clipboard": "Másolás",
|
||||||
"failed": "Hiba a(z) {{action}} során. Kérlek, próbáld újra."
|
"failed": "Hiba a(z) {{action}} során. Kérlek, próbáld újra."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Értesítések",
|
"region_label": "Értesítések",
|
||||||
"dismiss": "Bezárás"
|
"dismiss": "Bezárás"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "FÁJLOK",
|
"title": "FÁJLOK",
|
||||||
"favorites_title": "Kedvencek",
|
"favorites_title": "Kedvencek",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "Új Jegyzet",
|
"new_note": "Új Jegyzet",
|
||||||
"new_folder": "Új Mappa",
|
"new_folder": "Új Mappa",
|
||||||
"new_from_template": "Új Sablonból",
|
"new_from_template": "Új Sablonból",
|
||||||
|
"new_drawing": "Új rajz",
|
||||||
"rename_folder": "Mappa átnevezése",
|
"rename_folder": "Mappa átnevezése",
|
||||||
"delete_folder": "Mappa törlése",
|
"delete_folder": "Mappa törlése",
|
||||||
"search_placeholder": "Jegyzetek keresése...",
|
"search_placeholder": "Jegyzetek keresése...",
|
||||||
|
|
@ -72,7 +69,6 @@
|
||||||
"settings_title": "BEÁLLÍTÁSOK",
|
"settings_title": "BEÁLLÍTÁSOK",
|
||||||
"filtered_notes": "Szűrt jegyzetek"
|
"filtered_notes": "Szűrt jegyzetek"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Kezdj el írni markdown-ban...",
|
"placeholder": "Kezdj el írni markdown-ban...",
|
||||||
"drop_hint": "💡 Beszúrás ide...",
|
"drop_hint": "💡 Beszúrás ide...",
|
||||||
|
|
@ -85,7 +81,6 @@
|
||||||
"hours_ago": "{{count}} órája",
|
"hours_ago": "{{count}} órája",
|
||||||
"days_ago": "{{count}} napja"
|
"days_ago": "{{count}} napja"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "Biztos törlöd a következőt: \"{{name}}\"?",
|
"confirm_delete": "Biztos törlöd a következőt: \"{{name}}\"?",
|
||||||
"already_exists": "A(z) \"{{name}}\" nevű jegyzet már létezik.\nKérlek válassz egy másik nevet.",
|
"already_exists": "A(z) \"{{name}}\" nevű jegyzet már létezik.\nKérlek válassz egy másik nevet.",
|
||||||
|
|
@ -101,7 +96,6 @@
|
||||||
"no_content": "Nincs exportálható jegyzettartalom",
|
"no_content": "Nincs exportálható jegyzettartalom",
|
||||||
"open_first": "Kérlek előbb nyiss meg egy jegyzetet, mielőtt képeket töltenél fel."
|
"open_first": "Kérlek előbb nyiss meg egy jegyzetet, mielőtt képeket töltenél fel."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ FIGYELMEZTETÉS ⚠️\n\nBiztosan törölni szeretnéd a(z) \"{{name}}\" mappát?\n\nEz VÉGLEGESEN törli a következőket:\n• A mappában található összes jegyzet\n• Az összes almappa és azok tartalma \n\nEz a művelet NEM vonható vissza!",
|
"confirm_delete": "⚠️ FIGYELMEZTETÉS ⚠️\n\nBiztosan törölni szeretnéd a(z) \"{{name}}\" mappát?\n\nEz VÉGLEGESEN törli a következőket:\n• A mappában található összes jegyzet\n• Az összes almappa és azok tartalma \n\nEz a művelet NEM vonható vissza!",
|
||||||
"already_exists": "A(z) \"{{name}}\" nevű mappa már létezik.\nKérlek válassz egy másik nevet.",
|
"already_exists": "A(z) \"{{name}}\" nevű mappa már létezik.\nKérlek válassz egy másik nevet.",
|
||||||
|
|
@ -118,26 +112,24 @@
|
||||||
"cannot_move_into_self": "A mappa nem mozgatható saját magába vagy bármelyik almappájába.",
|
"cannot_move_into_self": "A mappa nem mozgatható saját magába vagy bármelyik almappájába.",
|
||||||
"empty": "üres"
|
"empty": "üres"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Visszavon (Ctrl+Z)",
|
"undo": "Visszavon (Ctrl+Z)",
|
||||||
"redo": "Helyrehoz (Ctrl+Y)",
|
"redo": "Helyrehoz (Ctrl+Y)",
|
||||||
"delete_note": "Jegyzet törlése",
|
"delete_note": "Jegyzet törlése",
|
||||||
"delete_image": "Kép törlése",
|
"delete_image": "Kép törlése",
|
||||||
|
"delete_drawing": "Rajz törlése",
|
||||||
"export_html": "Exportálás HTML-ként",
|
"export_html": "Exportálás HTML-ként",
|
||||||
"print_preview": "Nyomtatási előnézet",
|
"print_preview": "Nyomtatási előnézet",
|
||||||
"copy_link": "Link másolása",
|
"copy_link": "Link másolása",
|
||||||
"add_favorite": "Hozzáadás a kedvencekhez",
|
"add_favorite": "Hozzáadás a kedvencekhez",
|
||||||
"remove_favorite": "Eltávolítás a kedvencek közül"
|
"remove_favorite": "Eltávolítás a kedvencek közül"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Zen Mód",
|
"title": "Zen Mód",
|
||||||
"tooltip": "Zen Mód (Ctrl+Alt+Z)",
|
"tooltip": "Zen Mód (Ctrl+Alt+Z)",
|
||||||
"exit": "Kilépés a Zen Módból",
|
"exit": "Kilépés a Zen Módból",
|
||||||
"exit_hint": "Kilépés a Zen Módból (Esc)"
|
"exit_hint": "Kilépés a Zen Módból (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Jegyzet megosztása",
|
"button_tooltip": "Jegyzet megosztása",
|
||||||
"modal_title": "Jegyzet Megosztása",
|
"modal_title": "Jegyzet Megosztása",
|
||||||
|
|
@ -150,9 +142,10 @@
|
||||||
"error_creating": "Hiba történt a megosztási link létrehozásánál: {{error}}",
|
"error_creating": "Hiba történt a megosztási link létrehozásánál: {{error}}",
|
||||||
"error_revoking": "Nemsikerült visszavonni a megosztási linket: {{error}}",
|
"error_revoking": "Nemsikerült visszavonni a megosztási linket: {{error}}",
|
||||||
"show_qr": "QR-Kód Megjelenítése",
|
"show_qr": "QR-Kód Megjelenítése",
|
||||||
"hide_qr": "QR-Kód Elrejtése"
|
"hide_qr": "QR-Kód Elrejtése",
|
||||||
|
"panel_title": "Megosztott",
|
||||||
|
"no_shared": "Nincs megosztott jegyzet"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Írj a jegyzetek kereséséhez...",
|
"placeholder": "Írj a jegyzetek kereséséhez...",
|
||||||
"no_results": "Nincs találat",
|
"no_results": "Nincs találat",
|
||||||
|
|
@ -161,7 +154,6 @@
|
||||||
"open": "nyit",
|
"open": "nyit",
|
||||||
"close": "csuk"
|
"close": "csuk"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Címkék",
|
"title": "Címkék",
|
||||||
"no_tags": "Nem találhatók címkék",
|
"no_tags": "Nem találhatók címkék",
|
||||||
|
|
@ -170,13 +162,11 @@
|
||||||
"clear_all": "Szűrők törlése",
|
"clear_all": "Szűrők törlése",
|
||||||
"filter_by": "Szűrés {{tag}} ({{count}} jegyzetek)"
|
"filter_by": "Szűrés {{tag}} ({{count}} jegyzetek)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Fejlécek",
|
"title": "Fejlécek",
|
||||||
"no_headings": "Nincsenek fejlécek",
|
"no_headings": "Nincsenek fejlécek",
|
||||||
"hint": "Fejléc hozzáadása a következővel: # "
|
"hint": "Fejléc hozzáadása a következővel: # "
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Bejövő linkek",
|
"title": "Bejövő linkek",
|
||||||
"no_backlinks": "Nincsenek bejövő linkek",
|
"no_backlinks": "Nincsenek bejövő linkek",
|
||||||
|
|
@ -184,21 +174,18 @@
|
||||||
"select_note": "Válassz ki egy jegyzetet a bejövő linkek megtekintéséhez",
|
"select_note": "Válassz ki egy jegyzetet a bejövő linkek megtekintéséhez",
|
||||||
"more_refs": "továbbiak"
|
"more_refs": "továbbiak"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "szavak",
|
"words": "szavak",
|
||||||
"reading_time": "~{{minutes}} percnyi olvasás",
|
"reading_time": "~{{minutes}} percnyi olvasás",
|
||||||
"links": "{{count}} hivatkozások",
|
"links": "{{count}} hivatkozások",
|
||||||
"click_details": "▼ Kattints a részletekért"
|
"click_details": "▼ Kattints a részletekért"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Grafikon nézet",
|
"title": "Grafikon nézet",
|
||||||
"empty": "Nincsenek megjeleníthető kapcsolatok",
|
"empty": "Nincsenek megjeleníthető kapcsolatok",
|
||||||
"markdown_links": "Markdown hivatkozások",
|
"markdown_links": "Markdown hivatkozások",
|
||||||
"click_hint": "Kattints: kiválasztás • Dupla kattintás: megnyitás"
|
"click_hint": "Kattints: kiválasztás • Dupla kattintás: megnyitás"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Sablonok",
|
"title": "Sablonok",
|
||||||
"select": "Válassz egy sablont...",
|
"select": "Válassz egy sablont...",
|
||||||
|
|
@ -212,11 +199,9 @@
|
||||||
"available_placeholders": "Elérhető helyőrzők",
|
"available_placeholders": "Elérhető helyőrzők",
|
||||||
"create_note": "Jegyzet létrehozása"
|
"create_note": "Jegyzet létrehozása"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "Hiba a HTML exportálása során: {{error}}"
|
"failed": "Hiba a HTML exportálása során: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Bejelentkezés",
|
"title": "Bejelentkezés",
|
||||||
"tagline": "A Saját, Önálló Tudásbázisod",
|
"tagline": "A Saját, Önálló Tudásbázisod",
|
||||||
|
|
@ -225,20 +210,31 @@
|
||||||
"footer": "🔒 Biztonságos & Saját Kiszolgálású",
|
"footer": "🔒 Biztonságos & Saját Kiszolgálású",
|
||||||
"error_incorrect_password": "Helytelen jelszó. Próbáld újra."
|
"error_incorrect_password": "Helytelen jelszó. Próbáld újra."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Ceruza — szabadkézi",
|
||||||
|
"tool_line": "Egyenes vonal",
|
||||||
|
"tool_rect": "Téglalap",
|
||||||
|
"tool_ellipse": "Kör",
|
||||||
|
"color": "Szín",
|
||||||
|
"width": "Vonalvastagság",
|
||||||
|
"tool_eraser": "Radír (háttérszínnel fest)",
|
||||||
|
"tool_eyedropper": "Pipetta — szín mintavétele a vászonról",
|
||||||
|
"clear": "Törlés",
|
||||||
|
"clear_hint": "Üres képre cserélés",
|
||||||
|
"clear_title": "Üres vászonra cserélés?",
|
||||||
|
"clear_confirm": "A mentett PNG és az ebben a munkamenetben rajzolt vonalak fehér üres képre cserélődnek. Ez nem vonható vissza."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "Biztos törlöd a következőt: \"{{name}}\"?",
|
"confirm_delete": "Biztos törlöd a következőt: \"{{name}}\"?",
|
||||||
"upload_failed": "Hiba a fájl feltöltése során",
|
"upload_failed": "Hiba a fájl feltöltése során",
|
||||||
"no_valid_files": "Nem található érvényes fájl. Támogatott formátumok: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "Nem található érvényes fájl. Támogatott formátumok: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Hiba a jegyzet mozgatásánál.",
|
"failed_note": "Hiba a jegyzet mozgatásánál.",
|
||||||
"failed_folder": "Hiba a mappa mozgatásánál.",
|
"failed_folder": "Hiba a mappa mozgatásánál.",
|
||||||
"failed_media": "Hiba a médiafájl mozgatásánál."
|
"failed_media": "Hiba a médiafájl mozgatásánál."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Előző (Shift+F3)",
|
"previous": "Előző (Shift+F3)",
|
||||||
"next": "Következő (F3)",
|
"next": "Következő (F3)",
|
||||||
|
|
@ -249,22 +245,18 @@
|
||||||
"no_results": "Nincs jegyzet amely tartalmazza a következőt: \"{{query}}\"",
|
"no_results": "Nincs jegyzet amely tartalmazza a következőt: \"{{query}}\"",
|
||||||
"searching": "\"{{query}}\" keresése..."
|
"searching": "\"{{query}}\" keresése..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Téma"
|
"title": "Téma"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Nyelv"
|
"title": "Nyelv"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Szintaxisok kiemelése",
|
"title": "Szintaxisok kiemelése",
|
||||||
"description": "Markdown szintaxisok színezése",
|
"description": "Markdown szintaxisok színezése",
|
||||||
"enable": "Szintaxiskiemelések engedélyezése",
|
"enable": "Szintaxiskiemelések engedélyezése",
|
||||||
"disable": "Szintaxiskiemelések letiltása"
|
"disable": "Szintaxiskiemelések letiltása"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Fiók",
|
"account": "Fiók",
|
||||||
"logout": "Kijelentkezés",
|
"logout": "Kijelentkezés",
|
||||||
|
|
@ -275,7 +267,6 @@
|
||||||
"tab_inserts_tab": "Tab billentyű több helyet hagy a szövegben",
|
"tab_inserts_tab": "Tab billentyű több helyet hagy a szövegben",
|
||||||
"tab_inserts_tab_desc": "Nyomd meg a Tab-ot, hogy több helyet hagyj a szövegben a fókuszváltás helyett"
|
"tab_inserts_tab_desc": "Nyomd meg a Tab-ot, hogy több helyet hagyj a szövegben a fókuszváltás helyett"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Főoldal",
|
"title": "Főoldal",
|
||||||
"welcome": "Üdvözöllek a NoteDiscovery-ben",
|
"welcome": "Üdvözöllek a NoteDiscovery-ben",
|
||||||
|
|
@ -288,7 +279,6 @@
|
||||||
"folder_singular": "mappa",
|
"folder_singular": "mappa",
|
||||||
"folder_plural": "mappa"
|
"folder_plural": "mappa"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Félkövér",
|
"bold": "Félkövér",
|
||||||
"italic": "Dőlt",
|
"italic": "Dőlt",
|
||||||
|
|
@ -304,20 +294,17 @@
|
||||||
"checkbox": "Jelölőnégyzet",
|
"checkbox": "Jelölőnégyzet",
|
||||||
"table": "Táblázat"
|
"table": "Táblázat"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "A név tiltott karaktereket tartalmaz: {{chars}}",
|
"forbidden_chars": "A név tiltott karaktereket tartalmaz: {{chars}}",
|
||||||
"reserved_name": "Ezt a nevet az operációs rendszer tartja fenn.",
|
"reserved_name": "Ezt a nevet az operációs rendszer tartja fenn.",
|
||||||
"invalid_dot": "A név nem állhat csak egy pontból.",
|
"invalid_dot": "A név nem állhat csak egy pontból.",
|
||||||
"trailing_dot_space": "A név nem végződhet ponttal vagy szóközzel."
|
"trailing_dot_space": "A név nem végződhet ponttal vagy szóközzel."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Támogasd ezt a projektet",
|
"enjoying_demo": "Támogasd ezt a projektet",
|
||||||
"deploy_own": "Saját példány telepítése",
|
"deploy_own": "Saját példány telepítése",
|
||||||
"thank_you": "Köszönjük a támogatásodat! 💚"
|
"thank_you": "Köszönjük a támogatásodat! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "DEMÓ MÓD",
|
"title": "DEMÓ MÓD",
|
||||||
"warning": "A tartalom naponta visszaáll. A módosításokat más felhasználók felülírhatják."
|
"warning": "A tartalom naponta visszaáll. A módosításokat más felhasználók felülírhatják."
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "Italiano",
|
"name": "Italiano",
|
||||||
"flag": "🇮🇹"
|
"flag": "🇮🇹"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "La tua base di conoscenza personale"
|
"tagline": "La tua base di conoscenza personale"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Salva",
|
"save": "Salva",
|
||||||
"cancel": "Annulla",
|
"cancel": "Annulla",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "Copia negli appunti",
|
"copy_to_clipboard": "Copia negli appunti",
|
||||||
"failed": "Impossibile {{action}}. Riprova."
|
"failed": "Impossibile {{action}}. Riprova."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Notifiche",
|
"region_label": "Notifiche",
|
||||||
"dismiss": "Chiudi"
|
"dismiss": "Chiudi"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "FILE",
|
"title": "FILE",
|
||||||
"favorites_title": "Preferiti",
|
"favorites_title": "Preferiti",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "Nuova Nota",
|
"new_note": "Nuova Nota",
|
||||||
"new_folder": "Nuova Cartella",
|
"new_folder": "Nuova Cartella",
|
||||||
"new_from_template": "Nuovo da Modello",
|
"new_from_template": "Nuovo da Modello",
|
||||||
|
"new_drawing": "Nuovo disegno",
|
||||||
"rename_folder": "Rinomina cartella",
|
"rename_folder": "Rinomina cartella",
|
||||||
"delete_folder": "Elimina cartella",
|
"delete_folder": "Elimina cartella",
|
||||||
"search_placeholder": "Cerca note...",
|
"search_placeholder": "Cerca note...",
|
||||||
|
|
@ -71,7 +68,6 @@
|
||||||
"settings_title": "IMPOSTAZIONI",
|
"settings_title": "IMPOSTAZIONI",
|
||||||
"filtered_notes": "Note Filtrate"
|
"filtered_notes": "Note Filtrate"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Inizia a scrivere in markdown...",
|
"placeholder": "Inizia a scrivere in markdown...",
|
||||||
"drop_hint": "💡 Rilascia qui per inserire alla posizione del cursore...",
|
"drop_hint": "💡 Rilascia qui per inserire alla posizione del cursore...",
|
||||||
|
|
@ -84,7 +80,6 @@
|
||||||
"hours_ago": "{{count}}h fa",
|
"hours_ago": "{{count}}h fa",
|
||||||
"days_ago": "{{count}}g fa"
|
"days_ago": "{{count}}g fa"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "Eliminare \"{{name}}\"?",
|
"confirm_delete": "Eliminare \"{{name}}\"?",
|
||||||
"already_exists": "Una nota chiamata \"{{name}}\" esiste già in questa posizione.\nScegli un nome diverso.",
|
"already_exists": "Una nota chiamata \"{{name}}\" esiste già in questa posizione.\nScegli un nome diverso.",
|
||||||
|
|
@ -100,7 +95,6 @@
|
||||||
"no_content": "Nessun contenuto da esportare",
|
"no_content": "Nessun contenuto da esportare",
|
||||||
"open_first": "Apri prima una nota per caricare immagini."
|
"open_first": "Apri prima una nota per caricare immagini."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ ATTENZIONE ⚠️\n\nSei sicuro di voler eliminare la cartella \"{{name}}\"?\n\nQuesto eliminerà PERMANENTEMENTE:\n• Tutte le note in questa cartella\n• Tutte le sottocartelle e i loro contenuti\n\nQuesta azione NON PUÒ essere annullata!",
|
"confirm_delete": "⚠️ ATTENZIONE ⚠️\n\nSei sicuro di voler eliminare la cartella \"{{name}}\"?\n\nQuesto eliminerà PERMANENTEMENTE:\n• Tutte le note in questa cartella\n• Tutte le sottocartelle e i loro contenuti\n\nQuesta azione NON PUÒ essere annullata!",
|
||||||
"already_exists": "Una cartella chiamata \"{{name}}\" esiste già in questa posizione.\nScegli un nome diverso.",
|
"already_exists": "Una cartella chiamata \"{{name}}\" esiste già in questa posizione.\nScegli un nome diverso.",
|
||||||
|
|
@ -117,26 +111,24 @@
|
||||||
"cannot_move_into_self": "Impossibile spostare la cartella in se stessa o in una sottocartella.",
|
"cannot_move_into_self": "Impossibile spostare la cartella in se stessa o in una sottocartella.",
|
||||||
"empty": "vuota"
|
"empty": "vuota"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Annulla (Ctrl+Z)",
|
"undo": "Annulla (Ctrl+Z)",
|
||||||
"redo": "Ripeti (Ctrl+Y)",
|
"redo": "Ripeti (Ctrl+Y)",
|
||||||
"delete_note": "Elimina nota",
|
"delete_note": "Elimina nota",
|
||||||
"delete_image": "Elimina immagine",
|
"delete_image": "Elimina immagine",
|
||||||
|
"delete_drawing": "Elimina disegno",
|
||||||
"export_html": "Esporta come HTML",
|
"export_html": "Esporta come HTML",
|
||||||
"print_preview": "Anteprima di stampa",
|
"print_preview": "Anteprima di stampa",
|
||||||
"copy_link": "Copia link negli appunti",
|
"copy_link": "Copia link negli appunti",
|
||||||
"add_favorite": "Aggiungi ai preferiti",
|
"add_favorite": "Aggiungi ai preferiti",
|
||||||
"remove_favorite": "Rimuovi dai preferiti"
|
"remove_favorite": "Rimuovi dai preferiti"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Modalità Zen",
|
"title": "Modalità Zen",
|
||||||
"tooltip": "Modalità Zen (Ctrl+Alt+Z)",
|
"tooltip": "Modalità Zen (Ctrl+Alt+Z)",
|
||||||
"exit": "Esci dalla Modalità Zen",
|
"exit": "Esci dalla Modalità Zen",
|
||||||
"exit_hint": "Esci dalla Modalità Zen (Esc)"
|
"exit_hint": "Esci dalla Modalità Zen (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Condividi nota",
|
"button_tooltip": "Condividi nota",
|
||||||
"modal_title": "Condividi Nota",
|
"modal_title": "Condividi Nota",
|
||||||
|
|
@ -149,9 +141,10 @@
|
||||||
"error_creating": "Impossibile creare il link: {{error}}",
|
"error_creating": "Impossibile creare il link: {{error}}",
|
||||||
"error_revoking": "Impossibile revocare il link: {{error}}",
|
"error_revoking": "Impossibile revocare il link: {{error}}",
|
||||||
"show_qr": "Mostra codice QR",
|
"show_qr": "Mostra codice QR",
|
||||||
"hide_qr": "Nascondi codice QR"
|
"hide_qr": "Nascondi codice QR",
|
||||||
|
"panel_title": "Condivise",
|
||||||
|
"no_shared": "Nessuna nota condivisa"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Cerca note...",
|
"placeholder": "Cerca note...",
|
||||||
"no_results": "Nessun risultato",
|
"no_results": "Nessun risultato",
|
||||||
|
|
@ -160,7 +153,6 @@
|
||||||
"open": "apri",
|
"open": "apri",
|
||||||
"close": "chiudi"
|
"close": "chiudi"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Tag",
|
"title": "Tag",
|
||||||
"no_tags": "Nessun tag trovato",
|
"no_tags": "Nessun tag trovato",
|
||||||
|
|
@ -169,13 +161,11 @@
|
||||||
"clear_all": "Cancella filtri tag",
|
"clear_all": "Cancella filtri tag",
|
||||||
"filter_by": "Filtra per {{tag}} ({{count}} note)"
|
"filter_by": "Filtra per {{tag}} ({{count}} note)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Indice",
|
"title": "Indice",
|
||||||
"no_headings": "Nessun titolo trovato",
|
"no_headings": "Nessun titolo trovato",
|
||||||
"hint": "Aggiungi titoli usando la sintassi #"
|
"hint": "Aggiungi titoli usando la sintassi #"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Backlink",
|
"title": "Backlink",
|
||||||
"no_backlinks": "Nessun backlink trovato",
|
"no_backlinks": "Nessun backlink trovato",
|
||||||
|
|
@ -183,21 +173,18 @@
|
||||||
"select_note": "Seleziona una nota per vedere i backlink",
|
"select_note": "Seleziona una nota per vedere i backlink",
|
||||||
"more_refs": "altri"
|
"more_refs": "altri"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "parole",
|
"words": "parole",
|
||||||
"reading_time": "~{{minutes}}m lettura",
|
"reading_time": "~{{minutes}}m lettura",
|
||||||
"links": "{{count}} link",
|
"links": "{{count}} link",
|
||||||
"click_details": "▼ Clicca per dettagli"
|
"click_details": "▼ Clicca per dettagli"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Grafo",
|
"title": "Grafo",
|
||||||
"empty": "Nessuna connessione da visualizzare",
|
"empty": "Nessuna connessione da visualizzare",
|
||||||
"markdown_links": "Link markdown",
|
"markdown_links": "Link markdown",
|
||||||
"click_hint": "Clic: seleziona • Doppio clic: apri"
|
"click_hint": "Clic: seleziona • Doppio clic: apri"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Modelli",
|
"title": "Modelli",
|
||||||
"select": "Seleziona un modello...",
|
"select": "Seleziona un modello...",
|
||||||
|
|
@ -211,11 +198,9 @@
|
||||||
"available_placeholders": "Segnaposto disponibili",
|
"available_placeholders": "Segnaposto disponibili",
|
||||||
"create_note": "Crea Nota"
|
"create_note": "Crea Nota"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "Esportazione HTML fallita: {{error}}"
|
"failed": "Esportazione HTML fallita: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Accesso",
|
"title": "Accesso",
|
||||||
"tagline": "La tua base di conoscenza personale",
|
"tagline": "La tua base di conoscenza personale",
|
||||||
|
|
@ -224,20 +209,31 @@
|
||||||
"footer": "🔒 Sicuro e ospitato localmente",
|
"footer": "🔒 Sicuro e ospitato localmente",
|
||||||
"error_incorrect_password": "Password errata. Riprova."
|
"error_incorrect_password": "Password errata. Riprova."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Matita — mano libera",
|
||||||
|
"tool_line": "Linea retta",
|
||||||
|
"tool_rect": "Rettangolo",
|
||||||
|
"tool_ellipse": "Cerchio",
|
||||||
|
"color": "Colore",
|
||||||
|
"width": "Spessore tratto",
|
||||||
|
"tool_eraser": "Gomma (disegna col colore di sfondo)",
|
||||||
|
"tool_eyedropper": "Contagocce — prendi un colore dal canvas",
|
||||||
|
"clear": "Svuota",
|
||||||
|
"clear_hint": "Sostituisci con immagine vuota",
|
||||||
|
"clear_title": "Sostituire con tela bianca?",
|
||||||
|
"clear_confirm": "Il PNG salvato e tutti i tratti di questa sessione saranno sostituiti da un'immagine bianca vuota. Non è possibile annullare."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "Eliminare \"{{name}}\"?",
|
"confirm_delete": "Eliminare \"{{name}}\"?",
|
||||||
"upload_failed": "Caricamento file fallito",
|
"upload_failed": "Caricamento file fallito",
|
||||||
"no_valid_files": "Nessun file valido trovato. Supportati: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "Nessun file valido trovato. Supportati: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Impossibile spostare la nota.",
|
"failed_note": "Impossibile spostare la nota.",
|
||||||
"failed_folder": "Impossibile spostare la cartella.",
|
"failed_folder": "Impossibile spostare la cartella.",
|
||||||
"failed_media": "Impossibile spostare il file multimediale."
|
"failed_media": "Impossibile spostare il file multimediale."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Precedente (Shift+F3)",
|
"previous": "Precedente (Shift+F3)",
|
||||||
"next": "Successivo (F3)",
|
"next": "Successivo (F3)",
|
||||||
|
|
@ -248,22 +244,18 @@
|
||||||
"no_results": "Nessuna nota contiene \"{{query}}\"",
|
"no_results": "Nessuna nota contiene \"{{query}}\"",
|
||||||
"searching": "Ricerca di \"{{query}}\"..."
|
"searching": "Ricerca di \"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Tema"
|
"title": "Tema"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Lingua"
|
"title": "Lingua"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Evidenziazione Sintassi Editor",
|
"title": "Evidenziazione Sintassi Editor",
|
||||||
"description": "Colora la sintassi markdown nell'editor",
|
"description": "Colora la sintassi markdown nell'editor",
|
||||||
"enable": "Attiva evidenziazione sintassi",
|
"enable": "Attiva evidenziazione sintassi",
|
||||||
"disable": "Disattiva evidenziazione sintassi"
|
"disable": "Disattiva evidenziazione sintassi"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Account",
|
"account": "Account",
|
||||||
"logout": "Esci",
|
"logout": "Esci",
|
||||||
|
|
@ -274,7 +266,6 @@
|
||||||
"tab_inserts_tab": "Tab inserisce tabulazione",
|
"tab_inserts_tab": "Tab inserisce tabulazione",
|
||||||
"tab_inserts_tab_desc": "Premi Tab per inserire una tabulazione invece di cambiare focus"
|
"tab_inserts_tab_desc": "Premi Tab per inserire una tabulazione invece di cambiare focus"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Home",
|
"title": "Home",
|
||||||
"welcome": "Benvenuto in NoteDiscovery",
|
"welcome": "Benvenuto in NoteDiscovery",
|
||||||
|
|
@ -287,7 +278,6 @@
|
||||||
"folder_singular": "cartella",
|
"folder_singular": "cartella",
|
||||||
"folder_plural": "cartelle"
|
"folder_plural": "cartelle"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Grassetto",
|
"bold": "Grassetto",
|
||||||
"italic": "Corsivo",
|
"italic": "Corsivo",
|
||||||
|
|
@ -303,20 +293,17 @@
|
||||||
"checkbox": "Casella di controllo",
|
"checkbox": "Casella di controllo",
|
||||||
"table": "Tabella"
|
"table": "Tabella"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "Il nome contiene caratteri non consentiti: {{chars}}",
|
"forbidden_chars": "Il nome contiene caratteri non consentiti: {{chars}}",
|
||||||
"reserved_name": "Questo nome è riservato dal sistema operativo.",
|
"reserved_name": "Questo nome è riservato dal sistema operativo.",
|
||||||
"invalid_dot": "Il nome non può essere solo un punto.",
|
"invalid_dot": "Il nome non può essere solo un punto.",
|
||||||
"trailing_dot_space": "Il nome non può terminare con un punto o uno spazio."
|
"trailing_dot_space": "Il nome non può terminare con un punto o uno spazio."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Supporta questo progetto",
|
"enjoying_demo": "Supporta questo progetto",
|
||||||
"deploy_own": "Crea la tua istanza",
|
"deploy_own": "Crea la tua istanza",
|
||||||
"thank_you": "Grazie per il tuo supporto! 💚"
|
"thank_you": "Grazie per il tuo supporto! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "MODALITÀ DEMO",
|
"title": "MODALITÀ DEMO",
|
||||||
"warning": "I contenuti vengono ripristinati ogni giorno. Le modifiche potrebbero essere sovrascritte da altri utenti."
|
"warning": "I contenuti vengono ripristinati ogni giorno. Le modifiche potrebbero essere sovrascritte da altri utenti."
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "日本語",
|
"name": "日本語",
|
||||||
"flag": "🇯🇵"
|
"flag": "🇯🇵"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "セルフホスト型ナレッジベース"
|
"tagline": "セルフホスト型ナレッジベース"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "保存",
|
"save": "保存",
|
||||||
"cancel": "キャンセル",
|
"cancel": "キャンセル",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "クリップボードにコピー",
|
"copy_to_clipboard": "クリップボードにコピー",
|
||||||
"failed": "{{action}}に失敗しました。もう一度お試しください。"
|
"failed": "{{action}}に失敗しました。もう一度お試しください。"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "通知",
|
"region_label": "通知",
|
||||||
"dismiss": "閉じる"
|
"dismiss": "閉じる"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "ファイル",
|
"title": "ファイル",
|
||||||
"favorites_title": "お気に入り",
|
"favorites_title": "お気に入り",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "新規ノート",
|
"new_note": "新規ノート",
|
||||||
"new_folder": "新規フォルダ",
|
"new_folder": "新規フォルダ",
|
||||||
"new_from_template": "テンプレートから作成",
|
"new_from_template": "テンプレートから作成",
|
||||||
|
"new_drawing": "新規お絵かき",
|
||||||
"rename_folder": "フォルダの名前を変更",
|
"rename_folder": "フォルダの名前を変更",
|
||||||
"delete_folder": "フォルダを削除",
|
"delete_folder": "フォルダを削除",
|
||||||
"search_placeholder": "ノートを検索...",
|
"search_placeholder": "ノートを検索...",
|
||||||
|
|
@ -71,7 +68,6 @@
|
||||||
"settings_title": "設定",
|
"settings_title": "設定",
|
||||||
"filtered_notes": "フィルター済みノート"
|
"filtered_notes": "フィルター済みノート"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "マークダウンで書き始める...",
|
"placeholder": "マークダウンで書き始める...",
|
||||||
"drop_hint": "💡 ここにドロップしてカーソル位置に挿入...",
|
"drop_hint": "💡 ここにドロップしてカーソル位置に挿入...",
|
||||||
|
|
@ -84,7 +80,6 @@
|
||||||
"hours_ago": "{{count}}時間前",
|
"hours_ago": "{{count}}時間前",
|
||||||
"days_ago": "{{count}}日前"
|
"days_ago": "{{count}}日前"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "「{{name}}」を削除しますか?",
|
"confirm_delete": "「{{name}}」を削除しますか?",
|
||||||
"already_exists": "「{{name}}」という名前のノートは既に存在します。\n別の名前を選択してください。",
|
"already_exists": "「{{name}}」という名前のノートは既に存在します。\n別の名前を選択してください。",
|
||||||
|
|
@ -100,7 +95,6 @@
|
||||||
"no_content": "エクスポートするノートの内容がありません",
|
"no_content": "エクスポートするノートの内容がありません",
|
||||||
"open_first": "画像をアップロードする前にノートを開いてください。"
|
"open_first": "画像をアップロードする前にノートを開いてください。"
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ 警告 ⚠️\n\n本当にフォルダ「{{name}}」を削除しますか?\n\n以下が完全に削除されます:\n• このフォルダ内のすべてのノート\n• すべてのサブフォルダとその内容\n\nこの操作は元に戻せません!",
|
"confirm_delete": "⚠️ 警告 ⚠️\n\n本当にフォルダ「{{name}}」を削除しますか?\n\n以下が完全に削除されます:\n• このフォルダ内のすべてのノート\n• すべてのサブフォルダとその内容\n\nこの操作は元に戻せません!",
|
||||||
"already_exists": "「{{name}}」という名前のフォルダは既に存在します。\n別の名前を選択してください。",
|
"already_exists": "「{{name}}」という名前のフォルダは既に存在します。\n別の名前を選択してください。",
|
||||||
|
|
@ -117,26 +111,24 @@
|
||||||
"cannot_move_into_self": "フォルダを自身またはそのサブフォルダに移動できません。",
|
"cannot_move_into_self": "フォルダを自身またはそのサブフォルダに移動できません。",
|
||||||
"empty": "空"
|
"empty": "空"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "元に戻す (Ctrl+Z)",
|
"undo": "元に戻す (Ctrl+Z)",
|
||||||
"redo": "やり直す (Ctrl+Y)",
|
"redo": "やり直す (Ctrl+Y)",
|
||||||
"delete_note": "ノートを削除",
|
"delete_note": "ノートを削除",
|
||||||
"delete_image": "画像を削除",
|
"delete_image": "画像を削除",
|
||||||
|
"delete_drawing": "お絵かきを削除",
|
||||||
"export_html": "HTMLとしてエクスポート",
|
"export_html": "HTMLとしてエクスポート",
|
||||||
"print_preview": "印刷プレビュー",
|
"print_preview": "印刷プレビュー",
|
||||||
"copy_link": "リンクをクリップボードにコピー",
|
"copy_link": "リンクをクリップボードにコピー",
|
||||||
"add_favorite": "お気に入りに追加",
|
"add_favorite": "お気に入りに追加",
|
||||||
"remove_favorite": "お気に入りから削除"
|
"remove_favorite": "お気に入りから削除"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "集中モード",
|
"title": "集中モード",
|
||||||
"tooltip": "集中モード (Ctrl+Alt+Z)",
|
"tooltip": "集中モード (Ctrl+Alt+Z)",
|
||||||
"exit": "集中モードを終了",
|
"exit": "集中モードを終了",
|
||||||
"exit_hint": "集中モードを終了 (Esc)"
|
"exit_hint": "集中モードを終了 (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "ノートを共有",
|
"button_tooltip": "ノートを共有",
|
||||||
"modal_title": "ノートを共有",
|
"modal_title": "ノートを共有",
|
||||||
|
|
@ -149,9 +141,10 @@
|
||||||
"error_creating": "共有リンクの作成に失敗しました: {{error}}",
|
"error_creating": "共有リンクの作成に失敗しました: {{error}}",
|
||||||
"error_revoking": "共有リンクの取り消しに失敗しました: {{error}}",
|
"error_revoking": "共有リンクの取り消しに失敗しました: {{error}}",
|
||||||
"show_qr": "QRコードを表示",
|
"show_qr": "QRコードを表示",
|
||||||
"hide_qr": "QRコードを非表示"
|
"hide_qr": "QRコードを非表示",
|
||||||
|
"panel_title": "共有",
|
||||||
|
"no_shared": "共有中のノートはありません"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "ノートを検索...",
|
"placeholder": "ノートを検索...",
|
||||||
"no_results": "結果なし",
|
"no_results": "結果なし",
|
||||||
|
|
@ -160,7 +153,6 @@
|
||||||
"open": "開く",
|
"open": "開く",
|
||||||
"close": "閉じる"
|
"close": "閉じる"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "タグ",
|
"title": "タグ",
|
||||||
"no_tags": "タグが見つかりません",
|
"no_tags": "タグが見つかりません",
|
||||||
|
|
@ -169,13 +161,11 @@
|
||||||
"clear_all": "タグフィルターをクリア",
|
"clear_all": "タグフィルターをクリア",
|
||||||
"filter_by": "{{tag}}でフィルター({{count}}件)"
|
"filter_by": "{{tag}}でフィルター({{count}}件)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "アウトライン",
|
"title": "アウトライン",
|
||||||
"no_headings": "見出しが見つかりません",
|
"no_headings": "見出しが見つかりません",
|
||||||
"hint": "# 記法で見出しを追加"
|
"hint": "# 記法で見出しを追加"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "バックリンク",
|
"title": "バックリンク",
|
||||||
"no_backlinks": "バックリンクが見つかりません",
|
"no_backlinks": "バックリンクが見つかりません",
|
||||||
|
|
@ -183,21 +173,18 @@
|
||||||
"select_note": "バックリンクを表示するノートを選択",
|
"select_note": "バックリンクを表示するノートを選択",
|
||||||
"more_refs": "その他"
|
"more_refs": "その他"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "語",
|
"words": "語",
|
||||||
"reading_time": "約{{minutes}}分で読了",
|
"reading_time": "約{{minutes}}分で読了",
|
||||||
"links": "{{count}}件のリンク",
|
"links": "{{count}}件のリンク",
|
||||||
"click_details": "▼ 詳細を表示"
|
"click_details": "▼ 詳細を表示"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "グラフ",
|
"title": "グラフ",
|
||||||
"empty": "表示する接続がありません",
|
"empty": "表示する接続がありません",
|
||||||
"markdown_links": "マークダウンリンク",
|
"markdown_links": "マークダウンリンク",
|
||||||
"click_hint": "クリック: 選択 • ダブルクリック: 開く"
|
"click_hint": "クリック: 選択 • ダブルクリック: 開く"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "テンプレート",
|
"title": "テンプレート",
|
||||||
"select": "テンプレートを選択...",
|
"select": "テンプレートを選択...",
|
||||||
|
|
@ -211,11 +198,9 @@
|
||||||
"available_placeholders": "利用可能なプレースホルダー",
|
"available_placeholders": "利用可能なプレースホルダー",
|
||||||
"create_note": "ノートを作成"
|
"create_note": "ノートを作成"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "HTMLエクスポートに失敗しました: {{error}}"
|
"failed": "HTMLエクスポートに失敗しました: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "ログイン",
|
"title": "ログイン",
|
||||||
"tagline": "セルフホスト型ナレッジベース",
|
"tagline": "セルフホスト型ナレッジベース",
|
||||||
|
|
@ -224,20 +209,31 @@
|
||||||
"footer": "🔒 安全なセルフホスト",
|
"footer": "🔒 安全なセルフホスト",
|
||||||
"error_incorrect_password": "パスワードが正しくありません。もう一度お試しください。"
|
"error_incorrect_password": "パスワードが正しくありません。もう一度お試しください。"
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "鉛筆(フリーハンド)",
|
||||||
|
"tool_line": "直線",
|
||||||
|
"tool_rect": "長方形",
|
||||||
|
"tool_ellipse": "円",
|
||||||
|
"color": "色",
|
||||||
|
"width": "線の太さ",
|
||||||
|
"tool_eraser": "消しゴム(背景色で塗る)",
|
||||||
|
"tool_eyedropper": "スポイト — キャンバスから色を取得",
|
||||||
|
"clear": "クリア",
|
||||||
|
"clear_hint": "白紙の画像に置き換え",
|
||||||
|
"clear_title": "白紙のキャンバスに置き換えますか?",
|
||||||
|
"clear_confirm": "保存済みのPNGとこの作業中の線は、白い空白画像に置き換えられます。元に戻せません。"
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "「{{name}}」を削除しますか?",
|
"confirm_delete": "「{{name}}」を削除しますか?",
|
||||||
"upload_failed": "ファイルのアップロードに失敗しました",
|
"upload_failed": "ファイルのアップロードに失敗しました",
|
||||||
"no_valid_files": "有効なファイルが見つかりません。対応: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "有効なファイルが見つかりません。対応: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "ノートの移動に失敗しました。",
|
"failed_note": "ノートの移動に失敗しました。",
|
||||||
"failed_folder": "フォルダの移動に失敗しました。",
|
"failed_folder": "フォルダの移動に失敗しました。",
|
||||||
"failed_media": "メディアファイルの移動に失敗しました。"
|
"failed_media": "メディアファイルの移動に失敗しました。"
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "前へ (Shift+F3)",
|
"previous": "前へ (Shift+F3)",
|
||||||
"next": "次へ (F3)",
|
"next": "次へ (F3)",
|
||||||
|
|
@ -248,22 +244,18 @@
|
||||||
"no_results": "「{{query}}」を含むノートはありません",
|
"no_results": "「{{query}}」を含むノートはありません",
|
||||||
"searching": "「{{query}}」を検索中..."
|
"searching": "「{{query}}」を検索中..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "テーマ"
|
"title": "テーマ"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "言語"
|
"title": "言語"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "エディタのシンタックスハイライト",
|
"title": "エディタのシンタックスハイライト",
|
||||||
"description": "エディタでマークダウン構文を色分け表示",
|
"description": "エディタでマークダウン構文を色分け表示",
|
||||||
"enable": "シンタックスハイライトを有効化",
|
"enable": "シンタックスハイライトを有効化",
|
||||||
"disable": "シンタックスハイライトを無効化"
|
"disable": "シンタックスハイライトを無効化"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "アカウント",
|
"account": "アカウント",
|
||||||
"logout": "ログアウト",
|
"logout": "ログアウト",
|
||||||
|
|
@ -274,7 +266,6 @@
|
||||||
"tab_inserts_tab": "Tabキーでタブを挿入",
|
"tab_inserts_tab": "Tabキーでタブを挿入",
|
||||||
"tab_inserts_tab_desc": "Tabキーでフォーカス移動ではなくタブ文字を挿入"
|
"tab_inserts_tab_desc": "Tabキーでフォーカス移動ではなくタブ文字を挿入"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "ホーム",
|
"title": "ホーム",
|
||||||
"welcome": "NoteDiscoveryへようこそ",
|
"welcome": "NoteDiscoveryへようこそ",
|
||||||
|
|
@ -287,7 +278,6 @@
|
||||||
"folder_singular": "フォルダ",
|
"folder_singular": "フォルダ",
|
||||||
"folder_plural": "フォルダ"
|
"folder_plural": "フォルダ"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "太字",
|
"bold": "太字",
|
||||||
"italic": "斜体",
|
"italic": "斜体",
|
||||||
|
|
@ -303,20 +293,17 @@
|
||||||
"checkbox": "チェックボックス",
|
"checkbox": "チェックボックス",
|
||||||
"table": "表"
|
"table": "表"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "名前に使用できない文字が含まれています: {{chars}}",
|
"forbidden_chars": "名前に使用できない文字が含まれています: {{chars}}",
|
||||||
"reserved_name": "この名前はオペレーティングシステムで予約されています。",
|
"reserved_name": "この名前はオペレーティングシステムで予約されています。",
|
||||||
"invalid_dot": "名前をドットだけにすることはできません。",
|
"invalid_dot": "名前をドットだけにすることはできません。",
|
||||||
"trailing_dot_space": "名前の末尾にドットやスペースは使用できません。"
|
"trailing_dot_space": "名前の末尾にドットやスペースは使用できません。"
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "このプロジェクトを支援",
|
"enjoying_demo": "このプロジェクトを支援",
|
||||||
"deploy_own": "自分のインスタンスをデプロイ",
|
"deploy_own": "自分のインスタンスをデプロイ",
|
||||||
"thank_you": "ご支援ありがとうございます!💚"
|
"thank_you": "ご支援ありがとうございます!💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "デモモード",
|
"title": "デモモード",
|
||||||
"warning": "コンテンツは毎日リセットされます。変更は他のユーザーによって上書きされる場合があります。"
|
"warning": "コンテンツは毎日リセットされます。変更は他のユーザーによって上書きされる場合があります。"
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "Русский",
|
"name": "Русский",
|
||||||
"flag": "🇷🇺"
|
"flag": "🇷🇺"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "Ваша локальная база знаний"
|
"tagline": "Ваша локальная база знаний"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Сохранить",
|
"save": "Сохранить",
|
||||||
"cancel": "Отмена",
|
"cancel": "Отмена",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "Копировать в буфер обмена",
|
"copy_to_clipboard": "Копировать в буфер обмена",
|
||||||
"failed": "Не удалось {{action}}. Попробуйте снова."
|
"failed": "Не удалось {{action}}. Попробуйте снова."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Уведомления",
|
"region_label": "Уведомления",
|
||||||
"dismiss": "Закрыть"
|
"dismiss": "Закрыть"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "ФАЙЛЫ",
|
"title": "ФАЙЛЫ",
|
||||||
"favorites_title": "Избранное",
|
"favorites_title": "Избранное",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "Новая заметка",
|
"new_note": "Новая заметка",
|
||||||
"new_folder": "Новая папка",
|
"new_folder": "Новая папка",
|
||||||
"new_from_template": "Из шаблона",
|
"new_from_template": "Из шаблона",
|
||||||
|
"new_drawing": "Новый рисунок",
|
||||||
"rename_folder": "Переименовать папку",
|
"rename_folder": "Переименовать папку",
|
||||||
"delete_folder": "Удалить папку",
|
"delete_folder": "Удалить папку",
|
||||||
"search_placeholder": "Поиск заметок...",
|
"search_placeholder": "Поиск заметок...",
|
||||||
|
|
@ -71,7 +68,6 @@
|
||||||
"settings_title": "НАСТРОЙКИ",
|
"settings_title": "НАСТРОЙКИ",
|
||||||
"filtered_notes": "Отфильтрованные заметки"
|
"filtered_notes": "Отфильтрованные заметки"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Начните писать в markdown...",
|
"placeholder": "Начните писать в markdown...",
|
||||||
"drop_hint": "💡 Отпустите здесь для вставки в позицию курсора...",
|
"drop_hint": "💡 Отпустите здесь для вставки в позицию курсора...",
|
||||||
|
|
@ -84,7 +80,6 @@
|
||||||
"hours_ago": "{{count}} ч. назад",
|
"hours_ago": "{{count}} ч. назад",
|
||||||
"days_ago": "{{count}} дн. назад"
|
"days_ago": "{{count}} дн. назад"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "Удалить «{{name}}»?",
|
"confirm_delete": "Удалить «{{name}}»?",
|
||||||
"already_exists": "Заметка с именем «{{name}}» уже существует.\nВыберите другое имя.",
|
"already_exists": "Заметка с именем «{{name}}» уже существует.\nВыберите другое имя.",
|
||||||
|
|
@ -100,7 +95,6 @@
|
||||||
"no_content": "Нет содержимого для экспорта",
|
"no_content": "Нет содержимого для экспорта",
|
||||||
"open_first": "Сначала откройте заметку для загрузки изображений."
|
"open_first": "Сначала откройте заметку для загрузки изображений."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ ВНИМАНИЕ ⚠️\n\nВы уверены, что хотите удалить папку «{{name}}»?\n\nБудет БЕЗВОЗВРАТНО удалено:\n• Все заметки в этой папке\n• Все подпапки и их содержимое\n\nЭто действие НЕЛЬЗЯ отменить!",
|
"confirm_delete": "⚠️ ВНИМАНИЕ ⚠️\n\nВы уверены, что хотите удалить папку «{{name}}»?\n\nБудет БЕЗВОЗВРАТНО удалено:\n• Все заметки в этой папке\n• Все подпапки и их содержимое\n\nЭто действие НЕЛЬЗЯ отменить!",
|
||||||
"already_exists": "Папка с именем «{{name}}» уже существует.\nВыберите другое имя.",
|
"already_exists": "Папка с именем «{{name}}» уже существует.\nВыберите другое имя.",
|
||||||
|
|
@ -117,26 +111,24 @@
|
||||||
"cannot_move_into_self": "Нельзя переместить папку в себя или в подпапку.",
|
"cannot_move_into_self": "Нельзя переместить папку в себя или в подпапку.",
|
||||||
"empty": "пусто"
|
"empty": "пусто"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Отменить (Ctrl+Z)",
|
"undo": "Отменить (Ctrl+Z)",
|
||||||
"redo": "Повторить (Ctrl+Y)",
|
"redo": "Повторить (Ctrl+Y)",
|
||||||
"delete_note": "Удалить заметку",
|
"delete_note": "Удалить заметку",
|
||||||
"delete_image": "Удалить изображение",
|
"delete_image": "Удалить изображение",
|
||||||
|
"delete_drawing": "Удалить рисунок",
|
||||||
"export_html": "Экспорт в HTML",
|
"export_html": "Экспорт в HTML",
|
||||||
"print_preview": "Предварительный просмотр печати",
|
"print_preview": "Предварительный просмотр печати",
|
||||||
"copy_link": "Копировать ссылку",
|
"copy_link": "Копировать ссылку",
|
||||||
"add_favorite": "Добавить в избранное",
|
"add_favorite": "Добавить в избранное",
|
||||||
"remove_favorite": "Удалить из избранного"
|
"remove_favorite": "Удалить из избранного"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Режим концентрации",
|
"title": "Режим концентрации",
|
||||||
"tooltip": "Режим концентрации (Ctrl+Alt+Z)",
|
"tooltip": "Режим концентрации (Ctrl+Alt+Z)",
|
||||||
"exit": "Выйти из режима концентрации",
|
"exit": "Выйти из режима концентрации",
|
||||||
"exit_hint": "Выйти из режима концентрации (Esc)"
|
"exit_hint": "Выйти из режима концентрации (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Поделиться заметкой",
|
"button_tooltip": "Поделиться заметкой",
|
||||||
"modal_title": "Поделиться заметкой",
|
"modal_title": "Поделиться заметкой",
|
||||||
|
|
@ -149,9 +141,10 @@
|
||||||
"error_creating": "Не удалось создать ссылку: {{error}}",
|
"error_creating": "Не удалось создать ссылку: {{error}}",
|
||||||
"error_revoking": "Не удалось отозвать ссылку: {{error}}",
|
"error_revoking": "Не удалось отозвать ссылку: {{error}}",
|
||||||
"show_qr": "Показать QR-код",
|
"show_qr": "Показать QR-код",
|
||||||
"hide_qr": "Скрыть QR-код"
|
"hide_qr": "Скрыть QR-код",
|
||||||
|
"panel_title": "Опубликовано",
|
||||||
|
"no_shared": "Нет опубликованных заметок"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Поиск заметок...",
|
"placeholder": "Поиск заметок...",
|
||||||
"no_results": "Ничего не найдено",
|
"no_results": "Ничего не найдено",
|
||||||
|
|
@ -160,7 +153,6 @@
|
||||||
"open": "открыть",
|
"open": "открыть",
|
||||||
"close": "закрыть"
|
"close": "закрыть"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Теги",
|
"title": "Теги",
|
||||||
"no_tags": "Теги не найдены",
|
"no_tags": "Теги не найдены",
|
||||||
|
|
@ -169,13 +161,11 @@
|
||||||
"clear_all": "Сбросить фильтры тегов",
|
"clear_all": "Сбросить фильтры тегов",
|
||||||
"filter_by": "Фильтр по {{tag}} ({{count}} заметок)"
|
"filter_by": "Фильтр по {{tag}} ({{count}} заметок)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Содержание",
|
"title": "Содержание",
|
||||||
"no_headings": "Заголовки не найдены",
|
"no_headings": "Заголовки не найдены",
|
||||||
"hint": "Добавьте заголовки с помощью #"
|
"hint": "Добавьте заголовки с помощью #"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Обратные ссылки",
|
"title": "Обратные ссылки",
|
||||||
"no_backlinks": "Обратные ссылки не найдены",
|
"no_backlinks": "Обратные ссылки не найдены",
|
||||||
|
|
@ -183,21 +173,18 @@
|
||||||
"select_note": "Выберите заметку, чтобы увидеть обратные ссылки",
|
"select_note": "Выберите заметку, чтобы увидеть обратные ссылки",
|
||||||
"more_refs": "ещё"
|
"more_refs": "ещё"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "слов",
|
"words": "слов",
|
||||||
"reading_time": "~{{minutes}} мин. чтения",
|
"reading_time": "~{{minutes}} мин. чтения",
|
||||||
"links": "{{count}} ссылок",
|
"links": "{{count}} ссылок",
|
||||||
"click_details": "▼ Нажмите для подробностей"
|
"click_details": "▼ Нажмите для подробностей"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Граф связей",
|
"title": "Граф связей",
|
||||||
"empty": "Нет связей для отображения",
|
"empty": "Нет связей для отображения",
|
||||||
"markdown_links": "Markdown-ссылки",
|
"markdown_links": "Markdown-ссылки",
|
||||||
"click_hint": "Клик: выбрать • Двойной клик: открыть"
|
"click_hint": "Клик: выбрать • Двойной клик: открыть"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Шаблоны",
|
"title": "Шаблоны",
|
||||||
"select": "Выберите шаблон...",
|
"select": "Выберите шаблон...",
|
||||||
|
|
@ -211,11 +198,9 @@
|
||||||
"available_placeholders": "Доступные плейсхолдеры",
|
"available_placeholders": "Доступные плейсхолдеры",
|
||||||
"create_note": "Создать заметку"
|
"create_note": "Создать заметку"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "Ошибка экспорта HTML: {{error}}"
|
"failed": "Ошибка экспорта HTML: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Вход",
|
"title": "Вход",
|
||||||
"tagline": "Ваша локальная база знаний",
|
"tagline": "Ваша локальная база знаний",
|
||||||
|
|
@ -224,20 +209,31 @@
|
||||||
"footer": "🔒 Безопасно и локально",
|
"footer": "🔒 Безопасно и локально",
|
||||||
"error_incorrect_password": "Неверный пароль. Попробуйте снова."
|
"error_incorrect_password": "Неверный пароль. Попробуйте снова."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Карандаш — от руки",
|
||||||
|
"tool_line": "Прямая линия",
|
||||||
|
"tool_rect": "Прямоугольник",
|
||||||
|
"tool_ellipse": "Круг",
|
||||||
|
"color": "Цвет",
|
||||||
|
"width": "Толщина линии",
|
||||||
|
"tool_eraser": "Ластик (рисует цветом фона)",
|
||||||
|
"tool_eyedropper": "Пипетка — взять цвет с холста",
|
||||||
|
"clear": "Очистить",
|
||||||
|
"clear_hint": "Заменить пустым изображением",
|
||||||
|
"clear_title": "Заменить пустым холстом?",
|
||||||
|
"clear_confirm": "Сохранённый PNG и все штрихи этого сеанса будут заменены пустым белым изображением. Это действие нельзя отменить."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "Удалить «{{name}}»?",
|
"confirm_delete": "Удалить «{{name}}»?",
|
||||||
"upload_failed": "Не удалось загрузить файл",
|
"upload_failed": "Не удалось загрузить файл",
|
||||||
"no_valid_files": "Не найдено подходящих файлов. Поддерживает: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "Не найдено подходящих файлов. Поддерживает: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Не удалось переместить заметку.",
|
"failed_note": "Не удалось переместить заметку.",
|
||||||
"failed_folder": "Не удалось переместить папку.",
|
"failed_folder": "Не удалось переместить папку.",
|
||||||
"failed_media": "Не удалось переместить медиафайл."
|
"failed_media": "Не удалось переместить медиафайл."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Предыдущий (Shift+F3)",
|
"previous": "Предыдущий (Shift+F3)",
|
||||||
"next": "Следующий (F3)",
|
"next": "Следующий (F3)",
|
||||||
|
|
@ -248,22 +244,18 @@
|
||||||
"no_results": "Нет заметок с \"{{query}}\"",
|
"no_results": "Нет заметок с \"{{query}}\"",
|
||||||
"searching": "Поиск \"{{query}}\"..."
|
"searching": "Поиск \"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Тема"
|
"title": "Тема"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Язык"
|
"title": "Язык"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Подсветка синтаксиса",
|
"title": "Подсветка синтаксиса",
|
||||||
"description": "Подсветка markdown-синтаксиса в редакторе",
|
"description": "Подсветка markdown-синтаксиса в редакторе",
|
||||||
"enable": "Включить подсветку синтаксиса",
|
"enable": "Включить подсветку синтаксиса",
|
||||||
"disable": "Выключить подсветку синтаксиса"
|
"disable": "Выключить подсветку синтаксиса"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Аккаунт",
|
"account": "Аккаунт",
|
||||||
"logout": "Выйти",
|
"logout": "Выйти",
|
||||||
|
|
@ -274,7 +266,6 @@
|
||||||
"tab_inserts_tab": "Tab вставляет табуляцию",
|
"tab_inserts_tab": "Tab вставляет табуляцию",
|
||||||
"tab_inserts_tab_desc": "Нажмите Tab для вставки табуляции вместо переключения фокуса"
|
"tab_inserts_tab_desc": "Нажмите Tab для вставки табуляции вместо переключения фокуса"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Главная",
|
"title": "Главная",
|
||||||
"welcome": "Добро пожаловать в NoteDiscovery",
|
"welcome": "Добро пожаловать в NoteDiscovery",
|
||||||
|
|
@ -287,7 +278,6 @@
|
||||||
"folder_singular": "папка",
|
"folder_singular": "папка",
|
||||||
"folder_plural": "папок"
|
"folder_plural": "папок"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Жирный",
|
"bold": "Жирный",
|
||||||
"italic": "Курсив",
|
"italic": "Курсив",
|
||||||
|
|
@ -303,20 +293,17 @@
|
||||||
"checkbox": "Чекбокс",
|
"checkbox": "Чекбокс",
|
||||||
"table": "Таблица"
|
"table": "Таблица"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "Имя содержит запрещённые символы: {{chars}}",
|
"forbidden_chars": "Имя содержит запрещённые символы: {{chars}}",
|
||||||
"reserved_name": "Это имя зарезервировано операционной системой.",
|
"reserved_name": "Это имя зарезервировано операционной системой.",
|
||||||
"invalid_dot": "Имя не может состоять только из точки.",
|
"invalid_dot": "Имя не может состоять только из точки.",
|
||||||
"trailing_dot_space": "Имя не может заканчиваться точкой или пробелом."
|
"trailing_dot_space": "Имя не может заканчиваться точкой или пробелом."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Поддержать проект",
|
"enjoying_demo": "Поддержать проект",
|
||||||
"deploy_own": "Развернуть свой экземпляр",
|
"deploy_own": "Развернуть свой экземпляр",
|
||||||
"thank_you": "Спасибо за поддержку! 💚"
|
"thank_you": "Спасибо за поддержку! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "ДЕМО-РЕЖИМ",
|
"title": "ДЕМО-РЕЖИМ",
|
||||||
"warning": "Содержимое сбрасывается ежедневно. Изменения могут быть перезаписаны другими пользователями."
|
"warning": "Содержимое сбрасывается ежедневно. Изменения могут быть перезаписаны другими пользователями."
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "Slovenščina",
|
"name": "Slovenščina",
|
||||||
"flag": "🇸🇮"
|
"flag": "🇸🇮"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "Vaša lastna baza znanja"
|
"tagline": "Vaša lastna baza znanja"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "Shrani",
|
"save": "Shrani",
|
||||||
"cancel": "Prekliči",
|
"cancel": "Prekliči",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "Kopiraj v odložišče",
|
"copy_to_clipboard": "Kopiraj v odložišče",
|
||||||
"failed": "Napaka pri {{action}}. Prosimo, poskusite znova."
|
"failed": "Napaka pri {{action}}. Prosimo, poskusite znova."
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "Obvestila",
|
"region_label": "Obvestila",
|
||||||
"dismiss": "Zapri"
|
"dismiss": "Zapri"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "DATOTEKE",
|
"title": "DATOTEKE",
|
||||||
"favorites_title": "Priljubljene",
|
"favorites_title": "Priljubljene",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "Nov zapis",
|
"new_note": "Nov zapis",
|
||||||
"new_folder": "Nova mapa",
|
"new_folder": "Nova mapa",
|
||||||
"new_from_template": "Novo iz predloge",
|
"new_from_template": "Novo iz predloge",
|
||||||
|
"new_drawing": "Nov risba",
|
||||||
"rename_folder": "Preimenuj mapo",
|
"rename_folder": "Preimenuj mapo",
|
||||||
"delete_folder": "Izbriši mapo",
|
"delete_folder": "Izbriši mapo",
|
||||||
"search_placeholder": "Išči zapiske...",
|
"search_placeholder": "Išči zapiske...",
|
||||||
|
|
@ -71,7 +68,6 @@
|
||||||
"settings_title": "NASTAVITVE",
|
"settings_title": "NASTAVITVE",
|
||||||
"filtered_notes": "Filtrirani zapiski"
|
"filtered_notes": "Filtrirani zapiski"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "Začnite pisati v markdownu...",
|
"placeholder": "Začnite pisati v markdownu...",
|
||||||
"drop_hint": "💡 Spustite tukaj za vstavljanje na mesto kazalca...",
|
"drop_hint": "💡 Spustite tukaj za vstavljanje na mesto kazalca...",
|
||||||
|
|
@ -84,7 +80,6 @@
|
||||||
"hours_ago": "pred {{count}} h",
|
"hours_ago": "pred {{count}} h",
|
||||||
"days_ago": "pred {{count}} d"
|
"days_ago": "pred {{count}} d"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "Izbrišem \"{{name}}\"?",
|
"confirm_delete": "Izbrišem \"{{name}}\"?",
|
||||||
"already_exists": "Zapis z imenom \"{{name}}\" na tej lokaciji že obstaja.\nProsimo, izberite drugo ime.",
|
"already_exists": "Zapis z imenom \"{{name}}\" na tej lokaciji že obstaja.\nProsimo, izberite drugo ime.",
|
||||||
|
|
@ -100,7 +95,6 @@
|
||||||
"no_content": "Ni vsebine za izvoz",
|
"no_content": "Ni vsebine za izvoz",
|
||||||
"open_first": "Prosimo, najprej odprite zapis, preden naložite slike."
|
"open_first": "Prosimo, najprej odprite zapis, preden naložite slike."
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ OPOZORILO ⚠️\n\nAli ste prepričani, da želite izbrisati mapo \"{{name}}\"?\n\nTo bo TRAJNO izbrisalo:\n• Vse zapiske v tej mapi\n• Vse podmape in njihovo vsebino\n\nTe akcije NI mogoče preklicati!",
|
"confirm_delete": "⚠️ OPOZORILO ⚠️\n\nAli ste prepričani, da želite izbrisati mapo \"{{name}}\"?\n\nTo bo TRAJNO izbrisalo:\n• Vse zapiske v tej mapi\n• Vse podmape in njihovo vsebino\n\nTe akcije NI mogoče preklicati!",
|
||||||
"already_exists": "Mapa z imenom \"{{name}}\" na tej lokaciji že obstaja.\nProsimo, izberite drugo ime.",
|
"already_exists": "Mapa z imenom \"{{name}}\" na tej lokaciji že obstaja.\nProsimo, izberite drugo ime.",
|
||||||
|
|
@ -117,26 +111,24 @@
|
||||||
"cannot_move_into_self": "Mape ni mogoče premakniti vase ali v njeno podmapo.",
|
"cannot_move_into_self": "Mape ni mogoče premakniti vase ali v njeno podmapo.",
|
||||||
"empty": "prazno"
|
"empty": "prazno"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "Razveljavi (Ctrl+Z)",
|
"undo": "Razveljavi (Ctrl+Z)",
|
||||||
"redo": "Ponovi (Ctrl+Y)",
|
"redo": "Ponovi (Ctrl+Y)",
|
||||||
"delete_note": "Izbriši zapis",
|
"delete_note": "Izbriši zapis",
|
||||||
"delete_image": "Izbriši sliko",
|
"delete_image": "Izbriši sliko",
|
||||||
|
"delete_drawing": "Izbriši risbo",
|
||||||
"export_html": "Izvozi kot HTML",
|
"export_html": "Izvozi kot HTML",
|
||||||
"print_preview": "Predogled tiskanja",
|
"print_preview": "Predogled tiskanja",
|
||||||
"copy_link": "Kopiraj povezavo v odložišče",
|
"copy_link": "Kopiraj povezavo v odložišče",
|
||||||
"add_favorite": "Dodaj med priljubljene",
|
"add_favorite": "Dodaj med priljubljene",
|
||||||
"remove_favorite": "Odstrani iz priljubljenih"
|
"remove_favorite": "Odstrani iz priljubljenih"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "Zen način",
|
"title": "Zen način",
|
||||||
"tooltip": "Zen način (Ctrl+Alt+Z)",
|
"tooltip": "Zen način (Ctrl+Alt+Z)",
|
||||||
"exit": "Izhod iz zen načina",
|
"exit": "Izhod iz zen načina",
|
||||||
"exit_hint": "Izhod iz zen načina (Esc)"
|
"exit_hint": "Izhod iz zen načina (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "Deli zapis",
|
"button_tooltip": "Deli zapis",
|
||||||
"modal_title": "Deli zapis",
|
"modal_title": "Deli zapis",
|
||||||
|
|
@ -149,9 +141,10 @@
|
||||||
"error_creating": "Napaka pri ustvarjanju povezave: {{error}}",
|
"error_creating": "Napaka pri ustvarjanju povezave: {{error}}",
|
||||||
"error_revoking": "Napaka pri preklicu povezave: {{error}}",
|
"error_revoking": "Napaka pri preklicu povezave: {{error}}",
|
||||||
"show_qr": "Prikaži QR kodo",
|
"show_qr": "Prikaži QR kodo",
|
||||||
"hide_qr": "Skrij QR kodo"
|
"hide_qr": "Skrij QR kodo",
|
||||||
|
"panel_title": "V skupni rabi",
|
||||||
|
"no_shared": "Ni deljenih zapisov"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "Išči beležke...",
|
"placeholder": "Išči beležke...",
|
||||||
"no_results": "Ni rezultatov",
|
"no_results": "Ni rezultatov",
|
||||||
|
|
@ -160,7 +153,6 @@
|
||||||
"open": "odpri",
|
"open": "odpri",
|
||||||
"close": "zapri"
|
"close": "zapri"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "Oznake",
|
"title": "Oznake",
|
||||||
"no_tags": "Ni najdenih oznak",
|
"no_tags": "Ni najdenih oznak",
|
||||||
|
|
@ -169,13 +161,11 @@
|
||||||
"clear_all": "Počisti filtre oznak",
|
"clear_all": "Počisti filtre oznak",
|
||||||
"filter_by": "Filtriraj po {{tag}} ({{count}} zapiskov)"
|
"filter_by": "Filtriraj po {{tag}} ({{count}} zapiskov)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "Oris",
|
"title": "Oris",
|
||||||
"no_headings": "Ni najdenih naslovov",
|
"no_headings": "Ni najdenih naslovov",
|
||||||
"hint": "Dodajte naslove s sintakso #"
|
"hint": "Dodajte naslove s sintakso #"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "Povratne povezave",
|
"title": "Povratne povezave",
|
||||||
"no_backlinks": "Ni najdenih povratnih povezav",
|
"no_backlinks": "Ni najdenih povratnih povezav",
|
||||||
|
|
@ -183,21 +173,18 @@
|
||||||
"select_note": "Izberite beležko za ogled povratnih povezav",
|
"select_note": "Izberite beležko za ogled povratnih povezav",
|
||||||
"more_refs": "več"
|
"more_refs": "več"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "besed",
|
"words": "besed",
|
||||||
"reading_time": "~{{minutes}} min branja",
|
"reading_time": "~{{minutes}} min branja",
|
||||||
"links": "{{count}} povezav",
|
"links": "{{count}} povezav",
|
||||||
"click_details": "▼ Kliknite za podrobnosti"
|
"click_details": "▼ Kliknite za podrobnosti"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "Grafični prikaz",
|
"title": "Grafični prikaz",
|
||||||
"empty": "Ni povezav za prikaz",
|
"empty": "Ni povezav za prikaz",
|
||||||
"markdown_links": "Markdown povezave",
|
"markdown_links": "Markdown povezave",
|
||||||
"click_hint": "Klik: izberi • Dvojni klik: odpri"
|
"click_hint": "Klik: izberi • Dvojni klik: odpri"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "Predloge",
|
"title": "Predloge",
|
||||||
"select": "Izberite predlogo...",
|
"select": "Izberite predlogo...",
|
||||||
|
|
@ -211,11 +198,9 @@
|
||||||
"available_placeholders": "Razpoložljivi gradniki",
|
"available_placeholders": "Razpoložljivi gradniki",
|
||||||
"create_note": "Ustvari zapis"
|
"create_note": "Ustvari zapis"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "Izvoz v HTML ni uspel: {{error}}"
|
"failed": "Izvoz v HTML ni uspel: {{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "Prijava",
|
"title": "Prijava",
|
||||||
"tagline": "Vaša lastna baza znanja",
|
"tagline": "Vaša lastna baza znanja",
|
||||||
|
|
@ -224,20 +209,31 @@
|
||||||
"footer": "🔒 Varno in samostojno gostovano",
|
"footer": "🔒 Varno in samostojno gostovano",
|
||||||
"error_incorrect_password": "Napačno geslo. Prosimo, poskusite znova."
|
"error_incorrect_password": "Napačno geslo. Prosimo, poskusite znova."
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "Svinčnik — prostoročno",
|
||||||
|
"tool_line": "Ravna črta",
|
||||||
|
"tool_rect": "Pravokotnik",
|
||||||
|
"tool_ellipse": "Krog",
|
||||||
|
"color": "Barva",
|
||||||
|
"width": "Debelina črte",
|
||||||
|
"tool_eraser": "Radirka (riše z barvo ozadja)",
|
||||||
|
"tool_eyedropper": "Kapalka — vzemi barvo s platna",
|
||||||
|
"clear": "Počisti",
|
||||||
|
"clear_hint": "Zamenjaj s prazno sliko",
|
||||||
|
"clear_title": "Zamenjaj s praznim platnom?",
|
||||||
|
"clear_confirm": "Shranjena datoteka PNG in vse poteze v tej seji bodo zamenjane s prazno belo sliko. Tega ni mogoče razveljaviti."
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "Izbrišem \"{{name}}\"?",
|
"confirm_delete": "Izbrišem \"{{name}}\"?",
|
||||||
"upload_failed": "Nalaganje datoteke ni uspelo",
|
"upload_failed": "Nalaganje datoteke ni uspelo",
|
||||||
"no_valid_files": "Ni najdenih veljavnih datotek. Podprto: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "Ni najdenih veljavnih datotek. Podprto: JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "Napaka pri premikanju zapisa.",
|
"failed_note": "Napaka pri premikanju zapisa.",
|
||||||
"failed_folder": "Napaka pri premikanju mape.",
|
"failed_folder": "Napaka pri premikanju mape.",
|
||||||
"failed_media": "Napaka pri premikanju medijske datoteke."
|
"failed_media": "Napaka pri premikanju medijske datoteke."
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "Prejšnje (Shift+F3)",
|
"previous": "Prejšnje (Shift+F3)",
|
||||||
"next": "Naslednje (F3)",
|
"next": "Naslednje (F3)",
|
||||||
|
|
@ -248,22 +244,18 @@
|
||||||
"no_results": "Nobena beležka ne vsebuje \"{{query}}\"",
|
"no_results": "Nobena beležka ne vsebuje \"{{query}}\"",
|
||||||
"searching": "Iskanje \"{{query}}\"..."
|
"searching": "Iskanje \"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "Tema"
|
"title": "Tema"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "Jezik"
|
"title": "Jezik"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "Poudarjanje sintakse v urejevalniku",
|
"title": "Poudarjanje sintakse v urejevalniku",
|
||||||
"description": "Obarvaj markdown sintakso v urejevalniku",
|
"description": "Obarvaj markdown sintakso v urejevalniku",
|
||||||
"enable": "Omogoči poudarjanje sintakse",
|
"enable": "Omogoči poudarjanje sintakse",
|
||||||
"disable": "Onemogoči poudarjanje sintakse"
|
"disable": "Onemogoči poudarjanje sintakse"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "Račun",
|
"account": "Račun",
|
||||||
"logout": "Odjava",
|
"logout": "Odjava",
|
||||||
|
|
@ -274,7 +266,6 @@
|
||||||
"tab_inserts_tab": "Tipka Tab vstavi tabulator",
|
"tab_inserts_tab": "Tipka Tab vstavi tabulator",
|
||||||
"tab_inserts_tab_desc": "Pritisnite Tab za vstavljanje tabulatorja namesto premikanja fokusa"
|
"tab_inserts_tab_desc": "Pritisnite Tab za vstavljanje tabulatorja namesto premikanja fokusa"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "Domov",
|
"title": "Domov",
|
||||||
"welcome": "Dobrodošli v NoteDiscovery",
|
"welcome": "Dobrodošli v NoteDiscovery",
|
||||||
|
|
@ -287,7 +278,6 @@
|
||||||
"folder_singular": "mapa",
|
"folder_singular": "mapa",
|
||||||
"folder_plural": "mape"
|
"folder_plural": "mape"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "Krepko",
|
"bold": "Krepko",
|
||||||
"italic": "Ležeče",
|
"italic": "Ležeče",
|
||||||
|
|
@ -303,20 +293,17 @@
|
||||||
"checkbox": "Potrditveno polje",
|
"checkbox": "Potrditveno polje",
|
||||||
"table": "Tabela"
|
"table": "Tabela"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "Ime vsebuje prepovedane znake: {{chars}}",
|
"forbidden_chars": "Ime vsebuje prepovedane znake: {{chars}}",
|
||||||
"reserved_name": "To ime je rezervirano s strani operacijskega sistema.",
|
"reserved_name": "To ime je rezervirano s strani operacijskega sistema.",
|
||||||
"invalid_dot": "Ime ne more biti le pika.",
|
"invalid_dot": "Ime ne more biti le pika.",
|
||||||
"trailing_dot_space": "Ime se ne more končati s piko ali presledkom."
|
"trailing_dot_space": "Ime se ne more končati s piko ali presledkom."
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "Podprite ta projekt",
|
"enjoying_demo": "Podprite ta projekt",
|
||||||
"deploy_own": "Namestite svojo instanco",
|
"deploy_own": "Namestite svojo instanco",
|
||||||
"thank_you": "Hvala za podporo! 💚"
|
"thank_you": "Hvala za podporo! 💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "DEMO NAČIN",
|
"title": "DEMO NAČIN",
|
||||||
"warning": "Vsebina se dnevno ponastavi. Spremembe lahko prepišejo drugi uporabniki."
|
"warning": "Vsebina se dnevno ponastavi. Spremembe lahko prepišejo drugi uporabniki."
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
"name": "Chinese (Simplified)",
|
"name": "Chinese (Simplified)",
|
||||||
"flag": "🇨🇳"
|
"flag": "🇨🇳"
|
||||||
},
|
},
|
||||||
|
|
||||||
"app": {
|
"app": {
|
||||||
"tagline": "您的自托管知识库"
|
"tagline": "您的自托管知识库"
|
||||||
},
|
},
|
||||||
|
|
||||||
"common": {
|
"common": {
|
||||||
"save": "保存",
|
"save": "保存",
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
|
|
@ -28,12 +26,10 @@
|
||||||
"copy_to_clipboard": "复制到剪贴板",
|
"copy_to_clipboard": "复制到剪贴板",
|
||||||
"failed": "{{action}} 失败。请重试。"
|
"failed": "{{action}} 失败。请重试。"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toast": {
|
"toast": {
|
||||||
"region_label": "通知",
|
"region_label": "通知",
|
||||||
"dismiss": "关闭"
|
"dismiss": "关闭"
|
||||||
},
|
},
|
||||||
|
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"title": "文件",
|
"title": "文件",
|
||||||
"favorites_title": "收藏夹",
|
"favorites_title": "收藏夹",
|
||||||
|
|
@ -42,6 +38,7 @@
|
||||||
"new_note": "新建笔记",
|
"new_note": "新建笔记",
|
||||||
"new_folder": "新建文件夹",
|
"new_folder": "新建文件夹",
|
||||||
"new_from_template": "从模板新建",
|
"new_from_template": "从模板新建",
|
||||||
|
"new_drawing": "新建绘图",
|
||||||
"rename_folder": "重命名文件夹",
|
"rename_folder": "重命名文件夹",
|
||||||
"delete_folder": "删除文件夹",
|
"delete_folder": "删除文件夹",
|
||||||
"search_placeholder": "搜索笔记...",
|
"search_placeholder": "搜索笔记...",
|
||||||
|
|
@ -71,7 +68,6 @@
|
||||||
"settings_title": "设置",
|
"settings_title": "设置",
|
||||||
"filtered_notes": "筛选的笔记"
|
"filtered_notes": "筛选的笔记"
|
||||||
},
|
},
|
||||||
|
|
||||||
"editor": {
|
"editor": {
|
||||||
"placeholder": "开始用 Markdown 写作...",
|
"placeholder": "开始用 Markdown 写作...",
|
||||||
"drop_hint": "💡 拖放到此处以插入到光标位置...",
|
"drop_hint": "💡 拖放到此处以插入到光标位置...",
|
||||||
|
|
@ -84,7 +80,6 @@
|
||||||
"hours_ago": "{{count}}小时前",
|
"hours_ago": "{{count}}小时前",
|
||||||
"days_ago": "{{count}}天前"
|
"days_ago": "{{count}}天前"
|
||||||
},
|
},
|
||||||
|
|
||||||
"notes": {
|
"notes": {
|
||||||
"confirm_delete": "删除 \"{{name}}\"?",
|
"confirm_delete": "删除 \"{{name}}\"?",
|
||||||
"already_exists": "此位置已存在名为 \"{{name}}\" 的笔记。\n请选择一个不同的名称。",
|
"already_exists": "此位置已存在名为 \"{{name}}\" 的笔记。\n请选择一个不同的名称。",
|
||||||
|
|
@ -100,7 +95,6 @@
|
||||||
"no_content": "没有可导出的笔记内容",
|
"no_content": "没有可导出的笔记内容",
|
||||||
"open_first": "请先打开一篇笔记,然后再上传图片。"
|
"open_first": "请先打开一篇笔记,然后再上传图片。"
|
||||||
},
|
},
|
||||||
|
|
||||||
"folders": {
|
"folders": {
|
||||||
"confirm_delete": "⚠️ 警告 ⚠️\n\n您确定要删除文件夹 \"{{name}}\" 吗?\n\n这将永久删除:\n• 此文件夹内的所有笔记\n• 所有子文件夹及其内容\n\n此操作无法撤销!",
|
"confirm_delete": "⚠️ 警告 ⚠️\n\n您确定要删除文件夹 \"{{name}}\" 吗?\n\n这将永久删除:\n• 此文件夹内的所有笔记\n• 所有子文件夹及其内容\n\n此操作无法撤销!",
|
||||||
"already_exists": "此位置已存在名为 \"{{name}}\" 的文件夹。\n请选择一个不同的名称。",
|
"already_exists": "此位置已存在名为 \"{{name}}\" 的文件夹。\n请选择一个不同的名称。",
|
||||||
|
|
@ -117,26 +111,24 @@
|
||||||
"cannot_move_into_self": "无法将文件夹移动到其自身或其子文件夹中。",
|
"cannot_move_into_self": "无法将文件夹移动到其自身或其子文件夹中。",
|
||||||
"empty": "空"
|
"empty": "空"
|
||||||
},
|
},
|
||||||
|
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"undo": "撤销 (Ctrl+Z)",
|
"undo": "撤销 (Ctrl+Z)",
|
||||||
"redo": "重做 (Ctrl+Y)",
|
"redo": "重做 (Ctrl+Y)",
|
||||||
"delete_note": "删除笔记",
|
"delete_note": "删除笔记",
|
||||||
"delete_image": "删除图片",
|
"delete_image": "删除图片",
|
||||||
|
"delete_drawing": "删除绘图",
|
||||||
"export_html": "导出为 HTML",
|
"export_html": "导出为 HTML",
|
||||||
"print_preview": "打印预览",
|
"print_preview": "打印预览",
|
||||||
"copy_link": "复制链接到剪贴板",
|
"copy_link": "复制链接到剪贴板",
|
||||||
"add_favorite": "添加到收藏夹",
|
"add_favorite": "添加到收藏夹",
|
||||||
"remove_favorite": "从收藏夹移除"
|
"remove_favorite": "从收藏夹移除"
|
||||||
},
|
},
|
||||||
|
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"title": "禅模式",
|
"title": "禅模式",
|
||||||
"tooltip": "禅模式 (Ctrl+Alt+Z)",
|
"tooltip": "禅模式 (Ctrl+Alt+Z)",
|
||||||
"exit": "退出禅模式",
|
"exit": "退出禅模式",
|
||||||
"exit_hint": "退出禅模式 (Esc)"
|
"exit_hint": "退出禅模式 (Esc)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"share": {
|
"share": {
|
||||||
"button_tooltip": "分享笔记",
|
"button_tooltip": "分享笔记",
|
||||||
"modal_title": "分享笔记",
|
"modal_title": "分享笔记",
|
||||||
|
|
@ -149,9 +141,10 @@
|
||||||
"error_creating": "创建分享链接失败:{{error}}",
|
"error_creating": "创建分享链接失败:{{error}}",
|
||||||
"error_revoking": "撤销分享链接失败:{{error}}",
|
"error_revoking": "撤销分享链接失败:{{error}}",
|
||||||
"show_qr": "显示二维码",
|
"show_qr": "显示二维码",
|
||||||
"hide_qr": "隐藏二维码"
|
"hide_qr": "隐藏二维码",
|
||||||
|
"panel_title": "已分享",
|
||||||
|
"no_shared": "暂无已分享的笔记"
|
||||||
},
|
},
|
||||||
|
|
||||||
"quick_switcher": {
|
"quick_switcher": {
|
||||||
"placeholder": "搜索笔记...",
|
"placeholder": "搜索笔记...",
|
||||||
"no_results": "无匹配结果",
|
"no_results": "无匹配结果",
|
||||||
|
|
@ -160,7 +153,6 @@
|
||||||
"open": "打开",
|
"open": "打开",
|
||||||
"close": "关闭"
|
"close": "关闭"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tags": {
|
"tags": {
|
||||||
"title": "标签",
|
"title": "标签",
|
||||||
"no_tags": "未找到标签",
|
"no_tags": "未找到标签",
|
||||||
|
|
@ -169,13 +161,11 @@
|
||||||
"clear_all": "清除所有标签过滤器",
|
"clear_all": "清除所有标签过滤器",
|
||||||
"filter_by": "按 {{tag}} 过滤 ({{count}} 条笔记)"
|
"filter_by": "按 {{tag}} 过滤 ({{count}} 条笔记)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"outline": {
|
"outline": {
|
||||||
"title": "大纲",
|
"title": "大纲",
|
||||||
"no_headings": "未找到标题",
|
"no_headings": "未找到标题",
|
||||||
"hint": "使用 # 语法添加标题"
|
"hint": "使用 # 语法添加标题"
|
||||||
},
|
},
|
||||||
|
|
||||||
"backlinks": {
|
"backlinks": {
|
||||||
"title": "反向链接",
|
"title": "反向链接",
|
||||||
"no_backlinks": "未找到反向链接",
|
"no_backlinks": "未找到反向链接",
|
||||||
|
|
@ -183,21 +173,18 @@
|
||||||
"select_note": "选择一个笔记以查看反向链接",
|
"select_note": "选择一个笔记以查看反向链接",
|
||||||
"more_refs": "更多"
|
"more_refs": "更多"
|
||||||
},
|
},
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"words": "字数",
|
"words": "字数",
|
||||||
"reading_time": "~{{minutes}}分钟阅读",
|
"reading_time": "~{{minutes}}分钟阅读",
|
||||||
"links": "{{count}} 个链接",
|
"links": "{{count}} 个链接",
|
||||||
"click_details": "▼ 点击查看详情"
|
"click_details": "▼ 点击查看详情"
|
||||||
},
|
},
|
||||||
|
|
||||||
"graph": {
|
"graph": {
|
||||||
"title": "图谱",
|
"title": "图谱",
|
||||||
"empty": "无连接可显示",
|
"empty": "无连接可显示",
|
||||||
"markdown_links": "Markdown 链接",
|
"markdown_links": "Markdown 链接",
|
||||||
"click_hint": "点击:选择 • 双击:打开"
|
"click_hint": "点击:选择 • 双击:打开"
|
||||||
},
|
},
|
||||||
|
|
||||||
"templates": {
|
"templates": {
|
||||||
"title": "模板",
|
"title": "模板",
|
||||||
"select": "选择一个模板...",
|
"select": "选择一个模板...",
|
||||||
|
|
@ -211,11 +198,9 @@
|
||||||
"available_placeholders": "可用占位符",
|
"available_placeholders": "可用占位符",
|
||||||
"create_note": "创建笔记"
|
"create_note": "创建笔记"
|
||||||
},
|
},
|
||||||
|
|
||||||
"export": {
|
"export": {
|
||||||
"failed": "导出 HTML 失败:{{error}}"
|
"failed": "导出 HTML 失败:{{error}}"
|
||||||
},
|
},
|
||||||
|
|
||||||
"login": {
|
"login": {
|
||||||
"title": "登录",
|
"title": "登录",
|
||||||
"tagline": "您的自托管知识库",
|
"tagline": "您的自托管知识库",
|
||||||
|
|
@ -224,20 +209,31 @@
|
||||||
"footer": "🔒 安全且自托管",
|
"footer": "🔒 安全且自托管",
|
||||||
"error_incorrect_password": "密码错误。请重试。"
|
"error_incorrect_password": "密码错误。请重试。"
|
||||||
},
|
},
|
||||||
|
"drawing": {
|
||||||
|
"tool_freehand": "铅笔 — 自由绘制",
|
||||||
|
"tool_line": "直线",
|
||||||
|
"tool_rect": "矩形",
|
||||||
|
"tool_ellipse": "圆形",
|
||||||
|
"color": "颜色",
|
||||||
|
"width": "线条粗细",
|
||||||
|
"tool_eraser": "橡皮擦(使用背景色绘制)",
|
||||||
|
"tool_eyedropper": "吸管 — 从画布取色",
|
||||||
|
"clear": "清除",
|
||||||
|
"clear_hint": "替换为空白图像",
|
||||||
|
"clear_title": "替换为空白画布?",
|
||||||
|
"clear_confirm": "已保存的 PNG 和本会话中的笔划都将被替换为空白白色图像,且无法撤销。"
|
||||||
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"confirm_delete": "删除 \"{{name}}\"?",
|
"confirm_delete": "删除 \"{{name}}\"?",
|
||||||
"upload_failed": "上传文件失败",
|
"upload_failed": "上传文件失败",
|
||||||
"no_valid_files": "未找到有效文件。支持:JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
"no_valid_files": "未找到有效文件。支持:JPG, PNG, GIF, WebP, MP3, MP4, PDF",
|
||||||
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
"formats": "JPG, PNG, GIF, WebP, MP3, MP4, PDF"
|
||||||
},
|
},
|
||||||
|
|
||||||
"move": {
|
"move": {
|
||||||
"failed_note": "移动笔记失败。",
|
"failed_note": "移动笔记失败。",
|
||||||
"failed_folder": "移动文件夹失败。",
|
"failed_folder": "移动文件夹失败。",
|
||||||
"failed_media": "移动媒体文件失败。"
|
"failed_media": "移动媒体文件失败。"
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": {
|
"search": {
|
||||||
"previous": "上一个 (Shift+F3)",
|
"previous": "上一个 (Shift+F3)",
|
||||||
"next": "下一个 (F3)",
|
"next": "下一个 (F3)",
|
||||||
|
|
@ -248,22 +244,18 @@
|
||||||
"no_results": "没有笔记包含\"{{query}}\"",
|
"no_results": "没有笔记包含\"{{query}}\"",
|
||||||
"searching": "正在搜索\"{{query}}\"..."
|
"searching": "正在搜索\"{{query}}\"..."
|
||||||
},
|
},
|
||||||
|
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "主题"
|
"title": "主题"
|
||||||
},
|
},
|
||||||
|
|
||||||
"language": {
|
"language": {
|
||||||
"title": "语言"
|
"title": "语言"
|
||||||
},
|
},
|
||||||
|
|
||||||
"syntax_highlight": {
|
"syntax_highlight": {
|
||||||
"title": "编辑器语法高亮",
|
"title": "编辑器语法高亮",
|
||||||
"description": "在编辑器中为 Markdown 语法着色",
|
"description": "在编辑器中为 Markdown 语法着色",
|
||||||
"enable": "启用语法高亮",
|
"enable": "启用语法高亮",
|
||||||
"disable": "禁用语法高亮"
|
"disable": "禁用语法高亮"
|
||||||
},
|
},
|
||||||
|
|
||||||
"settings": {
|
"settings": {
|
||||||
"account": "账户",
|
"account": "账户",
|
||||||
"logout": "登出",
|
"logout": "登出",
|
||||||
|
|
@ -274,7 +266,6 @@
|
||||||
"tab_inserts_tab": "Tab键插入制表符",
|
"tab_inserts_tab": "Tab键插入制表符",
|
||||||
"tab_inserts_tab_desc": "按Tab键插入制表符而不是切换焦点"
|
"tab_inserts_tab_desc": "按Tab键插入制表符而不是切换焦点"
|
||||||
},
|
},
|
||||||
|
|
||||||
"homepage": {
|
"homepage": {
|
||||||
"title": "首页",
|
"title": "首页",
|
||||||
"welcome": "欢迎使用 NoteDiscovery",
|
"welcome": "欢迎使用 NoteDiscovery",
|
||||||
|
|
@ -287,7 +278,6 @@
|
||||||
"folder_singular": "文件夹",
|
"folder_singular": "文件夹",
|
||||||
"folder_plural": "文件夹"
|
"folder_plural": "文件夹"
|
||||||
},
|
},
|
||||||
|
|
||||||
"format": {
|
"format": {
|
||||||
"bold": "粗体",
|
"bold": "粗体",
|
||||||
"italic": "斜体",
|
"italic": "斜体",
|
||||||
|
|
@ -303,23 +293,19 @@
|
||||||
"checkbox": "复选框",
|
"checkbox": "复选框",
|
||||||
"table": "表格"
|
"table": "表格"
|
||||||
},
|
},
|
||||||
|
|
||||||
"validation": {
|
"validation": {
|
||||||
"forbidden_chars": "名称包含禁止的字符:{{chars}}",
|
"forbidden_chars": "名称包含禁止的字符:{{chars}}",
|
||||||
"reserved_name": "此名称被操作系统保留。",
|
"reserved_name": "此名称被操作系统保留。",
|
||||||
"invalid_dot": "名称不能只是一个点。",
|
"invalid_dot": "名称不能只是一个点。",
|
||||||
"trailing_dot_space": "名称不能以点或空格结尾。"
|
"trailing_dot_space": "名称不能以点或空格结尾。"
|
||||||
},
|
},
|
||||||
|
|
||||||
"support": {
|
"support": {
|
||||||
"enjoying_demo": "支持此项目",
|
"enjoying_demo": "支持此项目",
|
||||||
"deploy_own": "部署您自己的实例",
|
"deploy_own": "部署您自己的实例",
|
||||||
"thank_you": "感谢您的支持!💚"
|
"thank_you": "感谢您的支持!💚"
|
||||||
},
|
},
|
||||||
|
|
||||||
"demo": {
|
"demo": {
|
||||||
"title": "演示模式",
|
"title": "演示模式",
|
||||||
"warning": "内容每日重置。您的更改可能被其他用户覆盖。"
|
"warning": "内容每日重置。您的更改可能被其他用户覆盖。"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue