Merge pull request #596 from christianlouis/copilot/refactor-template-localization
fix(i18n): wire _ into all Jinja2 instances, sync translation files, fix pipelines.html orphan tag
This commit is contained in:
@@ -30,6 +30,7 @@ from app.auth import require_login
|
|||||||
from app.config import settings
|
from app.config import settings
|
||||||
from app.database import get_db
|
from app.database import get_db
|
||||||
from app.models import SubscriptionPlan, UserProfile
|
from app.models import SubscriptionPlan, UserProfile
|
||||||
|
from app.utils.i18n import translate as _translate
|
||||||
from app.utils.user_scope import get_current_owner_id
|
from app.utils.user_scope import get_current_owner_id
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -37,6 +38,7 @@ router = APIRouter(prefix="/billing", tags=["billing"])
|
|||||||
|
|
||||||
_templates_dir = pathlib.Path(__file__).parents[2] / "frontend" / "templates"
|
_templates_dir = pathlib.Path(__file__).parents[2] / "frontend" / "templates"
|
||||||
_templates = Jinja2Templates(directory=str(_templates_dir))
|
_templates = Jinja2Templates(directory=str(_templates_dir))
|
||||||
|
_templates.env.globals["_"] = lambda key, **kwargs: _translate(key, "en", **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def _get_stripe() -> stripe.StripeClient | None:
|
def _get_stripe() -> stripe.StripeClient | None:
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ from starlette.responses import RedirectResponse
|
|||||||
from app.config import settings
|
from app.config import settings
|
||||||
from app.database import get_db
|
from app.database import get_db
|
||||||
from app.models import LocalUser, UserProfile
|
from app.models import LocalUser, UserProfile
|
||||||
|
from app.utils.i18n import translate as _translate
|
||||||
from app.utils.local_auth import (
|
from app.utils.local_auth import (
|
||||||
build_session_user,
|
build_session_user,
|
||||||
generate_token,
|
generate_token,
|
||||||
@@ -41,6 +42,7 @@ router = APIRouter(tags=["local-auth"])
|
|||||||
|
|
||||||
_templates_dir = pathlib.Path(__file__).parents[2] / "frontend" / "templates"
|
_templates_dir = pathlib.Path(__file__).parents[2] / "frontend" / "templates"
|
||||||
templates = Jinja2Templates(directory=str(_templates_dir))
|
templates = Jinja2Templates(directory=str(_templates_dir))
|
||||||
|
templates.env.globals["_"] = lambda key, **kwargs: _translate(key, "en", **kwargs)
|
||||||
|
|
||||||
DbSession = Annotated[Session, Depends(get_db)]
|
DbSession = Annotated[Session, Depends(get_db)]
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ from app.middleware.audit_log import get_client_ip
|
|||||||
# Guards at call-sites ensure they are never *called* in single-user mode.
|
# Guards at call-sites ensure they are never *called* in single-user mode.
|
||||||
from app.models import LocalUser as _LocalUser
|
from app.models import LocalUser as _LocalUser
|
||||||
from app.models import UserProfile as _UserProfile
|
from app.models import UserProfile as _UserProfile
|
||||||
|
from app.utils.i18n import translate as _translate
|
||||||
from app.utils.local_auth import build_session_user as _build_session_user
|
from app.utils.local_auth import build_session_user as _build_session_user
|
||||||
from app.utils.local_auth import verify_password as _verify_password
|
from app.utils.local_auth import verify_password as _verify_password
|
||||||
|
|
||||||
@@ -34,6 +35,7 @@ AUTH_ENABLED = settings.auth_enabled
|
|||||||
# Set up templates for authentication
|
# Set up templates for authentication
|
||||||
templates_dir = pathlib.Path(__file__).parents[1] / "frontend" / "templates"
|
templates_dir = pathlib.Path(__file__).parents[1] / "frontend" / "templates"
|
||||||
templates = Jinja2Templates(directory=str(templates_dir))
|
templates = Jinja2Templates(directory=str(templates_dir))
|
||||||
|
templates.env.globals["_"] = lambda key, **kwargs: _translate(key, "en", **kwargs)
|
||||||
|
|
||||||
# Configure OAuth provider if credentials are provided
|
# Configure OAuth provider if credentials are provided
|
||||||
OAUTH_CONFIGURED = False
|
OAUTH_CONFIGURED = False
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}404 - Not Found{% endblock %}
|
{% block title %}{{ _("error.404_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="flex flex-col items-center justify-center text-center px-4 py-16">
|
<div class="flex flex-col items-center justify-center text-center px-4 py-16">
|
||||||
<div class="max-w-xl">
|
<div class="max-w-xl">
|
||||||
<h1 class="text-7xl font-extrabold text-blue-600 mb-6">404</h1>
|
<h1 class="text-7xl font-extrabold text-blue-600 mb-6">{{ _("error.404_code") }}</h1>
|
||||||
<h2 class="text-3xl font-bold text-gray-800 mb-4">Oops, we couldn’t find that page!</h2>
|
<h2 class="text-3xl font-bold text-gray-800 mb-4">{{ _("error.404_heading") }}</h2>
|
||||||
<p class="text-gray-600 mb-8">
|
<p class="text-gray-600 mb-8">
|
||||||
It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.
|
{{ _("error.404_message") }}
|
||||||
</p>
|
</p>
|
||||||
<a href="/" class="inline-block bg-blue-500 hover:bg-blue-600 text-white font-semibold py-3 px-6 rounded-lg transition-colors">
|
<a href="/" class="inline-block bg-blue-500 hover:bg-blue-600 text-white font-semibold py-3 px-6 rounded-lg transition-colors">
|
||||||
← Return Home
|
← {{ _("error.404_home") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Server Error - DocuElevate{% endblock %}
|
{% block title %}{{ _("error.500_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="relative isolate px-6 pt-14 lg:px-8">
|
<div class="relative isolate px-6 pt-14 lg:px-8">
|
||||||
@@ -7,27 +7,27 @@
|
|||||||
<div class="mx-auto max-w-3xl py-12">
|
<div class="mx-auto max-w-3xl py-12">
|
||||||
<img
|
<img
|
||||||
src="/static/explosion.jpg"
|
src="/static/explosion.jpg"
|
||||||
alt="Illustration of a server error"
|
alt="{{ _('error.500_img_alt') }}"
|
||||||
class="mx-auto rounded-xl shadow-xl h-[300px] w-full object-cover"
|
class="mx-auto rounded-xl shadow-xl h-[300px] w-full object-cover"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mx-auto max-w-3xl text-center">
|
<div class="mx-auto max-w-3xl text-center">
|
||||||
<h1 class="text-7xl font-bold text-red-500">500</h1>
|
<h1 class="text-7xl font-bold text-red-500">{{ _("error.500_code") }}</h1>
|
||||||
<p class="mt-4 text-4xl font-semibold tracking-tight text-gray-900">
|
<p class="mt-4 text-4xl font-semibold tracking-tight text-gray-900">
|
||||||
Oops! Something Went Wrong.
|
{{ _("error.500_heading") }}
|
||||||
</p>
|
</p>
|
||||||
<p class="mt-4 text-lg leading-8 text-gray-600">
|
<p class="mt-4 text-lg leading-8 text-gray-600">
|
||||||
Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?
|
{{ _("error.500_message1") }}
|
||||||
</p>
|
</p>
|
||||||
<p class="mt-2 text-lg leading-8 text-gray-600">
|
<p class="mt-2 text-lg leading-8 text-gray-600">
|
||||||
We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.
|
{{ _("error.500_message2") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% if exc %}
|
{% if exc %}
|
||||||
<details class="mt-8 bg-gray-100 rounded-lg p-4 text-left shadow-md">
|
<details class="mt-8 bg-gray-100 rounded-lg p-4 text-left shadow-md">
|
||||||
<summary class="cursor-pointer font-medium text-blue-600 hover:text-blue-700">
|
<summary class="cursor-pointer font-medium text-blue-600 hover:text-blue-700">
|
||||||
Show Debug Info
|
{{ _("error.500_debug_info") }}
|
||||||
</summary>
|
</summary>
|
||||||
<pre class="mt-4 text-sm text-gray-700 overflow-auto">{{ exc }}</pre>
|
<pre class="mt-4 text-sm text-gray-700 overflow-auto">{{ exc }}</pre>
|
||||||
</details>
|
</details>
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
<div class="mt-10">
|
<div class="mt-10">
|
||||||
<a href="/" class="inline-block bg-blue-600 px-6 py-3 rounded-md text-white font-semibold shadow-md hover:bg-blue-700 transition-colors">
|
<a href="/" class="inline-block bg-blue-600 px-6 py-3 rounded-md text-white font-semibold shadow-md hover:bg-blue-700 transition-colors">
|
||||||
← Go Home
|
← {{ _("error.500_home") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,69 +1,63 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}About DocuElevate{% endblock %}
|
{% block title %}{{ _("about.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container mx-auto px-4 py-8">
|
<div class="container mx-auto px-4 py-8">
|
||||||
<h1 class="text-4xl font-bold mb-4">About DocuElevate</h1>
|
<h1 class="text-4xl font-bold mb-4">{{ _("about.heading") }}</h1>
|
||||||
<p class="text-gray-700 mb-6 leading-relaxed">
|
<p class="text-gray-700 mb-6 leading-relaxed">
|
||||||
Welcome to <strong>DocuElevate</strong> – your modern, intelligent solution for document processing!
|
{{ _("about.intro_pre") }}<strong>{{ _("app.name") }}</strong>{{ _("about.intro_post") }}
|
||||||
We've built DocuElevate to completely transform the way you handle your documents – from upload
|
|
||||||
to extraction, from processing to storage.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Our Story Section -->
|
<!-- Our Story Section -->
|
||||||
<section class="bg-white shadow rounded p-6 mb-8">
|
<section class="bg-white shadow rounded p-6 mb-8">
|
||||||
<h2 class="text-2xl font-semibold mb-2">Our Story</h2>
|
<h2 class="text-2xl font-semibold mb-2">{{ _("about.story_heading") }}</h2>
|
||||||
<p class="text-gray-600 mb-4">
|
<p class="text-gray-600 mb-4">
|
||||||
DocuElevate was created with one goal in mind: to simplify and streamline document management
|
{{ _("about.story_p1") }}
|
||||||
for everyone, whether you're a small startup or a large enterprise.
|
|
||||||
</p>
|
</p>
|
||||||
<p class="text-gray-600">
|
<p class="text-gray-600">
|
||||||
We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama,
|
{{ _("about.story_p2") }}
|
||||||
OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly
|
|
||||||
with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document
|
|
||||||
Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.
|
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Key Features Section - Updated with more comprehensive features -->
|
<!-- Key Features Section - Updated with more comprehensive features -->
|
||||||
<section class="bg-white shadow rounded p-6 mb-8">
|
<section class="bg-white shadow rounded p-6 mb-8">
|
||||||
<h2 class="text-2xl font-semibold mb-2">Key Features</h2>
|
<h2 class="text-2xl font-semibold mb-2">{{ _("about.features_heading") }}</h2>
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-medium text-lg text-gray-800">Document Processing</h3>
|
<h3 class="font-medium text-lg text-gray-800">{{ _("about.features_processing_heading") }}</h3>
|
||||||
<ul class="list-disc list-inside text-gray-600 ml-2">
|
<ul class="list-disc list-inside text-gray-600 ml-2">
|
||||||
<li>Simple and secure file uploads with drag & drop support</li>
|
<li>{{ _("about.features_processing_upload") }}</li>
|
||||||
<li>OCR powered by Azure Document Intelligence</li>
|
<li>{{ _("about.features_processing_ocr") }}</li>
|
||||||
<li>Automated metadata extraction using a pluggable AI provider</li>
|
<li>{{ _("about.features_processing_metadata") }}</li>
|
||||||
<li>PDF conversion for various file formats via Gotenberg</li>
|
<li>{{ _("about.features_processing_pdf") }}</li>
|
||||||
<li>Intelligent document classification and date extraction</li>
|
<li>{{ _("about.features_processing_classification") }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-medium text-lg text-gray-800">Integration & Storage</h3>
|
<h3 class="font-medium text-lg text-gray-800">{{ _("about.features_integration_heading") }}</h3>
|
||||||
<ul class="list-disc list-inside text-gray-600 ml-2">
|
<ul class="list-disc list-inside text-gray-600 ml-2">
|
||||||
<li>Multi-destination support (store documents in multiple locations)</li>
|
<li>{{ _("about.features_integration_multi_dest") }}</li>
|
||||||
<li>Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3</li>
|
<li>{{ _("about.features_integration_cloud") }}</li>
|
||||||
<li>Self-hosted options: Nextcloud, Paperless NGX, WebDAV</li>
|
<li>{{ _("about.features_integration_selfhosted") }}</li>
|
||||||
<li>Transfer protocols: FTP, SFTP, Email forwarding</li>
|
<li>{{ _("about.features_integration_protocols") }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-medium text-lg text-gray-800">Automation</h3>
|
<h3 class="font-medium text-lg text-gray-800">{{ _("about.features_automation_heading") }}</h3>
|
||||||
<ul class="list-disc list-inside text-gray-600 ml-2">
|
<ul class="list-disc list-inside text-gray-600 ml-2">
|
||||||
<li>IMAP inbox polling from multiple sources</li>
|
<li>{{ _("about.features_automation_imap") }}</li>
|
||||||
<li>Gmail and generic email account integration</li>
|
<li>{{ _("about.features_automation_gmail") }}</li>
|
||||||
<li>Automated document ingestion from various inputs</li>
|
<li>{{ _("about.features_automation_ingestion") }}</li>
|
||||||
<li>Background processing with Redis and Celery</li>
|
<li>{{ _("about.features_automation_background") }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-medium text-lg text-gray-800">Administration</h3>
|
<h3 class="font-medium text-lg text-gray-800">{{ _("about.features_admin_heading") }}</h3>
|
||||||
<ul class="list-disc list-inside text-gray-600 ml-2">
|
<ul class="list-disc list-inside text-gray-600 ml-2">
|
||||||
<li>Powerful REST API for programmatic access</li>
|
<li>{{ _("about.features_admin_api") }}</li>
|
||||||
<li>OAuth2 authentication support with Authentik</li>
|
<li>{{ _("about.features_admin_oauth2") }}</li>
|
||||||
<li>Highly configurable via environment variables</li>
|
<li>{{ _("about.features_admin_config") }}</li>
|
||||||
<li>Docker-ready for easy deployment and scaling</li>
|
<li>{{ _("about.features_admin_docker") }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -71,43 +65,43 @@
|
|||||||
|
|
||||||
<!-- Meet the Creator Section -->
|
<!-- Meet the Creator Section -->
|
||||||
<section class="bg-white shadow rounded p-6 mb-8">
|
<section class="bg-white shadow rounded p-6 mb-8">
|
||||||
<h2 class="text-2xl font-semibold mb-2">Meet the Creator</h2>
|
<h2 class="text-2xl font-semibold mb-2">{{ _("about.creator_heading") }}</h2>
|
||||||
<p class="text-gray-600">
|
<p class="text-gray-600">
|
||||||
DocuElevate is passionately developed by
|
{{ _("about.creator_pre") }}
|
||||||
<a href="https://www.christianlouis.de" target="_blank" class="text-blue-600 hover:underline">Christian Krakau-Louis</a>.
|
<a href="https://www.christianlouis.de" target="_blank" class="text-blue-600 hover:underline">{{ _("about.creator_name") }}</a>.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Privacy & Legal Section -->
|
<!-- Privacy & Legal Section -->
|
||||||
<section class="bg-white shadow rounded p-6 mb-8">
|
<section class="bg-white shadow rounded p-6 mb-8">
|
||||||
<h2 class="text-2xl font-semibold mb-2">Privacy & Legal</h2>
|
<h2 class="text-2xl font-semibold mb-2">{{ _("about.legal_heading") }}</h2>
|
||||||
<p class="text-gray-600 mb-4">
|
<p class="text-gray-600 mb-4">
|
||||||
We care about your privacy and data security. Please review our:
|
{{ _("about.legal_description") }}
|
||||||
</p>
|
</p>
|
||||||
<div class="flex space-x-4">
|
<div class="flex space-x-4">
|
||||||
<a href="/privacy" class="text-blue-600 hover:underline">Privacy Notice</a>
|
<a href="/privacy" class="text-blue-600 hover:underline">{{ _("about.legal_privacy") }}</a>
|
||||||
<a href="/license" class="text-blue-600 hover:underline">License Information</a>
|
<a href="/license" class="text-blue-600 hover:underline">{{ _("about.legal_license") }}</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Links Section -->
|
<!-- Links Section -->
|
||||||
<section class="bg-white shadow rounded p-6">
|
<section class="bg-white shadow rounded p-6">
|
||||||
<h2 class="text-2xl font-semibold mb-2">Get Involved</h2>
|
<h2 class="text-2xl font-semibold mb-2">{{ _("about.involved_heading") }}</h2>
|
||||||
<p class="text-gray-600 mb-4">
|
<p class="text-gray-600 mb-4">
|
||||||
Want to dive into the code, contribute ideas, or learn more about DocuElevate?
|
{{ _("about.involved_description") }}
|
||||||
</p>
|
</p>
|
||||||
<div class="flex flex-col space-y-3">
|
<div class="flex flex-col space-y-3">
|
||||||
<a href="https://github.com/christianlouis/DocuElevate" target="_blank" class="flex items-center space-x-2 text-blue-600 hover:text-blue-800">
|
<a href="https://github.com/christianlouis/DocuElevate" target="_blank" class="flex items-center space-x-2 text-blue-600 hover:text-blue-800">
|
||||||
<img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="GitHub Logo" class="h-6 w-6" />
|
<img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="{{ _('about.github_logo_alt') }}" class="h-6 w-6" />
|
||||||
<span>View DocuElevate on GitHub</span>
|
<span>{{ _("about.involved_github") }}</span>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://www.docuelevate.org" target="_blank" class="flex items-center space-x-2 text-blue-600 hover:text-blue-800">
|
<a href="https://www.docuelevate.org" target="_blank" class="flex items-center space-x-2 text-blue-600 hover:text-blue-800">
|
||||||
<i class="fas fa-globe h-6 w-6"></i>
|
<i class="fas fa-globe h-6 w-6"></i>
|
||||||
<span>Visit DocuElevate Website</span>
|
<span>{{ _("about.involved_website") }}</span>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://docuelevate.readthedocs.io" target="_blank" class="flex items-center space-x-2 text-blue-600 hover:text-blue-800">
|
<a href="https://docuelevate.readthedocs.io" target="_blank" class="flex items-center space-x-2 text-blue-600 hover:text-blue-800">
|
||||||
<i class="fas fa-book h-6 w-6"></i>
|
<i class="fas fa-book h-6 w-6"></i>
|
||||||
<span>Read the Documentation</span>
|
<span>{{ _("about.involved_docs") }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -1,32 +1,30 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block title %}API Tokens – DocuElevate{% endblock %}
|
{% block title %}{{ _("api_tokens.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div x-data="apiTokens()" x-init="loadTokens()" class="container mx-auto px-4 py-8 max-w-4xl">
|
<div x-data="apiTokens()" x-init="loadTokens()" class="container mx-auto px-4 py-8 max-w-4xl">
|
||||||
<header class="mb-8">
|
<header class="mb-8">
|
||||||
<h1 class="text-2xl font-bold text-gray-900 dark:text-white flex items-center gap-2">
|
<h1 class="text-2xl font-bold text-gray-900 dark:text-white flex items-center gap-2">
|
||||||
<i class="fas fa-key text-yellow-500" aria-hidden="true"></i>
|
<i class="fas fa-key text-yellow-500" aria-hidden="true"></i>
|
||||||
API Tokens
|
{{ _("api_tokens.heading") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="mt-2 text-gray-600 dark:text-gray-400 text-sm leading-relaxed max-w-2xl">
|
<p class="mt-2 text-gray-600 dark:text-gray-400 text-sm leading-relaxed max-w-2xl">
|
||||||
Create personal API tokens to interact with the DocuElevate API programmatically.
|
{{ _("api_tokens.intro") }}
|
||||||
Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload
|
|
||||||
or retrieve documents.
|
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- Create token section -->
|
<!-- Create token section -->
|
||||||
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 mb-6" aria-labelledby="create-token-heading">
|
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 mb-6" aria-labelledby="create-token-heading">
|
||||||
<h2 id="create-token-heading" class="text-lg font-semibold text-gray-900 dark:text-white mb-4">Create New Token</h2>
|
<h2 id="create-token-heading" class="text-lg font-semibold text-gray-900 dark:text-white mb-4">{{ _("api_tokens.create_heading") }}</h2>
|
||||||
<form @submit.prevent="createToken()" class="flex flex-col sm:flex-row gap-3">
|
<form @submit.prevent="createToken()" class="flex flex-col sm:flex-row gap-3">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<label for="token-name" class="sr-only">Token name</label>
|
<label for="token-name" class="sr-only">{{ _("api_tokens.token_name_label") }}</label>
|
||||||
<input
|
<input
|
||||||
id="token-name"
|
id="token-name"
|
||||||
type="text"
|
type="text"
|
||||||
x-model="newTokenName"
|
x-model="newTokenName"
|
||||||
placeholder="e.g. CI Pipeline, Webhook Upload, My Script"
|
placeholder="{{ _('api_tokens.token_name_placeholder') }}"
|
||||||
required
|
required
|
||||||
minlength="1"
|
minlength="1"
|
||||||
maxlength="255"
|
maxlength="255"
|
||||||
@@ -44,7 +42,7 @@
|
|||||||
style="min-height:40px; min-width:44px;"
|
style="min-height:40px; min-width:44px;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-plus mr-2" aria-hidden="true"></i>
|
<i class="fas fa-plus mr-2" aria-hidden="true"></i>
|
||||||
<span x-text="creating ? 'Creating…' : 'Create Token'"></span>
|
<span x-text="creating ? '{{ _('api_tokens.creating') }}' : '{{ _('api_tokens.create_token') }}'"></span>
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
@@ -54,9 +52,9 @@
|
|||||||
<div class="flex items-start gap-3">
|
<div class="flex items-start gap-3">
|
||||||
<i class="fas fa-check-circle text-green-600 dark:text-green-400 mt-0.5 text-lg" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-600 dark:text-green-400 mt-0.5 text-lg" aria-hidden="true"></i>
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<p class="font-semibold text-green-800 dark:text-green-200 text-sm">Token created successfully!</p>
|
<p class="font-semibold text-green-800 dark:text-green-200 text-sm">{{ _("api_tokens.token_created") }}</p>
|
||||||
<p class="text-green-700 dark:text-green-300 text-xs mt-1">
|
<p class="text-green-700 dark:text-green-300 text-xs mt-1">
|
||||||
Copy this token now — it will <strong>not be shown again</strong>.
|
{{ _("api_tokens.copy_warning_1") }} <strong>{{ _("api_tokens.copy_warning_2") }}</strong>.
|
||||||
</p>
|
</p>
|
||||||
<div class="mt-3 flex items-center gap-2">
|
<div class="mt-3 flex items-center gap-2">
|
||||||
<code
|
<code
|
||||||
@@ -72,10 +70,10 @@
|
|||||||
hover:bg-gray-200 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-indigo-500
|
hover:bg-gray-200 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-indigo-500
|
||||||
transition-colors"
|
transition-colors"
|
||||||
style="min-height:40px; min-width:44px;"
|
style="min-height:40px; min-width:44px;"
|
||||||
:aria-label="copied ? 'Copied!' : 'Copy token to clipboard'"
|
:aria-label="copied ? '{{ _('common.copied') }}' : '{{ _('api_tokens.copy_to_clipboard') }}'"
|
||||||
>
|
>
|
||||||
<i :class="copied ? 'fas fa-check text-green-600' : 'fas fa-copy'" aria-hidden="true"></i>
|
<i :class="copied ? 'fas fa-check text-green-600' : 'fas fa-copy'" aria-hidden="true"></i>
|
||||||
<span class="ml-1 hidden sm:inline" x-text="copied ? 'Copied!' : 'Copy'"></span>
|
<span class="ml-1 hidden sm:inline" x-text="copied ? '{{ _('common.copied') }}' : '{{ _('common.copy') }}'"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -88,11 +86,11 @@
|
|||||||
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 mb-6" aria-labelledby="usage-heading">
|
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 mb-6" aria-labelledby="usage-heading">
|
||||||
<h2 id="usage-heading" class="text-lg font-semibold text-gray-900 dark:text-white mb-3">
|
<h2 id="usage-heading" class="text-lg font-semibold text-gray-900 dark:text-white mb-3">
|
||||||
<i class="fas fa-code text-blue-500 mr-2" aria-hidden="true"></i>
|
<i class="fas fa-code text-blue-500 mr-2" aria-hidden="true"></i>
|
||||||
Usage Example
|
{{ _("api_tokens.usage_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
<p class="text-gray-600 dark:text-gray-400 text-sm mb-3">
|
<p class="text-gray-600 dark:text-gray-400 text-sm mb-3">
|
||||||
Use your API token in the <code class="bg-gray-100 dark:bg-gray-700 px-1 rounded text-xs">Authorization</code>
|
{{ _("api_tokens.usage_intro_pre") }} <code class="bg-gray-100 dark:bg-gray-700 px-1 rounded text-xs">Authorization</code>
|
||||||
header with any API request:
|
{{ _("api_tokens.usage_intro_post") }}
|
||||||
</p>
|
</p>
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<pre class="bg-gray-900 text-green-400 rounded-lg p-4 text-sm overflow-x-auto font-mono leading-relaxed"><code>curl -X POST "<span x-text="baseUrl"></span>/api/files/ui-upload" \
|
<pre class="bg-gray-900 text-green-400 rounded-lg p-4 text-sm overflow-x-auto font-mono leading-relaxed"><code>curl -X POST "<span x-text="baseUrl"></span>/api/files/ui-upload" \
|
||||||
@@ -104,7 +102,7 @@
|
|||||||
class="absolute top-2 right-2 px-2 py-1 bg-gray-700 text-gray-300 rounded text-xs hover:bg-gray-600
|
class="absolute top-2 right-2 px-2 py-1 bg-gray-700 text-gray-300 rounded text-xs hover:bg-gray-600
|
||||||
focus:outline-none focus:ring-2 focus:ring-indigo-500 transition-colors"
|
focus:outline-none focus:ring-2 focus:ring-indigo-500 transition-colors"
|
||||||
style="min-height:30px; min-width:30px;"
|
style="min-height:30px; min-width:30px;"
|
||||||
aria-label="Copy upload example to clipboard"
|
aria-label="{{ _('api_tokens.copy_upload_example') }}"
|
||||||
>
|
>
|
||||||
<i class="fas fa-copy" aria-hidden="true"></i>
|
<i class="fas fa-copy" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
@@ -114,14 +112,14 @@
|
|||||||
<!-- Tokens list -->
|
<!-- Tokens list -->
|
||||||
<section class="bg-white dark:bg-gray-800 shadow rounded-lg overflow-hidden" aria-labelledby="tokens-heading">
|
<section class="bg-white dark:bg-gray-800 shadow rounded-lg overflow-hidden" aria-labelledby="tokens-heading">
|
||||||
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
|
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
|
||||||
<h2 id="tokens-heading" class="text-lg font-semibold text-gray-900 dark:text-white">Your Tokens</h2>
|
<h2 id="tokens-heading" class="text-lg font-semibold text-gray-900 dark:text-white">{{ _("api_tokens.your_tokens") }}</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Loading state -->
|
<!-- Loading state -->
|
||||||
<template x-if="loading">
|
<template x-if="loading">
|
||||||
<div class="p-8 text-center text-gray-500 dark:text-gray-400">
|
<div class="p-8 text-center text-gray-500 dark:text-gray-400">
|
||||||
<i class="fas fa-spinner fa-spin text-2xl mb-2" aria-hidden="true"></i>
|
<i class="fas fa-spinner fa-spin text-2xl mb-2" aria-hidden="true"></i>
|
||||||
<p class="text-sm">Loading tokens…</p>
|
<p class="text-sm">{{ _("api_tokens.loading_tokens") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -129,24 +127,24 @@
|
|||||||
<template x-if="!loading && tokens.length === 0">
|
<template x-if="!loading && tokens.length === 0">
|
||||||
<div class="p-8 text-center text-gray-500 dark:text-gray-400">
|
<div class="p-8 text-center text-gray-500 dark:text-gray-400">
|
||||||
<i class="fas fa-key text-4xl mb-3 text-gray-300 dark:text-gray-600" aria-hidden="true"></i>
|
<i class="fas fa-key text-4xl mb-3 text-gray-300 dark:text-gray-600" aria-hidden="true"></i>
|
||||||
<p class="font-medium">No API tokens yet</p>
|
<p class="font-medium">{{ _("api_tokens.no_tokens_heading") }}</p>
|
||||||
<p class="text-sm mt-1">Create your first token above to get started.</p>
|
<p class="text-sm mt-1">{{ _("api_tokens.no_tokens_help") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- Tokens table -->
|
<!-- Tokens table -->
|
||||||
<template x-if="!loading && tokens.length > 0">
|
<template x-if="!loading && tokens.length > 0">
|
||||||
<div class="overflow-x-auto">
|
<div class="overflow-x-auto">
|
||||||
<table class="w-full text-sm" aria-label="API Tokens">
|
<table class="w-full text-sm" aria-label="{{ _('api_tokens.table_aria') }}">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="bg-gray-50 dark:bg-gray-750 text-left">
|
<tr class="bg-gray-50 dark:bg-gray-750 text-left">
|
||||||
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">Name</th>
|
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">{{ _("api_tokens.col_name") }}</th>
|
||||||
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">Token Prefix</th>
|
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">{{ _("api_tokens.col_prefix") }}</th>
|
||||||
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">Created</th>
|
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">{{ _("api_tokens.col_created") }}</th>
|
||||||
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">Last Used</th>
|
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">{{ _("api_tokens.col_last_used") }}</th>
|
||||||
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">Last IP</th>
|
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">{{ _("api_tokens.col_last_ip") }}</th>
|
||||||
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">Status</th>
|
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider">{{ _("common.status") }}</th>
|
||||||
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider sr-only">Actions</th>
|
<th scope="col" class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 uppercase text-xs tracking-wider sr-only">{{ _("common.actions") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="divide-y divide-gray-200 dark:divide-gray-700">
|
<tbody class="divide-y divide-gray-200 dark:divide-gray-700">
|
||||||
@@ -159,7 +157,7 @@
|
|||||||
<code class="bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded text-xs font-mono" x-text="token.token_prefix + '…'"></code>
|
<code class="bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded text-xs font-mono" x-text="token.token_prefix + '…'"></code>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-gray-500 dark:text-gray-400" x-text="formatDate(token.created_at)"></td>
|
<td class="px-6 py-4 whitespace-nowrap text-gray-500 dark:text-gray-400" x-text="formatDate(token.created_at)"></td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-gray-500 dark:text-gray-400" x-text="token.last_used_at ? formatDate(token.last_used_at) : 'Never'"></td>
|
<td class="px-6 py-4 whitespace-nowrap text-gray-500 dark:text-gray-400" x-text="token.last_used_at ? formatDate(token.last_used_at) : '{{ _('api_tokens.never') }}'"></td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-gray-500 dark:text-gray-400">
|
<td class="px-6 py-4 whitespace-nowrap text-gray-500 dark:text-gray-400">
|
||||||
<code x-show="token.last_used_ip" class="bg-gray-100 dark:bg-gray-700 px-2 py-0.5 rounded text-xs font-mono" x-text="token.last_used_ip"></code>
|
<code x-show="token.last_used_ip" class="bg-gray-100 dark:bg-gray-700 px-2 py-0.5 rounded text-xs font-mono" x-text="token.last_used_ip"></code>
|
||||||
<span x-show="!token.last_used_ip" class="text-gray-400">—</span>
|
<span x-show="!token.last_used_ip" class="text-gray-400">—</span>
|
||||||
@@ -168,7 +166,7 @@
|
|||||||
<span
|
<span
|
||||||
class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium"
|
class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium"
|
||||||
:class="token.is_active ? 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400' : 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400'"
|
:class="token.is_active ? 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400' : 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400'"
|
||||||
x-text="token.is_active ? 'Active' : 'Revoked'"
|
x-text="token.is_active ? '{{ _('api_tokens.status_active') }}' : '{{ _('api_tokens.status_revoked') }}'"
|
||||||
></span>
|
></span>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-right">
|
<td class="px-6 py-4 whitespace-nowrap text-right">
|
||||||
@@ -181,10 +179,10 @@
|
|||||||
dark:text-red-400 dark:hover:text-red-300 hover:bg-red-50 dark:hover:bg-red-900/20 rounded-md
|
dark:text-red-400 dark:hover:text-red-300 hover:bg-red-50 dark:hover:bg-red-900/20 rounded-md
|
||||||
focus:outline-none focus:ring-2 focus:ring-red-500 disabled:opacity-50 transition-colors"
|
focus:outline-none focus:ring-2 focus:ring-red-500 disabled:opacity-50 transition-colors"
|
||||||
style="min-height:36px; min-width:44px;"
|
style="min-height:36px; min-width:44px;"
|
||||||
:aria-label="'Revoke token ' + token.name"
|
:aria-label="'{{ _('api_tokens.revoke_prefix') }} ' + token.name"
|
||||||
>
|
>
|
||||||
<i :class="revoking === token.id ? 'fas fa-spinner fa-spin' : 'fas fa-trash-alt'" class="mr-1" aria-hidden="true"></i>
|
<i :class="revoking === token.id ? 'fas fa-spinner fa-spin' : 'fas fa-trash-alt'" class="mr-1" aria-hidden="true"></i>
|
||||||
Revoke
|
{{ _("api_tokens.revoke") }}
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block title %}Audit Logs - DocuElevate{% endblock %}
|
{% block title %}{{ _("audit.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div x-data="auditLogs()" x-init="fetchLogs()" class="container mx-auto px-4 py-8 max-w-7xl">
|
<div x-data="auditLogs()" x-init="fetchLogs()" class="container mx-auto px-4 py-8 max-w-7xl">
|
||||||
@@ -9,69 +9,69 @@
|
|||||||
<div class="flex flex-col md:flex-row md:items-center md:justify-between mb-6">
|
<div class="flex flex-col md:flex-row md:items-center md:justify-between mb-6">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="text-2xl font-bold text-gray-900 dark:text-white">
|
<h1 class="text-2xl font-bold text-gray-900 dark:text-white">
|
||||||
<i class="fas fa-shield-halved mr-2 text-indigo-600" aria-hidden="true"></i>Audit Logs
|
<i class="fas fa-shield-halved mr-2 text-indigo-600" aria-hidden="true"></i>{{ _("audit.title") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">
|
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">
|
||||||
Comprehensive, append-only record of all significant actions.
|
{{ _("audit.subtitle") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 md:mt-0 flex items-center gap-3">
|
<div class="mt-3 md:mt-0 flex items-center gap-3">
|
||||||
{% if siem_enabled %}
|
{% if siem_enabled %}
|
||||||
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800 dark:bg-green-800 dark:text-green-100"
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800 dark:bg-green-800 dark:text-green-100"
|
||||||
title="Events are being forwarded to {{ siem_transport|upper }}">
|
title="{{ _('audit.siem_enabled_title') ~ (siem_transport|upper) }}">
|
||||||
<i class="fas fa-tower-broadcast mr-1" aria-hidden="true"></i>SIEM: {{ siem_transport|upper }}
|
<i class="fas fa-tower-broadcast mr-1" aria-hidden="true"></i>SIEM: {{ siem_transport|upper }}
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300"
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300"
|
||||||
title="SIEM forwarding is disabled">
|
title="{{ _('audit.siem_disabled_title') }}">
|
||||||
<i class="fas fa-tower-broadcast mr-1" aria-hidden="true"></i>SIEM: Off
|
<i class="fas fa-tower-broadcast mr-1" aria-hidden="true"></i>{{ _("audit.siem_off") }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<button @click="fetchLogs()" class="inline-flex items-center px-3 py-1.5 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 dark:bg-gray-700 dark:text-gray-200 dark:border-gray-600 dark:hover:bg-gray-600 min-h-[44px] min-w-[44px]"
|
<button @click="fetchLogs()" class="inline-flex items-center px-3 py-1.5 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 dark:bg-gray-700 dark:text-gray-200 dark:border-gray-600 dark:hover:bg-gray-600 min-h-[44px] min-w-[44px]"
|
||||||
aria-label="Refresh audit logs">
|
aria-label="{{ _('audit.refresh_label') }}">
|
||||||
<i class="fas fa-arrows-rotate mr-1" aria-hidden="true"></i>Refresh
|
<i class="fas fa-arrows-rotate mr-1" aria-hidden="true"></i>{{ _("common.refresh") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Filters -->
|
<!-- Filters -->
|
||||||
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-4 mb-6" aria-label="Audit log filters">
|
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-4 mb-6" aria-label="{{ _('audit.filters_section_label') }}">
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
||||||
<div>
|
<div>
|
||||||
<label for="filter-action" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">Action</label>
|
<label for="filter-action" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">{{ _("audit.filter_action") }}</label>
|
||||||
<select id="filter-action" x-model="filters.action" @change="fetchLogs()"
|
<select id="filter-action" x-model="filters.action" @change="fetchLogs()"
|
||||||
class="w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-white text-sm">
|
class="w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-white text-sm">
|
||||||
<option value="">All actions</option>
|
<option value="">{{ _("audit.filter_all_actions") }}</option>
|
||||||
<template x-for="a in distinctActions" :key="a">
|
<template x-for="a in distinctActions" :key="a">
|
||||||
<option :value="a" x-text="a"></option>
|
<option :value="a" x-text="a"></option>
|
||||||
</template>
|
</template>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="filter-user" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">User</label>
|
<label for="filter-user" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">{{ _("audit.filter_user") }}</label>
|
||||||
<select id="filter-user" x-model="filters.user" @change="fetchLogs()"
|
<select id="filter-user" x-model="filters.user" @change="fetchLogs()"
|
||||||
class="w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-white text-sm">
|
class="w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-white text-sm">
|
||||||
<option value="">All users</option>
|
<option value="">{{ _("audit.filter_all_users") }}</option>
|
||||||
<template x-for="u in distinctUsers" :key="u">
|
<template x-for="u in distinctUsers" :key="u">
|
||||||
<option :value="u" x-text="u"></option>
|
<option :value="u" x-text="u"></option>
|
||||||
</template>
|
</template>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="filter-severity" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">Severity</label>
|
<label for="filter-severity" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">{{ _("audit.filter_severity") }}</label>
|
||||||
<select id="filter-severity" x-model="filters.severity" @change="fetchLogs()"
|
<select id="filter-severity" x-model="filters.severity" @change="fetchLogs()"
|
||||||
class="w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-white text-sm">
|
class="w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-white text-sm">
|
||||||
<option value="">All</option>
|
<option value="">{{ _("common.all") }}</option>
|
||||||
<option value="info">Info</option>
|
<option value="info">{{ _("common.info") }}</option>
|
||||||
<option value="warning">Warning</option>
|
<option value="warning">{{ _("common.warning") }}</option>
|
||||||
<option value="error">Error</option>
|
<option value="error">{{ _("common.error") }}</option>
|
||||||
<option value="critical">Critical</option>
|
<option value="critical">{{ _("audit.critical") }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="filter-resource" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">Resource Type</label>
|
<label for="filter-resource" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">{{ _("audit.filter_resource_type") }}</label>
|
||||||
<input id="filter-resource" type="text" x-model.debounce.300ms="filters.resource_type" @input="fetchLogs()"
|
<input id="filter-resource" type="text" x-model.debounce.300ms="filters.resource_type" @input="fetchLogs()"
|
||||||
placeholder="e.g. document, user"
|
placeholder="{{ _('audit.filter_resource_placeholder') }}"
|
||||||
class="w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-white text-sm min-h-[44px]">
|
class="w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-white text-sm min-h-[44px]">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -80,22 +80,22 @@
|
|||||||
<!-- Results summary -->
|
<!-- Results summary -->
|
||||||
<div class="flex items-center justify-between mb-3 text-sm text-gray-500 dark:text-gray-400" aria-live="polite">
|
<div class="flex items-center justify-between mb-3 text-sm text-gray-500 dark:text-gray-400" aria-live="polite">
|
||||||
<span x-show="!loading" x-text="total + ' event' + (total !== 1 ? 's' : '') + ' found'"></span>
|
<span x-show="!loading" x-text="total + ' event' + (total !== 1 ? 's' : '') + ' found'"></span>
|
||||||
<span x-show="loading"><i class="fas fa-spinner fa-spin mr-1" aria-hidden="true"></i>Loading…</span>
|
<span x-show="loading"><i class="fas fa-spinner fa-spin mr-1" aria-hidden="true"></i>{{ _("common.loading") }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Table -->
|
<!-- Table -->
|
||||||
<div class="bg-white dark:bg-gray-800 shadow rounded-lg overflow-hidden">
|
<div class="bg-white dark:bg-gray-800 shadow rounded-lg overflow-hidden">
|
||||||
<div class="overflow-x-auto">
|
<div class="overflow-x-auto">
|
||||||
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700" aria-label="Audit log events">
|
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700" aria-label="{{ _('audit.table_label') }}">
|
||||||
<thead class="bg-gray-50 dark:bg-gray-700">
|
<thead class="bg-gray-50 dark:bg-gray-700">
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Timestamp</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">{{ _("audit.col_timestamp") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Severity</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">{{ _("audit.filter_severity") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">User</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">{{ _("audit.filter_user") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Action</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">{{ _("audit.filter_action") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Resource</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">{{ _("audit.col_resource") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">IP</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">{{ _("audit.col_ip") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Details</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">{{ _("common.details") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="divide-y divide-gray-200 dark:divide-gray-700">
|
<tbody class="divide-y divide-gray-200 dark:divide-gray-700">
|
||||||
@@ -118,8 +118,8 @@
|
|||||||
<tr x-show="!loading && entries.length === 0">
|
<tr x-show="!loading && entries.length === 0">
|
||||||
<td colspan="7" class="px-4 py-8 text-center text-gray-400 dark:text-gray-500">
|
<td colspan="7" class="px-4 py-8 text-center text-gray-400 dark:text-gray-500">
|
||||||
<i class="fas fa-inbox text-3xl mb-2" aria-hidden="true"></i>
|
<i class="fas fa-inbox text-3xl mb-2" aria-hidden="true"></i>
|
||||||
<p class="text-lg">No audit events recorded yet.</p>
|
<p class="text-lg">{{ _("audit.no_events") }}</p>
|
||||||
<p class="text-sm mt-1">Significant actions (logins, document operations, settings changes) will appear here.</p>
|
<p class="text-sm mt-1">{{ _("audit.no_events_hint") }}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -128,17 +128,17 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Pagination -->
|
<!-- Pagination -->
|
||||||
<nav class="flex items-center justify-between mt-4" aria-label="Audit log pagination" x-show="total > filters.limit">
|
<nav class="flex items-center justify-between mt-4" aria-label="{{ _('audit.pagination_label') }}" x-show="total > filters.limit">
|
||||||
<button @click="prevPage()" :disabled="filters.offset === 0"
|
<button @click="prevPage()" :disabled="filters.offset === 0"
|
||||||
class="px-3 py-1.5 rounded-md text-sm border border-gray-300 dark:border-gray-600 disabled:opacity-50 min-h-[44px] min-w-[44px]"
|
class="px-3 py-1.5 rounded-md text-sm border border-gray-300 dark:border-gray-600 disabled:opacity-50 min-h-[44px] min-w-[44px]"
|
||||||
aria-label="Previous page">
|
aria-label="{{ _('audit.prev_label') }}">
|
||||||
<i class="fas fa-chevron-left mr-1" aria-hidden="true"></i>Prev
|
<i class="fas fa-chevron-left mr-1" aria-hidden="true"></i>{{ _("audit.prev") }}
|
||||||
</button>
|
</button>
|
||||||
<span class="text-sm text-gray-500 dark:text-gray-400" x-text="'Page ' + currentPage + ' of ' + totalPages"></span>
|
<span class="text-sm text-gray-500 dark:text-gray-400" x-text="'Page ' + currentPage + ' of ' + totalPages"></span>
|
||||||
<button @click="nextPage()" :disabled="filters.offset + filters.limit >= total"
|
<button @click="nextPage()" :disabled="filters.offset + filters.limit >= total"
|
||||||
class="px-3 py-1.5 rounded-md text-sm border border-gray-300 dark:border-gray-600 disabled:opacity-50 min-h-[44px] min-w-[44px]"
|
class="px-3 py-1.5 rounded-md text-sm border border-gray-300 dark:border-gray-600 disabled:opacity-50 min-h-[44px] min-w-[44px]"
|
||||||
aria-label="Next page">
|
aria-label="{{ _('audit.next_label') }}">
|
||||||
Next<i class="fas fa-chevron-right ml-1" aria-hidden="true"></i>
|
{{ _("audit.next") }}<i class="fas fa-chevron-right ml-1" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Backup Management{% endblock %}
|
{% block title %}{{ _("backup.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container mx-auto px-4 py-8" x-data="backupDashboard()">
|
<div class="container mx-auto px-4 py-8" x-data="backupDashboard()">
|
||||||
@@ -9,10 +9,10 @@
|
|||||||
<div>
|
<div>
|
||||||
<h1 class="text-3xl font-bold text-gray-900">
|
<h1 class="text-3xl font-bold text-gray-900">
|
||||||
<i class="fas fa-database mr-2 text-blue-600" aria-hidden="true"></i>
|
<i class="fas fa-database mr-2 text-blue-600" aria-hidden="true"></i>
|
||||||
Backup Management
|
{{ _("backup.heading") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="mt-1 text-sm text-gray-500">
|
<p class="mt-1 text-sm text-gray-500">
|
||||||
Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).
|
{{ _("backup.subtitle") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-2 flex-wrap">
|
<div class="flex gap-2 flex-wrap">
|
||||||
@@ -21,26 +21,26 @@
|
|||||||
:disabled="triggering"
|
:disabled="triggering"
|
||||||
type="button"
|
type="button"
|
||||||
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 min-h-[44px]">
|
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 min-h-[44px]">
|
||||||
<i class="fas fa-clock mr-1 text-blue-500" aria-hidden="true"></i> Backup Now (Hourly)
|
<i class="fas fa-clock mr-1 text-blue-500" aria-hidden="true"></i> {{ _("backup.trigger_hourly") }}
|
||||||
</button>
|
</button>
|
||||||
<button @click="triggerBackup('daily')"
|
<button @click="triggerBackup('daily')"
|
||||||
:disabled="triggering"
|
:disabled="triggering"
|
||||||
type="button"
|
type="button"
|
||||||
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 min-h-[44px]">
|
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 min-h-[44px]">
|
||||||
<i class="fas fa-calendar-day mr-1 text-green-500" aria-hidden="true"></i> Backup Now (Daily)
|
<i class="fas fa-calendar-day mr-1 text-green-500" aria-hidden="true"></i> {{ _("backup.trigger_daily") }}
|
||||||
</button>
|
</button>
|
||||||
<button @click="triggerBackup('weekly')"
|
<button @click="triggerBackup('weekly')"
|
||||||
:disabled="triggering"
|
:disabled="triggering"
|
||||||
type="button"
|
type="button"
|
||||||
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 min-h-[44px]">
|
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 min-h-[44px]">
|
||||||
<i class="fas fa-calendar-week mr-1 text-purple-500" aria-hidden="true"></i> Backup Now (Weekly)
|
<i class="fas fa-calendar-week mr-1 text-purple-500" aria-hidden="true"></i> {{ _("backup.trigger_weekly") }}
|
||||||
</button>
|
</button>
|
||||||
<button @click="runCleanup()"
|
<button @click="runCleanup()"
|
||||||
:disabled="triggering"
|
:disabled="triggering"
|
||||||
type="button"
|
type="button"
|
||||||
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 min-h-[44px]"
|
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50 min-h-[44px]"
|
||||||
title="Run retention cleanup now">
|
title="{{ _('backup.cleanup_title') }}">
|
||||||
<i class="fas fa-broom mr-1 text-orange-400" aria-hidden="true"></i> Clean Up
|
<i class="fas fa-broom mr-1 text-orange-400" aria-hidden="true"></i> {{ _("backup.clean_up") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -60,18 +60,18 @@
|
|||||||
role="dialog" aria-modal="true" :aria-labelledby="'confirmTitle'">
|
role="dialog" aria-modal="true" :aria-labelledby="'confirmTitle'">
|
||||||
<div class="bg-white rounded-lg shadow-xl max-w-sm w-full p-6"
|
<div class="bg-white rounded-lg shadow-xl max-w-sm w-full p-6"
|
||||||
@keydown.escape.window="confirmOpen = false">
|
@keydown.escape.window="confirmOpen = false">
|
||||||
<h2 id="confirmTitle" class="text-lg font-semibold text-gray-900 mb-2">Confirm action</h2>
|
<h2 id="confirmTitle" class="text-lg font-semibold text-gray-900 mb-2">{{ _("backup.confirm_title") }}</h2>
|
||||||
<p class="text-sm text-gray-600 mb-4" x-text="confirmMsg"></p>
|
<p class="text-sm text-gray-600 mb-4" x-text="confirmMsg"></p>
|
||||||
<div class="flex justify-end gap-3">
|
<div class="flex justify-end gap-3">
|
||||||
<button @click="confirmOpen = false; confirmResolve(false)"
|
<button @click="confirmOpen = false; confirmResolve(false)"
|
||||||
type="button"
|
type="button"
|
||||||
class="px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 min-h-[44px]">
|
class="px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 min-h-[44px]">
|
||||||
Cancel
|
{{ _("common.cancel") }}
|
||||||
</button>
|
</button>
|
||||||
<button @click="confirmOpen = false; confirmResolve(true)"
|
<button @click="confirmOpen = false; confirmResolve(true)"
|
||||||
type="button"
|
type="button"
|
||||||
class="px-4 py-2 text-sm font-medium text-white bg-red-600 border border-transparent rounded-md hover:bg-red-700 min-h-[44px]">
|
class="px-4 py-2 text-sm font-medium text-white bg-red-600 border border-transparent rounded-md hover:bg-red-700 min-h-[44px]">
|
||||||
Confirm
|
{{ _("backup.confirm_btn") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -81,36 +81,36 @@
|
|||||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-8">
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-8">
|
||||||
<!-- Backup enabled -->
|
<!-- Backup enabled -->
|
||||||
<div class="bg-white shadow rounded-lg p-4">
|
<div class="bg-white shadow rounded-lg p-4">
|
||||||
<p class="text-xs text-gray-500 uppercase tracking-wider">Auto-backup</p>
|
<p class="text-xs text-gray-500 uppercase tracking-wider">{{ _("backup.config_auto_backup") }}</p>
|
||||||
<p class="mt-1 text-lg font-semibold {% if backup_enabled %}text-green-600{% else %}text-red-600{% endif %}">
|
<p class="mt-1 text-lg font-semibold {% if backup_enabled %}text-green-600{% else %}text-red-600{% endif %}">
|
||||||
{% if backup_enabled %}<i class="fas fa-check-circle mr-1" aria-hidden="true"></i> Enabled
|
{% if backup_enabled %}<i class="fas fa-check-circle mr-1" aria-hidden="true"></i> {{ _("common.enabled") }}
|
||||||
{% else %}<i class="fas fa-times-circle mr-1" aria-hidden="true"></i> Disabled{% endif %}
|
{% else %}<i class="fas fa-times-circle mr-1" aria-hidden="true"></i> {{ _("common.disabled") }}{% endif %}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<!-- Remote destination -->
|
<!-- Remote destination -->
|
||||||
<div class="bg-white shadow rounded-lg p-4">
|
<div class="bg-white shadow rounded-lg p-4">
|
||||||
<p class="text-xs text-gray-500 uppercase tracking-wider">Remote destination</p>
|
<p class="text-xs text-gray-500 uppercase tracking-wider">{{ _("backup.config_remote_dest") }}</p>
|
||||||
<p class="mt-1 text-lg font-semibold text-gray-800">
|
<p class="mt-1 text-lg font-semibold text-gray-800">
|
||||||
{% if backup_remote_destination %}
|
{% if backup_remote_destination %}
|
||||||
<i class="fas fa-cloud-upload-alt mr-1 text-blue-500" aria-hidden="true"></i>
|
<i class="fas fa-cloud-upload-alt mr-1 text-blue-500" aria-hidden="true"></i>
|
||||||
{{ backup_remote_destination }}
|
{{ backup_remote_destination }}
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="text-gray-400"><i class="fas fa-hdd mr-1" aria-hidden="true"></i> Local only</span>
|
<span class="text-gray-400"><i class="fas fa-hdd mr-1" aria-hidden="true"></i> {{ _("backup.local_only") }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<!-- Retention hourly -->
|
<!-- Retention hourly -->
|
||||||
<div class="bg-white shadow rounded-lg p-4">
|
<div class="bg-white shadow rounded-lg p-4">
|
||||||
<p class="text-xs text-gray-500 uppercase tracking-wider">Retention</p>
|
<p class="text-xs text-gray-500 uppercase tracking-wider">{{ _("backup.config_retention") }}</p>
|
||||||
<p class="mt-1 text-sm text-gray-700">
|
<p class="mt-1 text-sm text-gray-700">
|
||||||
<span class="font-semibold">{{ backup_retain_hourly }}</span> hourly ·
|
<span class="font-semibold">{{ backup_retain_hourly }}</span> {{ _("backup.type_hourly") }} ·
|
||||||
<span class="font-semibold">{{ backup_retain_daily }}</span> daily ·
|
<span class="font-semibold">{{ backup_retain_daily }}</span> {{ _("backup.type_daily") }} ·
|
||||||
<span class="font-semibold">{{ backup_retain_weekly }}</span> weekly
|
<span class="font-semibold">{{ backup_retain_weekly }}</span> {{ _("backup.type_weekly") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<!-- Total backup size -->
|
<!-- Total backup size -->
|
||||||
<div class="bg-white shadow rounded-lg p-4">
|
<div class="bg-white shadow rounded-lg p-4">
|
||||||
<p class="text-xs text-gray-500 uppercase tracking-wider">Total local size</p>
|
<p class="text-xs text-gray-500 uppercase tracking-wider">{{ _("backup.config_total_size") }}</p>
|
||||||
<p class="mt-1 text-lg font-semibold text-gray-800" id="totalSize">
|
<p class="mt-1 text-lg font-semibold text-gray-800" id="totalSize">
|
||||||
{{ (total_size / 1048576) | round(2) }} MB
|
{{ (total_size / 1048576) | round(2) }} MB
|
||||||
</p>
|
</p>
|
||||||
@@ -120,17 +120,17 @@
|
|||||||
<!-- Upload restore section -->
|
<!-- Upload restore section -->
|
||||||
<div class="bg-white shadow rounded-lg p-6 mb-8">
|
<div class="bg-white shadow rounded-lg p-6 mb-8">
|
||||||
<h2 class="text-lg font-semibold text-gray-900 mb-1">
|
<h2 class="text-lg font-semibold text-gray-900 mb-1">
|
||||||
<i class="fas fa-upload mr-2 text-yellow-500" aria-hidden="true"></i>Restore from File
|
<i class="fas fa-upload mr-2 text-yellow-500" aria-hidden="true"></i>{{ _("backup.restore_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
<p class="text-sm text-gray-500 mb-4">
|
<p class="text-sm text-gray-500 mb-4">
|
||||||
Upload a <code>.db.gz</code> backup archive to restore the database.
|
{{ _("backup.restore_desc_pre") }} <code>.db.gz</code> {{ _("backup.restore_desc_mid") }}
|
||||||
<strong class="text-red-600">This will overwrite all current data.</strong>
|
<strong class="text-red-600">{{ _("backup.restore_desc_warning") }}</strong>
|
||||||
</p>
|
</p>
|
||||||
<form id="restoreForm" @submit.prevent="submitRestore" enctype="multipart/form-data">
|
<form id="restoreForm" @submit.prevent="submitRestore" enctype="multipart/form-data">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||||
<div class="flex flex-col sm:flex-row gap-3 items-start sm:items-end">
|
<div class="flex flex-col sm:flex-row gap-3 items-start sm:items-end">
|
||||||
<div>
|
<div>
|
||||||
<label for="restoreFile" class="block text-sm font-medium text-gray-700 mb-1">Backup archive (.db.gz)</label>
|
<label for="restoreFile" class="block text-sm font-medium text-gray-700 mb-1">{{ _("backup.restore_file_label") }}</label>
|
||||||
<input type="file" id="restoreFile" name="file" accept=".gz"
|
<input type="file" id="restoreFile" name="file" accept=".gz"
|
||||||
required
|
required
|
||||||
class="block w-full text-sm text-gray-700 file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-medium file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100">
|
class="block w-full text-sm text-gray-700 file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-medium file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100">
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
:disabled="restoring"
|
:disabled="restoring"
|
||||||
class="inline-flex items-center px-4 py-2 bg-yellow-500 hover:bg-yellow-600 text-white text-sm font-medium rounded-md disabled:opacity-50 min-h-[44px]">
|
class="inline-flex items-center px-4 py-2 bg-yellow-500 hover:bg-yellow-600 text-white text-sm font-medium rounded-md disabled:opacity-50 min-h-[44px]">
|
||||||
<i class="fas fa-undo mr-2" aria-hidden="true"></i>
|
<i class="fas fa-undo mr-2" aria-hidden="true"></i>
|
||||||
<span x-text="restoring ? 'Restoring…' : 'Restore'"></span>
|
<span x-text="restoring ? '{{ _('backup.restoring') }}' : '{{ _('backup.restore_btn') }}'"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@@ -149,30 +149,30 @@
|
|||||||
<div class="bg-white shadow rounded-lg overflow-hidden">
|
<div class="bg-white shadow rounded-lg overflow-hidden">
|
||||||
<div class="px-6 py-4 border-b border-gray-200 flex items-center justify-between">
|
<div class="px-6 py-4 border-b border-gray-200 flex items-center justify-between">
|
||||||
<h2 class="text-lg font-semibold text-gray-900">
|
<h2 class="text-lg font-semibold text-gray-900">
|
||||||
<i class="fas fa-list mr-2 text-gray-500" aria-hidden="true"></i>Backup Archives
|
<i class="fas fa-list mr-2 text-gray-500" aria-hidden="true"></i>{{ _("backup.archives_heading") }}
|
||||||
<span class="ml-2 text-sm font-normal text-gray-400">({{ records | length }} records)</span>
|
<span class="ml-2 text-sm font-normal text-gray-400">({{ records | length }} {{ _("backup.records_label") }})</span>
|
||||||
</h2>
|
</h2>
|
||||||
<!-- Tier filter -->
|
<!-- Tier filter -->
|
||||||
<div class="flex gap-2 text-sm">
|
<div class="flex gap-2 text-sm">
|
||||||
<button @click="filterType = ''" :class="filterType === '' ? 'bg-gray-200 font-semibold' : 'hover:bg-gray-100'" class="px-2 py-1 rounded">All</button>
|
<button @click="filterType = ''" :class="filterType === '' ? 'bg-gray-200 font-semibold' : 'hover:bg-gray-100'" class="px-2 py-1 rounded">{{ _("common.all") }}</button>
|
||||||
<button @click="filterType = 'hourly'" :class="filterType === 'hourly' ? 'bg-blue-200 font-semibold' : 'hover:bg-gray-100'" class="px-2 py-1 rounded">Hourly</button>
|
<button @click="filterType = 'hourly'" :class="filterType === 'hourly' ? 'bg-blue-200 font-semibold' : 'hover:bg-gray-100'" class="px-2 py-1 rounded">{{ _("backup.type_hourly") }}</button>
|
||||||
<button @click="filterType = 'daily'" :class="filterType === 'daily' ? 'bg-green-200 font-semibold' : 'hover:bg-gray-100'" class="px-2 py-1 rounded">Daily</button>
|
<button @click="filterType = 'daily'" :class="filterType === 'daily' ? 'bg-green-200 font-semibold' : 'hover:bg-gray-100'" class="px-2 py-1 rounded">{{ _("backup.type_daily") }}</button>
|
||||||
<button @click="filterType = 'weekly'" :class="filterType === 'weekly' ? 'bg-purple-200 font-semibold' : 'hover:bg-gray-100'" class="px-2 py-1 rounded">Weekly</button>
|
<button @click="filterType = 'weekly'" :class="filterType === 'weekly' ? 'bg-purple-200 font-semibold' : 'hover:bg-gray-100'" class="px-2 py-1 rounded">{{ _("backup.type_weekly") }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if records %}
|
{% if records %}
|
||||||
<div class="overflow-x-auto">
|
<div class="overflow-x-auto">
|
||||||
<table class="min-w-full divide-y divide-gray-200" aria-label="Backup archives">
|
<table class="min-w-full divide-y divide-gray-200" aria-label="{{ _('backup.table_aria') }}">
|
||||||
<thead class="bg-gray-50">
|
<thead class="bg-gray-50">
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Filename</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">{{ _("backup.col_filename") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Type</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">{{ _("backup.col_type") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Created</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">{{ _("backup.col_created") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">Size</th>
|
<th scope="col" class="px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">{{ _("backup.col_size") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">{{ _("common.status") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Storage</th>
|
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">{{ _("backup.col_storage") }}</th>
|
||||||
<th scope="col" class="px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">Actions</th>
|
<th scope="col" class="px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">{{ _("common.actions") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="bg-white divide-y divide-gray-200">
|
<tbody class="bg-white divide-y divide-gray-200">
|
||||||
@@ -186,15 +186,15 @@
|
|||||||
<td class="px-4 py-3 text-sm">
|
<td class="px-4 py-3 text-sm">
|
||||||
{% if r.backup_type == 'hourly' %}
|
{% if r.backup_type == 'hourly' %}
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800">
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800">
|
||||||
<i class="fas fa-clock mr-1" aria-hidden="true"></i> hourly
|
<i class="fas fa-clock mr-1" aria-hidden="true"></i> {{ _("backup.type_hourly") }}
|
||||||
</span>
|
</span>
|
||||||
{% elif r.backup_type == 'daily' %}
|
{% elif r.backup_type == 'daily' %}
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800">
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800">
|
||||||
<i class="fas fa-calendar-day mr-1" aria-hidden="true"></i> daily
|
<i class="fas fa-calendar-day mr-1" aria-hidden="true"></i> {{ _("backup.type_daily") }}
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800">
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800">
|
||||||
<i class="fas fa-calendar-week mr-1" aria-hidden="true"></i> weekly
|
<i class="fas fa-calendar-week mr-1" aria-hidden="true"></i> {{ _("backup.type_weekly") }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
@@ -209,7 +209,7 @@
|
|||||||
<td class="px-4 py-3 text-sm">
|
<td class="px-4 py-3 text-sm">
|
||||||
{% if r.status == 'ok' %}
|
{% if r.status == 'ok' %}
|
||||||
<span class="inline-flex items-center text-green-700">
|
<span class="inline-flex items-center text-green-700">
|
||||||
<i class="fas fa-check-circle mr-1" aria-hidden="true"></i> ok
|
<i class="fas fa-check-circle mr-1" aria-hidden="true"></i> {{ _("backup.status_ok") }}
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="inline-flex items-center text-red-600">
|
<span class="inline-flex items-center text-red-600">
|
||||||
@@ -220,7 +220,7 @@
|
|||||||
<td class="px-4 py-3 text-sm text-gray-600">
|
<td class="px-4 py-3 text-sm text-gray-600">
|
||||||
{% if r.local_path %}
|
{% if r.local_path %}
|
||||||
<span class="inline-flex items-center" title="{{ r.local_path }}">
|
<span class="inline-flex items-center" title="{{ r.local_path }}">
|
||||||
<i class="fas fa-hdd mr-1 text-gray-400" aria-hidden="true"></i> local
|
<i class="fas fa-hdd mr-1 text-gray-400" aria-hidden="true"></i> {{ _("backup.storage_local") }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if r.remote_destination %}
|
{% if r.remote_destination %}
|
||||||
@@ -236,15 +236,15 @@
|
|||||||
{% if r.local_path %}
|
{% if r.local_path %}
|
||||||
<a href="/api/admin/backup/{{ r.id }}/download"
|
<a href="/api/admin/backup/{{ r.id }}/download"
|
||||||
class="inline-flex items-center px-2 py-1 text-xs border border-gray-300 rounded hover:bg-gray-50 text-gray-700 min-h-[32px]"
|
class="inline-flex items-center px-2 py-1 text-xs border border-gray-300 rounded hover:bg-gray-50 text-gray-700 min-h-[32px]"
|
||||||
aria-label="Download backup {{ r.filename }}">
|
aria-label="{{ _('common.download') }} {{ r.filename }}">
|
||||||
<i class="fas fa-download mr-1" aria-hidden="true"></i> Download
|
<i class="fas fa-download mr-1" aria-hidden="true"></i> {{ _("common.download") }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<button @click="deleteBackup({{ r.id }}, '{{ r.filename }}')"
|
<button @click="deleteBackup({{ r.id }}, '{{ r.filename }}')"
|
||||||
type="button"
|
type="button"
|
||||||
class="inline-flex items-center px-2 py-1 text-xs border border-red-300 rounded hover:bg-red-50 text-red-600 ml-1 min-h-[32px]"
|
class="inline-flex items-center px-2 py-1 text-xs border border-red-300 rounded hover:bg-red-50 text-red-600 ml-1 min-h-[32px]"
|
||||||
aria-label="Delete backup {{ r.filename }}">
|
aria-label="{{ _('common.delete') }} {{ r.filename }}">
|
||||||
<i class="fas fa-trash-alt mr-1" aria-hidden="true"></i> Delete
|
<i class="fas fa-trash-alt mr-1" aria-hidden="true"></i> {{ _("common.delete") }}
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -255,8 +255,8 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<div class="px-6 py-12 text-center text-gray-400">
|
<div class="px-6 py-12 text-center text-gray-400">
|
||||||
<i class="fas fa-database text-4xl mb-3" aria-hidden="true"></i>
|
<i class="fas fa-database text-4xl mb-3" aria-hidden="true"></i>
|
||||||
<p class="text-lg font-medium">No backups yet.</p>
|
<p class="text-lg font-medium">{{ _("backup.no_backups") }}</p>
|
||||||
<p class="text-sm">Click <em>Backup Now</em> to create your first backup.</p>
|
<p class="text-sm">{{ _("backup.no_backups_hint_pre") }}<em>{{ _("backup.backup_now") }}</em>{{ _("backup.no_backups_hint_post") }}</p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@@ -264,16 +264,15 @@
|
|||||||
<!-- Retention explanation -->
|
<!-- Retention explanation -->
|
||||||
<div class="mt-8 bg-gray-50 border border-gray-200 rounded-lg p-5">
|
<div class="mt-8 bg-gray-50 border border-gray-200 rounded-lg p-5">
|
||||||
<h3 class="text-sm font-semibold text-gray-700 mb-2">
|
<h3 class="text-sm font-semibold text-gray-700 mb-2">
|
||||||
<i class="fas fa-info-circle mr-1 text-blue-400" aria-hidden="true"></i> Retention policy
|
<i class="fas fa-info-circle mr-1 text-blue-400" aria-hidden="true"></i> {{ _("backup.retention_heading") }}
|
||||||
</h3>
|
</h3>
|
||||||
<ul class="text-sm text-gray-600 space-y-1 list-disc list-inside">
|
<ul class="text-sm text-gray-600 space-y-1 list-disc list-inside">
|
||||||
<li><strong>Hourly</strong> – kept for 4 days ({{ backup_retain_hourly }} snapshots)</li>
|
<li><strong>{{ _("backup.type_hourly") }}</strong> {{ _("backup.retention_hourly_detail") }} ({{ backup_retain_hourly }} {{ _("backup.snapshots") }})</li>
|
||||||
<li><strong>Daily</strong> – kept for 3 weeks ({{ backup_retain_daily }} snapshots)</li>
|
<li><strong>{{ _("backup.type_daily") }}</strong> {{ _("backup.retention_daily_detail") }} ({{ backup_retain_daily }} {{ _("backup.snapshots") }})</li>
|
||||||
<li><strong>Weekly</strong> – kept for ~3 months ({{ backup_retain_weekly }} snapshots)</li>
|
<li><strong>{{ _("backup.type_weekly") }}</strong> {{ _("backup.retention_weekly_detail") }} ({{ backup_retain_weekly }} {{ _("backup.snapshots") }})</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="text-xs text-gray-400 mt-2">
|
<p class="text-xs text-gray-400 mt-2">
|
||||||
Backups beyond these limits are automatically pruned after each new backup is created.
|
{{ _("backup.retention_note_pre") }}<em>{{ _("backup.clean_up") }}</em>{{ _("backup.retention_note_post") }}
|
||||||
Use the <em>Clean Up</em> button to apply retention manually.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>DocuElevate - Subscription Activated</title>
|
<title>{{ _("billing.success_page_title") }}</title>
|
||||||
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
||||||
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
|
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
<body class="bg-gray-100 min-h-screen flex items-center justify-center py-8">
|
<body class="bg-gray-100 min-h-screen flex items-center justify-center py-8">
|
||||||
<main class="bg-white rounded-lg shadow-lg p-8 max-w-md w-full text-center" role="main">
|
<main class="bg-white rounded-lg shadow-lg p-8 max-w-md w-full text-center" role="main">
|
||||||
<div class="flex justify-center mb-6">
|
<div class="flex justify-center mb-6">
|
||||||
<img src="/static/images/logo_writing.svg" alt="DocuElevate Logo" class="h-16">
|
<img src="/static/images/logo_writing.svg" alt="{{ _('auth.logo_alt') }}" class="h-16">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex justify-center mb-4">
|
<div class="flex justify-center mb-4">
|
||||||
@@ -21,9 +21,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1 class="text-2xl font-bold text-gray-800 mb-2">You're all set!</h1>
|
<h1 class="text-2xl font-bold text-gray-800 mb-2">{{ _("billing.success_heading") }}</h1>
|
||||||
<p class="text-gray-600 mb-8">
|
<p class="text-gray-600 mb-8">
|
||||||
Your subscription has been activated. Thank you for choosing DocuElevate!
|
{{ _("billing.success_message") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
@@ -31,13 +31,13 @@
|
|||||||
class="block w-full py-3 px-4 rounded-lg border-2 border-indigo-600 text-indigo-600 font-semibold hover:bg-indigo-50 transition focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
|
class="block w-full py-3 px-4 rounded-lg border-2 border-indigo-600 text-indigo-600 font-semibold hover:bg-indigo-50 transition focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
|
||||||
style="min-height:44px;display:flex;align-items:center;justify-content:center;"
|
style="min-height:44px;display:flex;align-items:center;justify-content:center;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-credit-card mr-2" aria-hidden="true"></i>Manage subscription
|
<i class="fas fa-credit-card mr-2" aria-hidden="true"></i>{{ _("billing.manage_subscription") }}
|
||||||
</a>
|
</a>
|
||||||
<a href="/upload"
|
<a href="/upload"
|
||||||
class="block w-full py-3 px-4 rounded-lg bg-indigo-600 text-white font-semibold hover:bg-indigo-700 transition focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
|
class="block w-full py-3 px-4 rounded-lg bg-indigo-600 text-white font-semibold hover:bg-indigo-700 transition focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
|
||||||
style="min-height:44px;display:flex;align-items:center;justify-content:center;"
|
style="min-height:44px;display:flex;align-items:center;justify-content:center;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-arrow-right mr-2" aria-hidden="true"></i>Go to dashboard
|
<i class="fas fa-arrow-right mr-2" aria-hidden="true"></i>{{ _("billing.go_to_dashboard") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Credential Audit - DocuElevate{% endblock %}
|
{% block title %}{{ _("credentials.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container mx-auto px-4 py-8">
|
<div class="container mx-auto px-4 py-8">
|
||||||
@@ -8,11 +8,10 @@
|
|||||||
<div class="mb-8">
|
<div class="mb-8">
|
||||||
<div class="flex items-center gap-3 mb-2">
|
<div class="flex items-center gap-3 mb-2">
|
||||||
<i class="fas fa-key text-yellow-500 text-2xl" aria-hidden="true"></i>
|
<i class="fas fa-key text-yellow-500 text-2xl" aria-hidden="true"></i>
|
||||||
<h1 class="text-3xl font-bold">Credential Audit</h1>
|
<h1 class="text-3xl font-bold">{{ _("credentials.title") }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-gray-600">
|
<p class="text-gray-600">
|
||||||
Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only
|
{{ _("credentials.subtitle") }}
|
||||||
whether each credential is configured and where it comes from.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -24,7 +23,7 @@
|
|||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<div class="text-2xl font-bold text-gray-800">{{ total }}</div>
|
<div class="text-2xl font-bold text-gray-800">{{ total }}</div>
|
||||||
<div class="text-sm text-gray-500">Total Credentials</div>
|
<div class="text-sm text-gray-500">{{ _("credentials.total_credentials") }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white rounded-lg shadow p-5 flex items-center gap-4">
|
<div class="bg-white rounded-lg shadow p-5 flex items-center gap-4">
|
||||||
@@ -33,7 +32,7 @@
|
|||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<div class="text-2xl font-bold text-green-700">{{ configured_count }}</div>
|
<div class="text-2xl font-bold text-green-700">{{ configured_count }}</div>
|
||||||
<div class="text-sm text-gray-500">Configured</div>
|
<div class="text-sm text-gray-500">{{ _("credentials.configured") }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white rounded-lg shadow p-5 flex items-center gap-4">
|
<div class="bg-white rounded-lg shadow p-5 flex items-center gap-4">
|
||||||
@@ -42,32 +41,32 @@
|
|||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<div class="text-2xl font-bold text-gray-600">{{ unconfigured_count }}</div>
|
<div class="text-2xl font-bold text-gray-600">{{ unconfigured_count }}</div>
|
||||||
<div class="text-sm text-gray-500">Not Configured</div>
|
<div class="text-sm text-gray-500">{{ _("credentials.not_configured") }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Legend -->
|
<!-- Legend -->
|
||||||
<div class="bg-blue-50 border-l-4 border-blue-500 text-blue-800 p-4 mb-6 rounded-r-md">
|
<div class="bg-blue-50 border-l-4 border-blue-500 text-blue-800 p-4 mb-6 rounded-r-md">
|
||||||
<p class="font-semibold mb-2"><i class="fas fa-circle-info mr-1" aria-hidden="true"></i> Legend</p>
|
<p class="font-semibold mb-2"><i class="fas fa-circle-info mr-1" aria-hidden="true"></i> {{ _("credentials.legend_title") }}</p>
|
||||||
<div class="flex flex-wrap gap-4 text-sm">
|
<div class="flex flex-wrap gap-4 text-sm">
|
||||||
<span>
|
<span>
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800 mr-1">DB</span>
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800 mr-1">DB</span>
|
||||||
Value stored in the database (encrypted at rest; overrides environment variable)
|
{{ _("credentials.legend_db") }}
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800 mr-1">ENV</span>
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800 mr-1">ENV</span>
|
||||||
Value from environment variable or <code>.env</code> file
|
{{ _("credentials.legend_env_before") }}<code>.env</code>{{ _("credentials.legend_env_after") }}
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-red-100 text-red-700 mr-1">
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-red-100 text-red-700 mr-1">
|
||||||
<i class="fas fa-circle-exclamation mr-0.5 text-xs"></i> Missing
|
<i class="fas fa-circle-exclamation mr-0.5 text-xs"></i> {{ _("credentials.status_missing") }}
|
||||||
</span>
|
</span>
|
||||||
Credential not set — integration will not work
|
{{ _("credentials.legend_missing") }}
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
<span class="text-orange-500 mr-1"><i class="fas fa-rotate"></i></span>
|
<span class="text-orange-500 mr-1"><i class="fas fa-rotate"></i></span>
|
||||||
Restart required when this credential is rotated
|
{{ _("credentials.legend_restart") }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -79,29 +78,29 @@
|
|||||||
<div class="bg-gray-100 px-6 py-3 border-b border-gray-200 flex items-center justify-between">
|
<div class="bg-gray-100 px-6 py-3 border-b border-gray-200 flex items-center justify-between">
|
||||||
<h2 class="text-lg font-semibold text-gray-800">{{ category }}</h2>
|
<h2 class="text-lg font-semibold text-gray-800">{{ category }}</h2>
|
||||||
<span class="text-sm text-gray-500">
|
<span class="text-sm text-gray-500">
|
||||||
{{ creds | selectattr('configured') | list | length }} / {{ creds | length }} configured
|
{{ creds | selectattr('configured') | list | length }} / {{ creds | length }} {{ _("credentials.configured") }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Credentials Table -->
|
<!-- Credentials Table -->
|
||||||
<div class="overflow-x-auto">
|
<div class="overflow-x-auto">
|
||||||
<table class="min-w-full divide-y divide-gray-200" aria-label="Credentials for {{ category }}">
|
<table class="min-w-full divide-y divide-gray-200" aria-label="{{ _('credentials.table_for') ~ ' ' ~ category }}">
|
||||||
<thead class="bg-gray-50">
|
<thead class="bg-gray-50">
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-56">
|
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-56">
|
||||||
Credential
|
{{ _("credentials.col_credential") }}
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
Description
|
{{ _("common.description") }}
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-32">
|
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-32">
|
||||||
Status
|
{{ _("common.status") }}
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-24">
|
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider w-24">
|
||||||
Source
|
{{ _("credentials.col_source") }}
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase tracking-wider w-20">
|
<th scope="col" class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase tracking-wider w-20">
|
||||||
Action
|
{{ _("credentials.col_action") }}
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -114,7 +113,7 @@
|
|||||||
<div class="flex items-center gap-1">
|
<div class="flex items-center gap-1">
|
||||||
<code class="text-sm font-mono text-gray-800">{{ cred.key }}</code>
|
<code class="text-sm font-mono text-gray-800">{{ cred.key }}</code>
|
||||||
{% if cred.restart_required %}
|
{% if cred.restart_required %}
|
||||||
<span title="Restart required after rotating this credential">
|
<span title="{{ _('credentials.restart_title') }}">
|
||||||
<i class="fas fa-rotate text-orange-400 text-xs"></i>
|
<i class="fas fa-rotate text-orange-400 text-xs"></i>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -130,11 +129,11 @@
|
|||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
{% if cred.configured %}
|
{% if cred.configured %}
|
||||||
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold bg-green-100 text-green-800">
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold bg-green-100 text-green-800">
|
||||||
<i class="fas fa-check mr-1" aria-hidden="true"></i> Configured
|
<i class="fas fa-check mr-1" aria-hidden="true"></i> {{ _("credentials.configured") }}
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold bg-red-100 text-red-700">
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold bg-red-100 text-red-700">
|
||||||
<i class="fas fa-circle-exclamation mr-1" aria-hidden="true"></i> Missing
|
<i class="fas fa-circle-exclamation mr-1" aria-hidden="true"></i> {{ _("credentials.status_missing") }}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
@@ -142,11 +141,11 @@
|
|||||||
<!-- Source badge -->
|
<!-- Source badge -->
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
{% if cred.source == 'db' %}
|
{% if cred.source == 'db' %}
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800" title="Stored in database (encrypted)">
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800" title="{{ _('credentials.source_db_title') }}">
|
||||||
<i class="fas fa-database mr-1 text-xs" aria-hidden="true"></i> DB
|
<i class="fas fa-database mr-1 text-xs" aria-hidden="true"></i> DB
|
||||||
</span>
|
</span>
|
||||||
{% elif cred.source == 'env' %}
|
{% elif cred.source == 'env' %}
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800" title="From environment variable">
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800" title="{{ _('credentials.source_env_title') }}">
|
||||||
<i class="fas fa-terminal mr-1 text-xs" aria-hidden="true"></i> ENV
|
<i class="fas fa-terminal mr-1 text-xs" aria-hidden="true"></i> ENV
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -157,8 +156,8 @@
|
|||||||
<!-- Quick-edit link -->
|
<!-- Quick-edit link -->
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-center">
|
<td class="px-6 py-4 whitespace-nowrap text-center">
|
||||||
<a href="/settings#{{ cred.key }}"
|
<a href="/settings#{{ cred.key }}"
|
||||||
title="Edit in Settings"
|
title="{{ _('credentials.edit_in_settings') }}"
|
||||||
aria-label="Edit {{ cred.key }}"
|
aria-label="{{ _('common.edit') ~ ' ' ~ cred.key }}"
|
||||||
class="inline-flex items-center justify-center w-7 h-7 rounded text-gray-400 hover:text-blue-600 hover:bg-blue-50 transition-colors"
|
class="inline-flex items-center justify-center w-7 h-7 rounded text-gray-400 hover:text-blue-600 hover:bg-blue-50 transition-colors"
|
||||||
>
|
>
|
||||||
<i class="fas fa-pen-to-square text-sm" aria-hidden="true"></i>
|
<i class="fas fa-pen-to-square text-sm" aria-hidden="true"></i>
|
||||||
@@ -178,13 +177,13 @@
|
|||||||
<a href="/settings"
|
<a href="/settings"
|
||||||
class="inline-flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 text-sm font-medium"
|
class="inline-flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 text-sm font-medium"
|
||||||
>
|
>
|
||||||
<i class="fas fa-cog" aria-hidden="true"></i> Manage Settings
|
<i class="fas fa-cog" aria-hidden="true"></i> {{ _("credentials.manage_settings") }}
|
||||||
</a>
|
</a>
|
||||||
<a href="/api/settings/credentials"
|
<a href="/api/settings/credentials"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
class="inline-flex items-center gap-2 px-4 py-2 border border-gray-300 text-gray-700 rounded-md hover:bg-gray-50 text-sm font-medium"
|
class="inline-flex items-center gap-2 px-4 py-2 border border-gray-300 text-gray-700 rounded-md hover:bg-gray-50 text-sm font-medium"
|
||||||
>
|
>
|
||||||
<i class="fas fa-code" aria-hidden="true"></i> Raw JSON (API)
|
<i class="fas fa-code" aria-hidden="true"></i> {{ _("credentials.raw_json") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Duplicate Documents - DocuElevate{% endblock %}
|
{% block title %}{{ _("duplicates.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block head_extra %}
|
{% block head_extra %}
|
||||||
<style>
|
<style>
|
||||||
@@ -88,22 +88,20 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<main id="main-content" class="dup-container px-4 py-8">
|
<main id="main-content" class="dup-container px-4 py-8">
|
||||||
<h1 class="text-2xl font-bold mb-2">Duplicate Documents</h1>
|
<h1 class="text-2xl font-bold mb-2">{{ _("duplicates.heading") }}</h1>
|
||||||
<p class="text-gray-500 mb-6 text-sm">
|
<p class="text-gray-500 mb-6 text-sm">
|
||||||
Documents with identical content (same SHA-256 hash) are shown as
|
{{ _("duplicates.subtitle_1") }}
|
||||||
<span class="dup-badge dup-badge-exact">exact duplicates</span>.
|
<span class="dup-badge dup-badge-exact">{{ _("duplicates.exact_duplicates_badge") }}</span>.
|
||||||
Use the <strong>Near-Duplicate Finder</strong> tab to detect documents with the
|
{{ _("duplicates.subtitle_2_pre") }} <strong>{{ _("duplicates.tab_near") }}</strong> {{ _("duplicates.subtitle_2_post") }}
|
||||||
same scanned content but different hashes — for example, a document scanned
|
|
||||||
twice.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Tabs -->
|
<!-- Tabs -->
|
||||||
<div class="tabs" role="tablist" aria-label="Duplicate detection tabs">
|
<div class="tabs" role="tablist" aria-label="{{ _('duplicates.tabs_aria') }}">
|
||||||
<button class="tab-btn active" role="tab" aria-selected="true"
|
<button class="tab-btn active" role="tab" aria-selected="true"
|
||||||
aria-controls="tab-exact" id="btn-exact"
|
aria-controls="tab-exact" id="btn-exact"
|
||||||
onclick="switchTab('exact')">
|
onclick="switchTab('exact')">
|
||||||
<i class="fas fa-clone mr-1" aria-hidden="true"></i>
|
<i class="fas fa-clone mr-1" aria-hidden="true"></i>
|
||||||
Exact Duplicates
|
{{ _("duplicates.tab_exact") }}
|
||||||
{% if total_groups is defined %}
|
{% if total_groups is defined %}
|
||||||
<span class="ml-1 text-xs bg-red-100 text-red-700 font-bold px-1.5 rounded-full">
|
<span class="ml-1 text-xs bg-red-100 text-red-700 font-bold px-1.5 rounded-full">
|
||||||
{{ total_groups }}
|
{{ total_groups }}
|
||||||
@@ -114,7 +112,7 @@
|
|||||||
aria-controls="tab-near" id="btn-near"
|
aria-controls="tab-near" id="btn-near"
|
||||||
onclick="switchTab('near')">
|
onclick="switchTab('near')">
|
||||||
<i class="fas fa-layer-group mr-1" aria-hidden="true"></i>
|
<i class="fas fa-layer-group mr-1" aria-hidden="true"></i>
|
||||||
Near-Duplicate Finder
|
{{ _("duplicates.tab_near") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -123,12 +121,12 @@
|
|||||||
|
|
||||||
{% if groups %}
|
{% if groups %}
|
||||||
<p class="text-sm text-gray-500 mb-4">
|
<p class="text-sm text-gray-500 mb-4">
|
||||||
Found <strong>{{ total_groups }}</strong> duplicate group(s) with
|
{{ _("duplicates.found_prefix") }} <strong>{{ total_groups }}</strong> {{ _("duplicates.found_groups") }}
|
||||||
<strong>{{ total_duplicate_files }}</strong> duplicate file(s) total.
|
<strong>{{ total_duplicate_files }}</strong> {{ _("duplicates.found_files") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% for group in groups %}
|
{% for group in groups %}
|
||||||
<section class="dup-group" aria-label="Duplicate group {{ loop.index }}">
|
<section class="dup-group" aria-label="{{ _('duplicates.group_aria') }} {{ loop.index }}">
|
||||||
<div class="dup-group-header">
|
<div class="dup-group-header">
|
||||||
<i class="fas fa-fingerprint text-gray-400" aria-hidden="true"></i>
|
<i class="fas fa-fingerprint text-gray-400" aria-hidden="true"></i>
|
||||||
<span class="text-xs font-mono text-gray-500" title="SHA-256 hash">
|
<span class="text-xs font-mono text-gray-500" title="SHA-256 hash">
|
||||||
@@ -136,14 +134,14 @@
|
|||||||
</span>
|
</span>
|
||||||
<span class="dup-badge dup-badge-exact">
|
<span class="dup-badge dup-badge-exact">
|
||||||
<i class="fas fa-copy" aria-hidden="true"></i>
|
<i class="fas fa-copy" aria-hidden="true"></i>
|
||||||
{{ group.duplicate_count }} duplicate{{ 's' if group.duplicate_count != 1 else '' }}
|
{{ group.duplicate_count }} {{ _("duplicates.dup_singular") if group.duplicate_count == 1 else _("duplicates.dup_plural") }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Original file -->
|
<!-- Original file -->
|
||||||
{% if group.original %}
|
{% if group.original %}
|
||||||
<div class="dup-file-row original">
|
<div class="dup-file-row original">
|
||||||
<span class="dup-role-tag tag-original">Original</span>
|
<span class="dup-role-tag tag-original">{{ _("duplicates.role_original") }}</span>
|
||||||
<div class="flex-1 min-w-0">
|
<div class="flex-1 min-w-0">
|
||||||
<div class="dup-filename">
|
<div class="dup-filename">
|
||||||
<a href="/files/{{ group.original.id }}"
|
<a href="/files/{{ group.original.id }}"
|
||||||
@@ -164,8 +162,8 @@
|
|||||||
<div class="dup-actions">
|
<div class="dup-actions">
|
||||||
<a href="/files/{{ group.original.id }}"
|
<a href="/files/{{ group.original.id }}"
|
||||||
class="text-sm text-blue-600 hover:underline"
|
class="text-sm text-blue-600 hover:underline"
|
||||||
aria-label="View original file {{ group.original.original_filename }}">
|
aria-label="{{ _('duplicates.view_original_aria') }} {{ group.original.original_filename }}">
|
||||||
<i class="fas fa-external-link-alt" aria-hidden="true"></i> View
|
<i class="fas fa-external-link-alt" aria-hidden="true"></i> {{ _("common.view") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -174,7 +172,7 @@
|
|||||||
<!-- Duplicate files -->
|
<!-- Duplicate files -->
|
||||||
{% for dup in group.duplicates %}
|
{% for dup in group.duplicates %}
|
||||||
<div class="dup-file-row duplicate">
|
<div class="dup-file-row duplicate">
|
||||||
<span class="dup-role-tag tag-duplicate">Duplicate</span>
|
<span class="dup-role-tag tag-duplicate">{{ _("duplicates.role_duplicate") }}</span>
|
||||||
<div class="flex-1 min-w-0">
|
<div class="flex-1 min-w-0">
|
||||||
<div class="dup-filename">
|
<div class="dup-filename">
|
||||||
<a href="/files/{{ dup.id }}" class="hover:text-blue-600">
|
<a href="/files/{{ dup.id }}" class="hover:text-blue-600">
|
||||||
@@ -194,8 +192,8 @@
|
|||||||
<div class="dup-actions">
|
<div class="dup-actions">
|
||||||
<a href="/files/{{ dup.id }}"
|
<a href="/files/{{ dup.id }}"
|
||||||
class="text-sm text-blue-600 hover:underline"
|
class="text-sm text-blue-600 hover:underline"
|
||||||
aria-label="View duplicate file {{ dup.original_filename }}">
|
aria-label="{{ _('duplicates.view_dup_aria') }} {{ dup.original_filename }}">
|
||||||
<i class="fas fa-external-link-alt" aria-hidden="true"></i> View
|
<i class="fas fa-external-link-alt" aria-hidden="true"></i> {{ _("common.view") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -205,23 +203,23 @@
|
|||||||
|
|
||||||
<!-- Pagination -->
|
<!-- Pagination -->
|
||||||
{% if pagination.pages > 1 %}
|
{% if pagination.pages > 1 %}
|
||||||
<nav class="pagination" aria-label="Pagination">
|
<nav class="pagination" aria-label="{{ _('duplicates.pagination_aria') }}">
|
||||||
<button class="page-btn" onclick="changePage({{ pagination.page - 1 }})"
|
<button class="page-btn" onclick="changePage({{ pagination.page - 1 }})"
|
||||||
{% if pagination.page <= 1 %}disabled{% endif %}
|
{% if pagination.page <= 1 %}disabled{% endif %}
|
||||||
aria-label="Previous page">
|
aria-label="{{ _('common.prev_page') }}">
|
||||||
<i class="fas fa-chevron-left" aria-hidden="true"></i>
|
<i class="fas fa-chevron-left" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
{% for p in range(1, pagination.pages + 1) %}
|
{% for p in range(1, pagination.pages + 1) %}
|
||||||
<button class="page-btn {% if p == pagination.page %}current{% endif %}"
|
<button class="page-btn {% if p == pagination.page %}current{% endif %}"
|
||||||
onclick="changePage({{ p }})"
|
onclick="changePage({{ p }})"
|
||||||
aria-label="Page {{ p }}"
|
aria-label="{{ _('common.page') }} {{ p }}"
|
||||||
{% if p == pagination.page %}aria-current="page"{% endif %}>
|
{% if p == pagination.page %}aria-current="page"{% endif %}>
|
||||||
{{ p }}
|
{{ p }}
|
||||||
</button>
|
</button>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<button class="page-btn" onclick="changePage({{ pagination.page + 1 }})"
|
<button class="page-btn" onclick="changePage({{ pagination.page + 1 }})"
|
||||||
{% if pagination.page >= pagination.pages %}disabled{% endif %}
|
{% if pagination.page >= pagination.pages %}disabled{% endif %}
|
||||||
aria-label="Next page">
|
aria-label="{{ _('common.next_page') }}">
|
||||||
<i class="fas fa-chevron-right" aria-hidden="true"></i>
|
<i class="fas fa-chevron-right" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -230,11 +228,9 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<div class="empty-state">
|
<div class="empty-state">
|
||||||
<i class="fas fa-check-circle text-green-400" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-400" aria-hidden="true"></i>
|
||||||
<p class="font-semibold text-lg text-gray-700">No exact duplicates found</p>
|
<p class="font-semibold text-lg text-gray-700">{{ _("duplicates.no_exact_heading") }}</p>
|
||||||
<p class="text-sm mt-1">
|
<p class="text-sm mt-1">
|
||||||
Every file in the system has a unique SHA-256 hash.
|
{{ _("duplicates.no_exact_detail_pre") }} <strong>{{ _("duplicates.tab_near") }}</strong> {{ _("duplicates.no_exact_detail_post") }}
|
||||||
Use the <strong>Near-Duplicate Finder</strong> tab to check for
|
|
||||||
re-scanned documents.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -246,32 +242,29 @@
|
|||||||
<div class="near-dup-search">
|
<div class="near-dup-search">
|
||||||
<h3>
|
<h3>
|
||||||
<i class="fas fa-search mr-1 text-yellow-500" aria-hidden="true"></i>
|
<i class="fas fa-search mr-1 text-yellow-500" aria-hidden="true"></i>
|
||||||
Find Near-Duplicates for a Document
|
{{ _("duplicates.near_dup_heading") }}
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-sm text-gray-500 mb-4">
|
<p class="text-sm text-gray-500 mb-4">
|
||||||
Select a document to check whether any other files contain the same (or very
|
{{ _("duplicates.near_dup_desc") }}
|
||||||
similar) content — even if they were scanned at different times and have
|
|
||||||
different SHA-256 hashes. Similarity is computed from OCR text embeddings;
|
|
||||||
documents without extracted text cannot be compared.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<form id="nearDupForm" onsubmit="findNearDups(event)">
|
<form id="nearDupForm" onsubmit="findNearDups(event)">
|
||||||
<div class="nd-form">
|
<div class="nd-form">
|
||||||
<div class="flex flex-col gap-1">
|
<div class="flex flex-col gap-1">
|
||||||
<label for="ndFileId">File ID</label>
|
<label for="ndFileId">{{ _("duplicates.file_id_label") }}</label>
|
||||||
<input type="number" id="ndFileId" name="file_id" min="1"
|
<input type="number" id="ndFileId" name="file_id" min="1"
|
||||||
placeholder="e.g. 42" required
|
placeholder="{{ _('duplicates.file_id_placeholder') }}" required
|
||||||
style="min-height:44px;">
|
style="min-height:44px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col gap-1">
|
<div class="flex flex-col gap-1">
|
||||||
<label for="ndThreshold">Similarity threshold</label>
|
<label for="ndThreshold">{{ _("duplicates.threshold_label") }}</label>
|
||||||
<input type="number" id="ndThreshold" name="threshold"
|
<input type="number" id="ndThreshold" name="threshold"
|
||||||
min="0" max="1" step="0.05"
|
min="0" max="1" step="0.05"
|
||||||
value="{{ near_duplicate_threshold }}"
|
value="{{ near_duplicate_threshold }}"
|
||||||
style="min-height:44px;">
|
style="min-height:44px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col gap-1">
|
<div class="flex flex-col gap-1">
|
||||||
<label for="ndLimit">Max results</label>
|
<label for="ndLimit">{{ _("duplicates.max_results_label") }}</label>
|
||||||
<select id="ndLimit" name="limit" style="min-height:44px;">
|
<select id="ndLimit" name="limit" style="min-height:44px;">
|
||||||
<option value="5" selected>5</option>
|
<option value="5" selected>5</option>
|
||||||
<option value="10">10</option>
|
<option value="10">10</option>
|
||||||
@@ -282,7 +275,7 @@
|
|||||||
class="bg-yellow-500 hover:bg-yellow-600 text-white font-bold
|
class="bg-yellow-500 hover:bg-yellow-600 text-white font-bold
|
||||||
px-5 rounded-lg transition-colors"
|
px-5 rounded-lg transition-colors"
|
||||||
style="min-height:44px;">
|
style="min-height:44px;">
|
||||||
<i class="fas fa-search mr-1" aria-hidden="true"></i> Find
|
<i class="fas fa-search mr-1" aria-hidden="true"></i> {{ _("duplicates.find_btn") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@@ -296,20 +289,14 @@
|
|||||||
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4 text-sm text-blue-800">
|
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4 text-sm text-blue-800">
|
||||||
<p class="font-semibold mb-1">
|
<p class="font-semibold mb-1">
|
||||||
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i>
|
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i>
|
||||||
How near-duplicate detection works
|
{{ _("duplicates.how_it_works_heading") }}
|
||||||
</p>
|
</p>
|
||||||
<ul class="list-disc ml-5 space-y-1">
|
<ul class="list-disc ml-5 space-y-1">
|
||||||
<li>After OCR processes a document, its text is converted to a numeric
|
<li>{{ _("duplicates.how_step1_pre") }} <em>{{ _("duplicates.embedding_vector") }}</em> {{ _("duplicates.how_step1_post") }}</li>
|
||||||
<em>embedding vector</em> using an AI language model.</li>
|
<li>{{ _("duplicates.how_step2_pre") }} <em>{{ _("duplicates.cosine_similarity") }}</em>{{ _("duplicates.how_step2_post") }}</li>
|
||||||
<li>Near-duplicate detection compares these vectors using <em>cosine
|
<li>{{ _("duplicates.how_step3_pre") }} <strong>{{ near_duplicate_threshold }}</strong> {{ _("duplicates.how_step3_mid") }}
|
||||||
similarity</em>: a score of 1.0 means identical content, 0.0 means
|
{{ (near_duplicate_threshold * 100)|round|int }}% {{ _("duplicates.how_step3_post") }}</li>
|
||||||
completely different.</li>
|
<li>{{ _("duplicates.how_step4") }} <strong>> 0.90</strong>.</li>
|
||||||
<li>A threshold of <strong>{{ near_duplicate_threshold }}</strong> means
|
|
||||||
documents must share at least
|
|
||||||
{{ (near_duplicate_threshold * 100)|round|int }}% semantic similarity
|
|
||||||
to be flagged.</li>
|
|
||||||
<li>Documents scanned twice (even with slight differences) will typically
|
|
||||||
score <strong>> 0.90</strong>.</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /tab-near -->
|
</div><!-- /tab-near -->
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}File Records{% endblock %}
|
{% block title %}{{ _("files.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block head_extra %}
|
{% block head_extra %}
|
||||||
<script src="/static/js/common.js"></script>
|
<script src="/static/js/common.js"></script>
|
||||||
@@ -427,16 +427,16 @@
|
|||||||
<div id="dropOverlay" class="drop-overlay" aria-hidden="true">
|
<div id="dropOverlay" class="drop-overlay" aria-hidden="true">
|
||||||
<div class="drop-message">
|
<div class="drop-message">
|
||||||
<i class="fas fa-cloud-upload-alt" aria-hidden="true"></i>
|
<i class="fas fa-cloud-upload-alt" aria-hidden="true"></i>
|
||||||
<p>Drop files or folders anywhere to upload</p>
|
<p>{{ _("files.drop_overlay_title") }}</p>
|
||||||
<div class="drop-hint">Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively</div>
|
<div class="drop-hint">{{ _("files.drop_overlay_hint") }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Upload progress modal -->
|
<!-- Upload progress modal -->
|
||||||
<div id="uploadModal" class="upload-modal" role="dialog" aria-modal="true" aria-label="Upload progress">
|
<div id="uploadModal" class="upload-modal" role="dialog" aria-modal="true" aria-label="{{ _('files.upload_modal_aria') }}">
|
||||||
<div class="upload-modal-header">
|
<div class="upload-modal-header">
|
||||||
<span><i class="fas fa-upload" aria-hidden="true"></i> Uploading Files</span>
|
<span><i class="fas fa-upload" aria-hidden="true"></i> {{ _("files.upload_modal_header") }}</span>
|
||||||
<button class="close-modal-btn" onclick="closeUploadModal()" aria-label="Close upload progress">
|
<button class="close-modal-btn" onclick="closeUploadModal()" aria-label="{{ _('files.upload_modal_close') }}">
|
||||||
<i class="fas fa-times" aria-hidden="true"></i>
|
<i class="fas fa-times" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -447,7 +447,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="container mx-auto px-4 py-8">
|
<div class="container mx-auto px-4 py-8">
|
||||||
<h2 class="text-3xl font-bold mb-6">File Records</h2>
|
<h2 class="text-3xl font-bold mb-6">{{ _("files.page_title") }}</h2>
|
||||||
|
|
||||||
<!-- Queue pending banner (populated via JS) -->
|
<!-- Queue pending banner (populated via JS) -->
|
||||||
<div id="queueBanner" class="hidden bg-blue-50 border-l-4 border-blue-400 text-blue-800 p-4 mb-6 rounded-r-lg" role="status">
|
<div id="queueBanner" class="hidden bg-blue-50 border-l-4 border-blue-400 text-blue-800 p-4 mb-6 rounded-r-lg" role="status">
|
||||||
@@ -455,36 +455,35 @@
|
|||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<i class="fas fa-spinner fa-spin mr-3 text-blue-500" aria-hidden="true"></i>
|
<i class="fas fa-spinner fa-spin mr-3 text-blue-500" aria-hidden="true"></i>
|
||||||
<span>
|
<span>
|
||||||
<strong id="queueBannerCount">0</strong> item(s) are currently queued or being processed.
|
<strong id="queueBannerCount">0</strong> {{ _("files.queue_banner_items") }}
|
||||||
Files will appear here once processing completes.
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<a href="/admin/queue" class="text-blue-600 hover:text-blue-800 text-sm font-medium whitespace-nowrap ml-4"
|
<a href="/admin/queue" class="text-blue-600 hover:text-blue-800 text-sm font-medium whitespace-nowrap ml-4"
|
||||||
id="queueBannerLink" style="display:none;">
|
id="queueBannerLink" style="display:none;">
|
||||||
<i class="fas fa-external-link-alt mr-1" aria-hidden="true"></i>View Queue
|
<i class="fas fa-external-link-alt mr-1" aria-hidden="true"></i>{{ _("files.queue_banner_link") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if error %}
|
{% if error %}
|
||||||
<div class="error-message">
|
<div class="error-message">
|
||||||
<p><strong>Error:</strong> {{ error }}</p>
|
<p><strong>{{ _("common.error") }}:</strong> {{ error }}</p>
|
||||||
<p class="mt-2">This might be due to a configuration or import issue. Please check the server logs.</p>
|
<p class="mt-2">{{ _("files.error_hint") }}</p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<!-- Filters Section -->
|
<!-- Filters Section -->
|
||||||
<div class="filters-section">
|
<div class="filters-section">
|
||||||
<form method="get" action="/files" class="filter-group" role="search" aria-label="Filter files">
|
<form method="get" action="/files" class="filter-group" role="search" aria-label="{{ _('files.filter_form_aria') }}">
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label for="search">Search Filename</label>
|
<label for="search">{{ _("files.filter_search_label") }}</label>
|
||||||
<input type="text" id="search" name="search" value="{{ search }}" placeholder="Enter filename...">
|
<input type="text" id="search" name="search" value="{{ search }}" placeholder="{{ _('files.filter_search_placeholder') }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label for="mime_type">MIME Type</label>
|
<label for="mime_type">{{ _("files.filter_mime_type") }}</label>
|
||||||
<select id="mime_type" name="mime_type">
|
<select id="mime_type" name="mime_type">
|
||||||
<option value="">All Types</option>
|
<option value="">{{ _("files.filter_all_types") }}</option>
|
||||||
{% for mt in mime_types %}
|
{% for mt in mime_types %}
|
||||||
<option value="{{ mt }}" {% if mt == mime_type %}selected{% endif %}>{{ mt }}</option>
|
<option value="{{ mt }}" {% if mt == mime_type %}selected{% endif %}>{{ mt }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -492,31 +491,31 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label for="status">Status</label>
|
<label for="status">{{ _("common.status") }}</label>
|
||||||
<select id="status" name="status">
|
<select id="status" name="status">
|
||||||
<option value="">All Statuses</option>
|
<option value="">{{ _("files.filter_all_statuses") }}</option>
|
||||||
<option value="pending" {% if status == "pending" %}selected{% endif %}>Pending</option>
|
<option value="pending" {% if status == "pending" %}selected{% endif %}>{{ _("common.pending") }}</option>
|
||||||
<option value="processing" {% if status == "processing" %}selected{% endif %}>Processing</option>
|
<option value="processing" {% if status == "processing" %}selected{% endif %}>{{ _("common.processing") }}</option>
|
||||||
<option value="completed" {% if status == "completed" %}selected{% endif %}>Completed</option>
|
<option value="completed" {% if status == "completed" %}selected{% endif %}>{{ _("common.completed") }}</option>
|
||||||
<option value="failed" {% if status == "failed" %}selected{% endif %}>Failed</option>
|
<option value="failed" {% if status == "failed" %}selected{% endif %}>{{ _("common.failed") }}</option>
|
||||||
<option value="duplicate" {% if status == "duplicate" %}selected{% endif %}>Duplicate</option>
|
<option value="duplicate" {% if status == "duplicate" %}selected{% endif %}>{{ _("files.status_duplicate") }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label for="date_from">Date From</label>
|
<label for="date_from">{{ _("files.filter_date_from") }}</label>
|
||||||
<input type="date" id="date_from" name="date_from" value="{{ date_from }}" aria-label="Filter from date">
|
<input type="date" id="date_from" name="date_from" value="{{ date_from }}" aria-label="{{ _('files.filter_date_from_aria') }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label for="date_to">Date To</label>
|
<label for="date_to">{{ _("files.filter_date_to") }}</label>
|
||||||
<input type="date" id="date_to" name="date_to" value="{{ date_to }}" aria-label="Filter to date">
|
<input type="date" id="date_to" name="date_to" value="{{ date_to }}" aria-label="{{ _('files.filter_date_to_aria') }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label for="storage_provider">Storage Provider</label>
|
<label for="storage_provider">{{ _("files.filter_storage_provider") }}</label>
|
||||||
<select id="storage_provider" name="storage_provider">
|
<select id="storage_provider" name="storage_provider">
|
||||||
<option value="">All Providers</option>
|
<option value="">{{ _("files.filter_all_providers") }}</option>
|
||||||
<option value="dropbox" {% if storage_provider == "dropbox" %}selected{% endif %}>Dropbox</option>
|
<option value="dropbox" {% if storage_provider == "dropbox" %}selected{% endif %}>Dropbox</option>
|
||||||
<option value="google_drive" {% if storage_provider == "google_drive" %}selected{% endif %}>Google Drive</option>
|
<option value="google_drive" {% if storage_provider == "google_drive" %}selected{% endif %}>Google Drive</option>
|
||||||
<option value="onedrive" {% if storage_provider == "onedrive" %}selected{% endif %}>OneDrive</option>
|
<option value="onedrive" {% if storage_provider == "onedrive" %}selected{% endif %}>OneDrive</option>
|
||||||
@@ -530,28 +529,28 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label for="tags">Tags</label>
|
<label for="tags">{{ _("files.tags") }}</label>
|
||||||
<input type="text" id="tags" name="tags" value="{{ tags }}" placeholder="e.g. invoice,amazon" aria-label="Filter by tags (comma-separated)">
|
<input type="text" id="tags" name="tags" value="{{ tags }}" placeholder="{{ _('files.filter_tags_placeholder') }}" aria-label="{{ _('files.filter_tags_aria') }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label for="ocr_quality">OCR Quality</label>
|
<label for="ocr_quality">{{ _("files.filter_ocr_quality") }}</label>
|
||||||
<select id="ocr_quality" name="ocr_quality" aria-label="Filter by OCR quality score">
|
<select id="ocr_quality" name="ocr_quality" aria-label="{{ _('files.filter_ocr_quality_aria') }}">
|
||||||
<option value="">All Files</option>
|
<option value="">{{ _("files.filter_ocr_all") }}</option>
|
||||||
<option value="poor" {% if ocr_quality == "poor" %}selected{% endif %} aria-label="Poor quality, score less than {{ ocr_quality_threshold }}">Poor (score < {{ ocr_quality_threshold }})</option>
|
<option value="poor" {% if ocr_quality == "poor" %}selected{% endif %} aria-label="Poor quality, score less than {{ ocr_quality_threshold }}">{{ _("files.filter_ocr_poor") }} (score < {{ ocr_quality_threshold }})</option>
|
||||||
<option value="good" {% if ocr_quality == "good" %}selected{% endif %} aria-label="Good quality, score at least {{ ocr_quality_threshold }}">Good (score ≥ {{ ocr_quality_threshold }})</option>
|
<option value="good" {% if ocr_quality == "good" %}selected{% endif %} aria-label="Good quality, score at least {{ ocr_quality_threshold }}">{{ _("files.filter_ocr_good") }} (score ≥ {{ ocr_quality_threshold }})</option>
|
||||||
<option value="unchecked" {% if ocr_quality == "unchecked" %}selected{% endif %} aria-label="Not yet assessed">Not yet assessed</option>
|
<option value="unchecked" {% if ocr_quality == "unchecked" %}selected{% endif %} aria-label="Not yet assessed">{{ _("files.filter_ocr_unchecked") }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label> </label>
|
<label> </label>
|
||||||
<button type="submit">Apply Filters</button>
|
<button type="submit">{{ _("files.filter_apply") }}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<label> </label>
|
<label> </label>
|
||||||
<button type="button" class="clear" onclick="clearFilters()">Clear</button>
|
<button type="button" class="clear" onclick="clearFilters()">{{ _("files.filter_clear") }}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Hidden fields to preserve sort order -->
|
<!-- Hidden fields to preserve sort order -->
|
||||||
@@ -565,13 +564,13 @@
|
|||||||
<div class="filters-section" style="margin-top: 0.5rem;">
|
<div class="filters-section" style="margin-top: 0.5rem;">
|
||||||
<div style="display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; width: 100%;">
|
<div style="display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; width: 100%;">
|
||||||
<label style="font-weight: 600; font-size: 0.85rem; white-space: nowrap;">
|
<label style="font-weight: 600; font-size: 0.85rem; white-space: nowrap;">
|
||||||
<i class="fas fa-bookmark" aria-hidden="true"></i> Saved Searches:
|
<i class="fas fa-bookmark" aria-hidden="true"></i> {{ _("files.saved_searches_label") }}
|
||||||
</label>
|
</label>
|
||||||
<div id="saved-searches-list" style="display: flex; gap: 0.25rem; flex-wrap: wrap;" aria-live="polite">
|
<div id="saved-searches-list" style="display: flex; gap: 0.25rem; flex-wrap: wrap;" aria-live="polite">
|
||||||
<span style="color: var(--text-muted); font-size: 0.85rem;">Loading...</span>
|
<span style="color: var(--text-muted); font-size: 0.85rem;">{{ _("common.loading") }}</span>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" onclick="saveCurrentFilters()" class="btn-save-search" style="margin-left: auto; font-size: 0.8rem; padding: 0.25rem 0.5rem; cursor: pointer;" aria-label="Save current filters as a saved search">
|
<button type="button" onclick="saveCurrentFilters()" class="btn-save-search" style="margin-left: auto; font-size: 0.8rem; padding: 0.25rem 0.5rem; cursor: pointer;" aria-label="{{ _('files.saved_searches_save_aria') }}">
|
||||||
<i class="fas fa-plus" aria-hidden="true"></i> Save Current
|
<i class="fas fa-plus" aria-hidden="true"></i> {{ _("files.saved_searches_save") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -580,13 +579,13 @@
|
|||||||
<div class="filters-section" style="margin-top: 0.75rem;">
|
<div class="filters-section" style="margin-top: 0.75rem;">
|
||||||
<div style="width: 100%;">
|
<div style="width: 100%;">
|
||||||
<label for="fulltext-search" style="font-weight: 600; display: block; margin-bottom: 0.4rem;">
|
<label for="fulltext-search" style="font-weight: 600; display: block; margin-bottom: 0.4rem;">
|
||||||
<i class="fas fa-search" aria-hidden="true"></i> Full-Text Search (OCR text, metadata, tags)
|
<i class="fas fa-search" aria-hidden="true"></i> {{ _("files.fulltext_search_label") }}
|
||||||
</label>
|
</label>
|
||||||
<div style="display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap;">
|
<div style="display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap;">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
id="fulltext-search"
|
id="fulltext-search"
|
||||||
placeholder="Search document content, sender, tags, type..."
|
placeholder="{{ _('files.fulltext_search_placeholder') }}"
|
||||||
style="flex: 1; min-width: 220px; padding: 0.5rem 0.75rem; border: 1px solid #d1d5db; border-radius: 0.375rem; font-size: 0.875rem;"
|
style="flex: 1; min-width: 220px; padding: 0.5rem 0.75rem; border: 1px solid #d1d5db; border-radius: 0.375rem; font-size: 0.875rem;"
|
||||||
oninput="debounceSearch(this.value)"
|
oninput="debounceSearch(this.value)"
|
||||||
>
|
>
|
||||||
@@ -595,14 +594,14 @@
|
|||||||
onclick="runFullTextSearch()"
|
onclick="runFullTextSearch()"
|
||||||
style="padding: 0.5rem 1rem; background-color: #3182ce; color: white; border: none; border-radius: 0.375rem; cursor: pointer; font-size: 0.875rem; white-space: nowrap;"
|
style="padding: 0.5rem 1rem; background-color: #3182ce; color: white; border: none; border-radius: 0.375rem; cursor: pointer; font-size: 0.875rem; white-space: nowrap;"
|
||||||
>
|
>
|
||||||
Search
|
{{ _("common.search") }}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onclick="clearFullTextSearch()"
|
onclick="clearFullTextSearch()"
|
||||||
style="padding: 0.5rem 1rem; background-color: #6b7280; color: white; border: none; border-radius: 0.375rem; cursor: pointer; font-size: 0.875rem; white-space: nowrap;"
|
style="padding: 0.5rem 1rem; background-color: #6b7280; color: white; border: none; border-radius: 0.375rem; cursor: pointer; font-size: 0.875rem; white-space: nowrap;"
|
||||||
>
|
>
|
||||||
Clear
|
{{ _("files.filter_clear") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -621,23 +620,23 @@
|
|||||||
<div id="bulkActionsBar" class="filters-section" style="display: none; background-color: #e6f3ff;">
|
<div id="bulkActionsBar" class="filters-section" style="display: none; background-color: #e6f3ff;">
|
||||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3">
|
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3">
|
||||||
<div>
|
<div>
|
||||||
<strong id="selectedCount">0</strong> files selected
|
<strong id="selectedCount">0</strong> {{ _("files.files_selected") }}
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap gap-2">
|
<div class="flex flex-wrap gap-2">
|
||||||
<button type="button" onclick="bulkReprocess()" style="padding: 0.5rem 1rem; background-color: #3182ce; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
<button type="button" onclick="bulkReprocess()" style="padding: 0.5rem 1rem; background-color: #3182ce; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
||||||
<i class="fas fa-sync" aria-hidden="true"></i> Reprocess Selected
|
<i class="fas fa-sync" aria-hidden="true"></i> {{ _("files.bulk_reprocess") }}
|
||||||
</button>
|
</button>
|
||||||
<button type="button" onclick="bulkReprocessCloudOcr()" style="padding: 0.5rem 1rem; background-color: #805ad5; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
<button type="button" onclick="bulkReprocessCloudOcr()" style="padding: 0.5rem 1rem; background-color: #805ad5; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
||||||
<i class="fas fa-cloud" aria-hidden="true"></i> Re-run Cloud OCR
|
<i class="fas fa-cloud" aria-hidden="true"></i> {{ _("files.bulk_cloud_ocr") }}
|
||||||
</button>
|
</button>
|
||||||
<button type="button" onclick="bulkDownload()" style="padding: 0.5rem 1rem; background-color: #38a169; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
<button type="button" onclick="bulkDownload()" style="padding: 0.5rem 1rem; background-color: #38a169; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
||||||
<i class="fas fa-file-archive" aria-hidden="true"></i> Download as ZIP
|
<i class="fas fa-file-archive" aria-hidden="true"></i> {{ _("files.bulk_download") }}
|
||||||
</button>
|
</button>
|
||||||
<button type="button" onclick="bulkDelete()" style="padding: 0.5rem 1rem; background-color: #e53e3e; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
<button type="button" onclick="bulkDelete()" style="padding: 0.5rem 1rem; background-color: #e53e3e; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
||||||
<i class="fas fa-trash" aria-hidden="true"></i> Delete Selected
|
<i class="fas fa-trash" aria-hidden="true"></i> {{ _("files.bulk_delete") }}
|
||||||
</button>
|
</button>
|
||||||
<button type="button" onclick="clearSelection()" style="padding: 0.5rem 1rem; background-color: #718096; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
<button type="button" onclick="clearSelection()" style="padding: 0.5rem 1rem; background-color: #718096; color: white; border: none; border-radius: 0.25rem; cursor: pointer; font-weight: 600; min-height: 44px;">
|
||||||
Clear Selection
|
{{ _("files.bulk_clear_selection") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -645,14 +644,14 @@
|
|||||||
|
|
||||||
<!-- File table (desktop) -->
|
<!-- File table (desktop) -->
|
||||||
<div class="hidden md:block overflow-x-auto">
|
<div class="hidden md:block overflow-x-auto">
|
||||||
<table class="file-table" id="fileTable" aria-label="File records">
|
<table class="file-table" id="fileTable" aria-label="{{ _('files.table_aria') }}">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col" style="width: 40px;">
|
<th scope="col" style="width: 40px;">
|
||||||
<input type="checkbox" id="selectAll" onclick="toggleSelectAll()" title="Select all files on this page" aria-label="Select all files on this page">
|
<input type="checkbox" id="selectAll" onclick="toggleSelectAll()" title="{{ _('files.table_select_all') }}" aria-label="{{ _('files.table_select_all') }}">
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="sortable" onclick="sortTable('id')" role="columnheader" aria-sort="{% if sort_by == 'id' %}{% if sort_order == 'asc' %}ascending{% else %}descending{% endif %}{% else %}none{% endif %}">
|
<th scope="col" class="sortable" onclick="sortTable('id')" role="columnheader" aria-sort="{% if sort_by == 'id' %}{% if sort_order == 'asc' %}ascending{% else %}descending{% endif %}{% else %}none{% endif %}">
|
||||||
ID
|
{{ _("files.table_id") }}
|
||||||
<span class="sort-indicator {% if sort_by == 'id' %}active{% endif %}">
|
<span class="sort-indicator {% if sort_by == 'id' %}active{% endif %}">
|
||||||
{% if sort_by == 'id' %}
|
{% if sort_by == 'id' %}
|
||||||
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
||||||
@@ -662,7 +661,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="sortable" onclick="sortTable('original_filename')">
|
<th scope="col" class="sortable" onclick="sortTable('original_filename')">
|
||||||
Original Filename
|
{{ _("files.table_original_filename") }}
|
||||||
<span class="sort-indicator {% if sort_by == 'original_filename' %}active{% endif %}">
|
<span class="sort-indicator {% if sort_by == 'original_filename' %}active{% endif %}">
|
||||||
{% if sort_by == 'original_filename' %}
|
{% if sort_by == 'original_filename' %}
|
||||||
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
||||||
@@ -672,7 +671,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="sortable" onclick="sortTable('file_size')">
|
<th scope="col" class="sortable" onclick="sortTable('file_size')">
|
||||||
File Size
|
{{ _("files.file_size") }}
|
||||||
<span class="sort-indicator {% if sort_by == 'file_size' %}active{% endif %}">
|
<span class="sort-indicator {% if sort_by == 'file_size' %}active{% endif %}">
|
||||||
{% if sort_by == 'file_size' %}
|
{% if sort_by == 'file_size' %}
|
||||||
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
||||||
@@ -682,7 +681,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="sortable" onclick="sortTable('mime_type')">
|
<th scope="col" class="sortable" onclick="sortTable('mime_type')">
|
||||||
MIME Type
|
{{ _("files.table_mime_type") }}
|
||||||
<span class="sort-indicator {% if sort_by == 'mime_type' %}active{% endif %}">
|
<span class="sort-indicator {% if sort_by == 'mime_type' %}active{% endif %}">
|
||||||
{% if sort_by == 'mime_type' %}
|
{% if sort_by == 'mime_type' %}
|
||||||
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
||||||
@@ -691,9 +690,9 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th scope="col">Status</th>
|
<th scope="col">{{ _("common.status") }}</th>
|
||||||
<th scope="col" class="sortable" onclick="sortTable('created_at')">
|
<th scope="col" class="sortable" onclick="sortTable('created_at')">
|
||||||
Created At
|
{{ _("files.table_created_at") }}
|
||||||
<span class="sort-indicator {% if sort_by == 'created_at' %}active{% endif %}">
|
<span class="sort-indicator {% if sort_by == 'created_at' %}active{% endif %}">
|
||||||
{% if sort_by == 'created_at' %}
|
{% if sort_by == 'created_at' %}
|
||||||
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
{% if sort_order == 'asc' %}▲{% else %}▼{% endif %}
|
||||||
@@ -702,7 +701,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th scope="col">Actions</th>
|
<th scope="col">{{ _("files.table_actions") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -737,7 +736,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="8" class="text-center py-4">No files found</td>
|
<td colspan="8" class="text-center py-4">{{ _("files.table_empty") }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -779,33 +778,33 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p class="text-center py-4 text-gray-500">No files found</p>
|
<p class="text-center py-4 text-gray-500">{{ _("files.table_empty") }}</p>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Pagination -->
|
<!-- Pagination -->
|
||||||
{% if pagination.pages > 1 %}
|
{% if pagination.pages > 1 %}
|
||||||
<nav class="pagination flex-wrap gap-2" aria-label="File list pagination">
|
<nav class="pagination flex-wrap gap-2" aria-label="{{ _('files.pagination_nav_aria') }}">
|
||||||
<div class="pagination-info" aria-live="polite">
|
<div class="pagination-info" aria-live="polite">
|
||||||
Showing {{ ((pagination.page - 1) * pagination.per_page + 1) }} -
|
{{ _("files.pagination_showing") }} {{ ((pagination.page - 1) * pagination.per_page + 1) }} -
|
||||||
{{ min(pagination.page * pagination.per_page, pagination.total) }}
|
{{ min(pagination.page * pagination.per_page, pagination.total) }}
|
||||||
of {{ pagination.total }} files
|
{{ _("files.pagination_of") }} {{ pagination.total }} {{ _("files.pagination_files") }}
|
||||||
</div>
|
</div>
|
||||||
<div class="pagination-buttons flex-wrap">
|
<div class="pagination-buttons flex-wrap">
|
||||||
{% if pagination.page > 1 %}
|
{% if pagination.page > 1 %}
|
||||||
<button class="pagination-button" onclick="goToPage(1)" aria-label="Go to first page" style="min-height:44px;">First</button>
|
<button class="pagination-button" onclick="goToPage(1)" aria-label="{{ _('files.pagination_first') }}" style="min-height:44px;">{{ _("files.pagination_first") }}</button>
|
||||||
<button class="pagination-button" onclick="goToPage({{ pagination.page - 1 }})" aria-label="Go to previous page" style="min-height:44px;">Previous</button>
|
<button class="pagination-button" onclick="goToPage({{ pagination.page - 1 }})" aria-label="{{ _('files.pagination_previous') }}" style="min-height:44px;">{{ _("files.pagination_previous") }}</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% for p in range(max(1, pagination.page - 2), min(pagination.pages + 1, pagination.page + 3)) %}
|
{% for p in range(max(1, pagination.page - 2), min(pagination.pages + 1, pagination.page + 3)) %}
|
||||||
<button class="pagination-button {% if p == pagination.page %}active{% endif %}" onclick="goToPage({{ p }})" aria-label="Page {{ p }}" {% if p == pagination.page %}aria-current="page"{% endif %} style="min-height:44px;">
|
<button class="pagination-button {% if p == pagination.page %}active{% endif %}" onclick="goToPage({{ p }})" aria-label="{{ _('common.page') }} {{ p }}" {% if p == pagination.page %}aria-current="page"{% endif %} style="min-height:44px;">
|
||||||
{{ p }}
|
{{ p }}
|
||||||
</button>
|
</button>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% if pagination.page < pagination.pages %}
|
{% if pagination.page < pagination.pages %}
|
||||||
<button class="pagination-button" onclick="goToPage({{ pagination.page + 1 }})" aria-label="Go to next page" style="min-height:44px;">Next</button>
|
<button class="pagination-button" onclick="goToPage({{ pagination.page + 1 }})" aria-label="{{ _('files.pagination_next') }}" style="min-height:44px;">{{ _("files.pagination_next") }}</button>
|
||||||
<button class="pagination-button" onclick="goToPage({{ pagination.pages }})" aria-label="Go to last page" style="min-height:44px;">Last</button>
|
<button class="pagination-button" onclick="goToPage({{ pagination.pages }})" aria-label="{{ _('files.pagination_last') }}" style="min-height:44px;">{{ _("files.pagination_last") }}</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -814,11 +813,11 @@
|
|||||||
<!-- Delete confirmation modal -->
|
<!-- Delete confirmation modal -->
|
||||||
<div id="deleteModal" class="modal" role="dialog" aria-modal="true" aria-labelledby="deleteModalTitle">
|
<div id="deleteModal" class="modal" role="dialog" aria-modal="true" aria-labelledby="deleteModalTitle">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-title" id="deleteModalTitle">Confirm Deletion</div>
|
<div class="modal-title" id="deleteModalTitle">{{ _("files.delete_modal_title") }}</div>
|
||||||
<p>Are you sure you want to delete this file?</p>
|
<p>{{ _("files.delete_modal_message") }}</p>
|
||||||
<div class="modal-buttons">
|
<div class="modal-buttons">
|
||||||
<button id="cancelDelete" class="modal-btn modal-btn-cancel" style="min-height:44px;min-width:80px;">Cancel</button>
|
<button id="cancelDelete" class="modal-btn modal-btn-cancel" style="min-height:44px;min-width:80px;">{{ _("files.delete_modal_cancel") }}</button>
|
||||||
<button id="confirmDelete" class="modal-btn modal-btn-delete" style="min-height:44px;min-width:80px;">Delete</button>
|
<button id="confirmDelete" class="modal-btn modal-btn-delete" style="min-height:44px;min-width:80px;">{{ _("files.delete_modal_confirm") }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -827,8 +826,8 @@
|
|||||||
<div id="previewOverlay" class="preview-overlay" role="dialog" aria-modal="true" aria-labelledby="previewTitle">
|
<div id="previewOverlay" class="preview-overlay" role="dialog" aria-modal="true" aria-labelledby="previewTitle">
|
||||||
<div class="preview-panel">
|
<div class="preview-panel">
|
||||||
<div class="preview-panel-header">
|
<div class="preview-panel-header">
|
||||||
<h3 id="previewTitle">Preview</h3>
|
<h3 id="previewTitle">{{ _("files.preview_modal_title") }}</h3>
|
||||||
<button class="preview-panel-close" onclick="closePreviewModal()" aria-label="Close preview">
|
<button class="preview-panel-close" onclick="closePreviewModal()" aria-label="{{ _('files.preview_modal_close') }}">
|
||||||
<i class="fas fa-times" aria-hidden="true"></i>
|
<i class="fas fa-times" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+84
-102
@@ -1,16 +1,16 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Help Center – DocuElevate{% endblock %}
|
{% block title %}{{ _("help.page_title") }} – DocuElevate{% endblock %}
|
||||||
|
|
||||||
{% block head_extra %}
|
{% block head_extra %}
|
||||||
<!-- SEO meta tags -->
|
<!-- SEO meta tags -->
|
||||||
<meta name="description" content="DocuElevate Help Center – learn how to upload, process, and route your documents automatically. Get started with sources, destinations, workflows, and integrations.">
|
<meta name="description" content="{{ _('help.meta_description') }}">
|
||||||
<meta name="keywords" content="DocuElevate, help, support, document processing, OCR, cloud storage, workflow automation, SaaS">
|
<meta name="keywords" content="DocuElevate, help, support, document processing, OCR, cloud storage, workflow automation, SaaS">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<link rel="canonical" href="https://{{ external_hostname }}/help">
|
<link rel="canonical" href="https://{{ external_hostname }}/help">
|
||||||
|
|
||||||
<!-- Open Graph -->
|
<!-- Open Graph -->
|
||||||
<meta property="og:title" content="Help Center – DocuElevate">
|
<meta property="og:title" content="{{ _('help.page_title') }} – DocuElevate">
|
||||||
<meta property="og:description" content="Everything you need to get started with DocuElevate: upload documents, automate workflows, and connect your favourite cloud storage.">
|
<meta property="og:description" content="{{ _('help.og_description') }}">
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:url" content="https://{{ external_hostname }}/help">
|
<meta property="og:url" content="https://{{ external_hostname }}/help">
|
||||||
|
|
||||||
@@ -63,18 +63,17 @@
|
|||||||
<!-- ═══════════════════════ Hero Section ═══════════════════════ -->
|
<!-- ═══════════════════════ Hero Section ═══════════════════════ -->
|
||||||
<header class="text-center mb-14">
|
<header class="text-center mb-14">
|
||||||
<h1 class="text-4xl md:text-5xl font-extrabold text-gray-900 mb-4">
|
<h1 class="text-4xl md:text-5xl font-extrabold text-gray-900 mb-4">
|
||||||
<i class="fas fa-life-ring text-blue-500 mr-2" aria-hidden="true"></i>Help Center
|
<i class="fas fa-life-ring text-blue-500 mr-2" aria-hidden="true"></i>{{ _("help.heading") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-lg md:text-xl text-gray-600 max-w-2xl mx-auto leading-relaxed">
|
<p class="text-lg md:text-xl text-gray-600 max-w-2xl mx-auto leading-relaxed">
|
||||||
Everything you need to get the most out of DocuElevate.
|
{{ _("help.subheading") }}
|
||||||
Browse topics below or search for what you need.
|
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- ═══════════════════════ Quick-start Cards ═══════════════════════ -->
|
<!-- ═══════════════════════ Quick-start Cards ═══════════════════════ -->
|
||||||
<section aria-labelledby="quickstart-heading" class="mb-16">
|
<section aria-labelledby="quickstart-heading" class="mb-16">
|
||||||
<h2 id="quickstart-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
<h2 id="quickstart-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
||||||
<i class="fas fa-rocket text-blue-500 mr-2" aria-hidden="true"></i>Quick Start
|
<i class="fas fa-rocket text-blue-500 mr-2" aria-hidden="true"></i>{{ _("help.quickstart_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
|
<div class="grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
|
||||||
|
|
||||||
@@ -84,11 +83,10 @@
|
|||||||
<span class="flex items-center justify-center w-10 h-10 rounded-full bg-blue-100 text-blue-600 mr-3" aria-hidden="true">
|
<span class="flex items-center justify-center w-10 h-10 rounded-full bg-blue-100 text-blue-600 mr-3" aria-hidden="true">
|
||||||
<i class="fas fa-cloud-arrow-up"></i>
|
<i class="fas fa-cloud-arrow-up"></i>
|
||||||
</span>
|
</span>
|
||||||
<h3 class="text-lg font-semibold text-gray-800">Upload Documents</h3>
|
<h3 class="text-lg font-semibold text-gray-800">{{ _("help.quickstart_upload") }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-gray-600 text-sm leading-relaxed">
|
<p class="text-gray-600 text-sm leading-relaxed">
|
||||||
Drag & drop files onto the <strong>Upload</strong> page or click <em>Choose File</em>.
|
{{ _("help.quickstart_upload_desc") }}
|
||||||
DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
@@ -98,11 +96,10 @@
|
|||||||
<span class="flex items-center justify-center w-10 h-10 rounded-full bg-green-100 text-green-600 mr-3" aria-hidden="true">
|
<span class="flex items-center justify-center w-10 h-10 rounded-full bg-green-100 text-green-600 mr-3" aria-hidden="true">
|
||||||
<i class="fas fa-plug"></i>
|
<i class="fas fa-plug"></i>
|
||||||
</span>
|
</span>
|
||||||
<h3 class="text-lg font-semibold text-gray-800">Connect Storage</h3>
|
<h3 class="text-lg font-semibold text-gray-800">{{ _("help.quickstart_storage") }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-gray-600 text-sm leading-relaxed">
|
<p class="text-gray-600 text-sm leading-relaxed">
|
||||||
Head to <strong>Settings → Integrations</strong> and link your cloud accounts.
|
{{ _("help.quickstart_storage_desc_full") }}
|
||||||
Processed documents are automatically routed to every destination you configure.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
@@ -112,11 +109,10 @@
|
|||||||
<span class="flex items-center justify-center w-10 h-10 rounded-full bg-purple-100 text-purple-600 mr-3" aria-hidden="true">
|
<span class="flex items-center justify-center w-10 h-10 rounded-full bg-purple-100 text-purple-600 mr-3" aria-hidden="true">
|
||||||
<i class="fas fa-wand-magic-sparkles"></i>
|
<i class="fas fa-wand-magic-sparkles"></i>
|
||||||
</span>
|
</span>
|
||||||
<h3 class="text-lg font-semibold text-gray-800">Automate Workflows</h3>
|
<h3 class="text-lg font-semibold text-gray-800">{{ _("help.quickstart_workflows") }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-gray-600 text-sm leading-relaxed">
|
<p class="text-gray-600 text-sm leading-relaxed">
|
||||||
Create <strong>Pipelines</strong> to define multi-step processing and routing rules.
|
{{ _("help.quickstart_workflows_desc") }}
|
||||||
Combine OCR, AI extraction, format conversion, and delivery in a single flow.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
@@ -126,39 +122,35 @@
|
|||||||
<!-- ═══════════════════════ Sources ═══════════════════════ -->
|
<!-- ═══════════════════════ Sources ═══════════════════════ -->
|
||||||
<section aria-labelledby="sources-heading" class="mb-16">
|
<section aria-labelledby="sources-heading" class="mb-16">
|
||||||
<h2 id="sources-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
<h2 id="sources-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
||||||
<i class="fas fa-arrow-right-to-bracket text-blue-500 mr-2" aria-hidden="true"></i>Sources – Getting Documents In
|
<i class="fas fa-arrow-right-to-bracket text-blue-500 mr-2" aria-hidden="true"></i>{{ _("help.sources_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="grid gap-6 sm:grid-cols-2">
|
<div class="grid gap-6 sm:grid-cols-2">
|
||||||
|
|
||||||
<article class="bg-white shadow rounded-lg p-6">
|
<article class="bg-white shadow rounded-lg p-6">
|
||||||
<h3 class="font-semibold text-gray-800 mb-2"><i class="fas fa-upload mr-2 text-gray-400" aria-hidden="true"></i>Web Upload</h3>
|
<h3 class="font-semibold text-gray-800 mb-2"><i class="fas fa-upload mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.sources_web_upload") }}</h3>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600 text-sm">
|
||||||
The fastest way to get started. Open the <strong>Upload</strong> page, drop one or more files, and DocuElevate takes care of the rest.
|
{{ _("help.sources_web_upload_desc") }}
|
||||||
Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article class="bg-white shadow rounded-lg p-6">
|
<article class="bg-white shadow rounded-lg p-6">
|
||||||
<h3 class="font-semibold text-gray-800 mb-2"><i class="fas fa-envelope-open-text mr-2 text-gray-400" aria-hidden="true"></i>Email Ingestion (IMAP)</h3>
|
<h3 class="font-semibold text-gray-800 mb-2"><i class="fas fa-envelope-open-text mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.sources_email_ingestion") }}</h3>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600 text-sm">
|
||||||
Forward documents to a dedicated mailbox. Under <strong>Email Ingestion</strong>, add one or more IMAP accounts.
|
{{ _("help.sources_email_ingestion_desc") }}
|
||||||
DocuElevate polls for new messages and processes attachments automatically.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article class="bg-white shadow rounded-lg p-6">
|
<article class="bg-white shadow rounded-lg p-6">
|
||||||
<h3 class="font-semibold text-gray-800 mb-2"><i class="fas fa-code mr-2 text-gray-400" aria-hidden="true"></i>REST API</h3>
|
<h3 class="font-semibold text-gray-800 mb-2"><i class="fas fa-code mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.sources_rest_api") }}</h3>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600 text-sm">
|
||||||
Integrate programmatically by <code class="bg-gray-100 px-1 rounded text-xs">POST</code>-ing files to <code class="bg-gray-100 px-1 rounded text-xs">/api/upload</code>.
|
{{ _("help.sources_rest_api_desc") }}
|
||||||
Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article class="bg-white shadow rounded-lg p-6">
|
<article class="bg-white shadow rounded-lg p-6">
|
||||||
<h3 class="font-semibold text-gray-800 mb-2"><i class="fas fa-print mr-2 text-gray-400" aria-hidden="true"></i>Scanner & Mobile</h3>
|
<h3 class="font-semibold text-gray-800 mb-2"><i class="fas fa-print mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.sources_scanner") }}</h3>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600 text-sm">
|
||||||
Point network scanners (HP, Fujitsu ScanSnap, Brother) at DocuElevate's upload endpoint or
|
{{ _("help.sources_scanner_desc_full") }}
|
||||||
use any mobile scanning app that supports custom HTTP destinations.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
@@ -168,79 +160,79 @@
|
|||||||
<!-- ═══════════════════════ Destinations ═══════════════════════ -->
|
<!-- ═══════════════════════ Destinations ═══════════════════════ -->
|
||||||
<section aria-labelledby="destinations-heading" class="mb-16">
|
<section aria-labelledby="destinations-heading" class="mb-16">
|
||||||
<h2 id="destinations-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
<h2 id="destinations-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
||||||
<i class="fas fa-arrow-right-from-bracket text-blue-500 mr-2" aria-hidden="true"></i>Destinations – Where Documents Go
|
<i class="fas fa-arrow-right-from-bracket text-blue-500 mr-2" aria-hidden="true"></i>{{ _("help.destinations_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
|
<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fab fa-dropbox text-blue-500 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fab fa-dropbox text-blue-500 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">Dropbox</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_dropbox") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">OAuth-linked. Files land in your chosen folder.</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_dropbox_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fab fa-google-drive text-green-500 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fab fa-google-drive text-green-500 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">Google Drive</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_google_drive") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">Service account or OAuth. Supports shared drives.</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_google_drive_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fab fa-microsoft text-blue-600 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fab fa-microsoft text-blue-600 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">OneDrive</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_onedrive") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">Microsoft Graph API integration.</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_onedrive_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fab fa-aws text-yellow-600 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fab fa-aws text-yellow-600 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">Amazon S3</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_s3") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">Any S3-compatible bucket (AWS, MinIO, Wasabi).</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_s3_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fas fa-cloud text-blue-400 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fas fa-cloud text-blue-400 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">Nextcloud / WebDAV</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_nextcloud") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">Self-hosted cloud storage via WebDAV.</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_nextcloud_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fas fa-leaf text-green-600 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fas fa-leaf text-green-600 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">Paperless-ngx</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_paperless") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">Push documents straight into Paperless for archival.</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_paperless_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fas fa-server text-gray-500 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fas fa-server text-gray-500 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">SFTP / FTP</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_sftp") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">Secure file transfer to any server.</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_sftp_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fas fa-envelope text-red-400 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fas fa-envelope text-red-400 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">Email Forwarding</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_email") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">Processed files sent as SMTP attachments.</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_email_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
<div class="flex items-start bg-white shadow rounded-lg p-5">
|
||||||
<i class="fas fa-link text-indigo-500 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
<i class="fas fa-link text-indigo-500 text-xl mr-3 mt-0.5" aria-hidden="true"></i>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 text-sm">Webhook</h3>
|
<h3 class="font-semibold text-gray-800 text-sm">{{ _("help.destinations_webhook") }}</h3>
|
||||||
<p class="text-gray-500 text-xs">POST metadata to any external endpoint.</p>
|
<p class="text-gray-500 text-xs">{{ _("help.destinations_webhook_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -250,32 +242,31 @@
|
|||||||
<!-- ═══════════════════════ Workflows / Pipelines ═══════════════════════ -->
|
<!-- ═══════════════════════ Workflows / Pipelines ═══════════════════════ -->
|
||||||
<section aria-labelledby="workflows-heading" class="mb-16">
|
<section aria-labelledby="workflows-heading" class="mb-16">
|
||||||
<h2 id="workflows-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
<h2 id="workflows-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
||||||
<i class="fas fa-diagram-project text-blue-500 mr-2" aria-hidden="true"></i>Workflows & Pipelines
|
<i class="fas fa-diagram-project text-blue-500 mr-2" aria-hidden="true"></i>{{ _("help.workflows_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="bg-white shadow rounded-lg p-6">
|
<div class="bg-white shadow rounded-lg p-6">
|
||||||
<div class="grid gap-6 md:grid-cols-2">
|
<div class="grid gap-6 md:grid-cols-2">
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 mb-2">What is a Pipeline?</h3>
|
<h3 class="font-semibold text-gray-800 mb-2">{{ _("help.workflows_what_is") }}</h3>
|
||||||
<p class="text-gray-600 text-sm leading-relaxed mb-4">
|
<p class="text-gray-600 text-sm leading-relaxed mb-4">
|
||||||
A <strong>Pipeline</strong> is a series of processing steps that run automatically whenever a document is ingested.
|
{{ _("help.workflows_definition") }}
|
||||||
Each step can transform, enrich, or route the document.
|
|
||||||
</p>
|
</p>
|
||||||
<h3 class="font-semibold text-gray-800 mb-2">Typical Steps</h3>
|
<h3 class="font-semibold text-gray-800 mb-2">{{ _("help.workflows_typical_steps") }}</h3>
|
||||||
<ol class="list-decimal list-inside text-gray-600 text-sm space-y-1">
|
<ol class="list-decimal list-inside text-gray-600 text-sm space-y-1">
|
||||||
<li>Convert to PDF (Gotenberg)</li>
|
<li>{{ _("help.workflows_step_1_full") }}</li>
|
||||||
<li>OCR – extract text (Azure, Tesseract, Mistral …)</li>
|
<li>{{ _("help.workflows_step_2_full") }}</li>
|
||||||
<li>AI metadata extraction (OpenAI, Claude, Gemini …)</li>
|
<li>{{ _("help.workflows_step_3_full") }}</li>
|
||||||
<li>Deliver to one or more destinations</li>
|
<li>{{ _("help.workflows_step_4") }}</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 mb-2">Creating a Pipeline</h3>
|
<h3 class="font-semibold text-gray-800 mb-2">{{ _("help.workflows_creating") }}</h3>
|
||||||
<ol class="list-decimal list-inside text-gray-600 text-sm space-y-2 leading-relaxed">
|
<ol class="list-decimal list-inside text-gray-600 text-sm space-y-2 leading-relaxed">
|
||||||
<li>Go to <strong>Pipelines</strong> in the main menu.</li>
|
<li>{{ _("help.workflows_step_1_create") }}</li>
|
||||||
<li>Click <em>New Pipeline</em> and give it a name.</li>
|
<li>{{ _("help.workflows_step_2_create") }}</li>
|
||||||
<li>Add the processing steps you need.</li>
|
<li>{{ _("help.workflows_step_3_create") }}</li>
|
||||||
<li>Choose one or more delivery destinations.</li>
|
<li>{{ _("help.workflows_step_4_create") }}</li>
|
||||||
<li>Save – new documents will be processed through this pipeline automatically.</li>
|
<li>{{ _("help.workflows_step_5_create") }}</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -285,47 +276,43 @@
|
|||||||
<!-- ═══════════════════════ Data Ingestion Tools ═══════════════════════ -->
|
<!-- ═══════════════════════ Data Ingestion Tools ═══════════════════════ -->
|
||||||
<section aria-labelledby="ingestion-heading" class="mb-16">
|
<section aria-labelledby="ingestion-heading" class="mb-16">
|
||||||
<h2 id="ingestion-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
<h2 id="ingestion-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
||||||
<i class="fas fa-toolbox text-blue-500 mr-2" aria-hidden="true"></i>Ingesting Data with Standard Tools
|
<i class="fas fa-toolbox text-blue-500 mr-2" aria-hidden="true"></i>{{ _("help.ingestion_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="bg-white shadow rounded-lg p-6 space-y-6">
|
<div class="bg-white shadow rounded-lg p-6 space-y-6">
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-terminal mr-2 text-gray-400" aria-hidden="true"></i>cURL</h3>
|
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-terminal mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.ingestion_curl") }}</h3>
|
||||||
<p class="text-gray-600 text-sm mb-2">Upload a file from any terminal:</p>
|
<p class="text-gray-600 text-sm mb-2">{{ _("help.ingestion_curl_desc") }}</p>
|
||||||
<pre class="bg-gray-50 text-sm rounded p-3 overflow-x-auto"><code>curl -X POST https://your-instance/api/upload \
|
<pre class="bg-gray-50 text-sm rounded p-3 overflow-x-auto"><code>curl -X POST https://your-instance/api/upload \
|
||||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||||
-F "file=@/path/to/document.pdf"</code></pre>
|
-F "file=@/path/to/document.pdf"</code></pre>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-folder-open mr-2 text-gray-400" aria-hidden="true"></i>Watched Folders</h3>
|
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-folder-open mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.ingestion_watched_folders") }}</h3>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600 text-sm">
|
||||||
Use <strong>inotifywait</strong> (Linux), <strong>fswatch</strong> (macOS), or any file-watcher script to
|
{{ _("help.ingestion_watched_folders_desc") }}
|
||||||
<code class="bg-gray-100 px-1 rounded text-xs">POST</code> new files as soon as they appear in a local directory.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-print mr-2 text-gray-400" aria-hidden="true"></i>Network Scanners</h3>
|
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-print mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.ingestion_scanners") }}</h3>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600 text-sm">
|
||||||
Configure your HP, Fujitsu ScanSnap, or Brother scanner to use DocuElevate's upload URL as a
|
{{ _("help.ingestion_scanners_desc") }}
|
||||||
<em>Scan-to-Network</em> destination. Scans are processed the moment they arrive.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-mobile-screen-button mr-2 text-gray-400" aria-hidden="true"></i>Mobile Scanning Apps</h3>
|
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-mobile-screen-button mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.ingestion_mobile") }}</h3>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600 text-sm">
|
||||||
Apps like <strong>Adobe Scan</strong>, <strong>Microsoft Lens</strong>, or <strong>Genius Scan</strong>
|
{{ _("help.ingestion_mobile_desc") }}
|
||||||
can export to a custom HTTP endpoint. Point them at <code class="bg-gray-100 px-1 rounded text-xs">/api/upload</code>.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-shuffle mr-2 text-gray-400" aria-hidden="true"></i>Zapier / n8n / Make</h3>
|
<h3 class="font-semibold text-gray-800 mb-1"><i class="fas fa-shuffle mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.ingestion_zapier") }}</h3>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600 text-sm">
|
||||||
Connect DocuElevate to thousands of other apps via integration platforms.
|
{{ _("help.ingestion_zapier_desc") }}
|
||||||
Use the HTTP/Webhook module to <code class="bg-gray-100 px-1 rounded text-xs">POST</code> files to the upload API.
|
|
||||||
</p>
|
</p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
@@ -335,7 +322,7 @@
|
|||||||
<!-- ═══════════════════════ FAQ ═══════════════════════ -->
|
<!-- ═══════════════════════ FAQ ═══════════════════════ -->
|
||||||
<section aria-labelledby="faq-heading" class="mb-16">
|
<section aria-labelledby="faq-heading" class="mb-16">
|
||||||
<h2 id="faq-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
<h2 id="faq-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
||||||
<i class="fas fa-circle-question text-blue-500 mr-2" aria-hidden="true"></i>Frequently Asked Questions
|
<i class="fas fa-circle-question text-blue-500 mr-2" aria-hidden="true"></i>{{ _("help.faq_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="space-y-4" x-data="{ open: null }">
|
<div class="space-y-4" x-data="{ open: null }">
|
||||||
|
|
||||||
@@ -345,12 +332,11 @@
|
|||||||
@click="open = open === 1 ? null : 1"
|
@click="open = open === 1 ? null : 1"
|
||||||
:aria-expanded="open === 1 ? 'true' : 'false'"
|
:aria-expanded="open === 1 ? 'true' : 'false'"
|
||||||
aria-controls="faq-1">
|
aria-controls="faq-1">
|
||||||
<span>How do I upload documents?</span>
|
<span>{{ _("help.faq_1_q") }}</span>
|
||||||
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 1 }" aria-hidden="true"></i>
|
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 1 }" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
<div id="faq-1" x-show="open === 1" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
<div id="faq-1" x-show="open === 1" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
||||||
Navigate to the <strong>Upload</strong> page, drag-and-drop your files or click <em>Choose File</em>.
|
{{ _("help.faq_1_a") }}
|
||||||
DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -360,12 +346,11 @@
|
|||||||
@click="open = open === 2 ? null : 2"
|
@click="open = open === 2 ? null : 2"
|
||||||
:aria-expanded="open === 2 ? 'true' : 'false'"
|
:aria-expanded="open === 2 ? 'true' : 'false'"
|
||||||
aria-controls="faq-2">
|
aria-controls="faq-2">
|
||||||
<span>Which file formats are supported?</span>
|
<span>{{ _("help.faq_2_q") }}</span>
|
||||||
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 2 }" aria-hidden="true"></i>
|
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 2 }" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
<div id="faq-2" x-show="open === 2" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
<div id="faq-2" x-show="open === 2" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
||||||
PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML.
|
{{ _("help.faq_2_a") }}
|
||||||
Non-PDF files are automatically converted to PDF before processing.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -375,12 +360,11 @@
|
|||||||
@click="open = open === 3 ? null : 3"
|
@click="open = open === 3 ? null : 3"
|
||||||
:aria-expanded="open === 3 ? 'true' : 'false'"
|
:aria-expanded="open === 3 ? 'true' : 'false'"
|
||||||
aria-controls="faq-3">
|
aria-controls="faq-3">
|
||||||
<span>Can I ingest documents from email?</span>
|
<span>{{ _("help.faq_3_q") }}</span>
|
||||||
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 3 }" aria-hidden="true"></i>
|
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 3 }" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
<div id="faq-3" x-show="open === 3" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
<div id="faq-3" x-show="open === 3" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
||||||
Yes. Go to <strong>Email Ingestion</strong>, add an IMAP account, and DocuElevate will poll for new
|
{{ _("help.faq_3_a") }}
|
||||||
messages and process attachments automatically.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -390,12 +374,11 @@
|
|||||||
@click="open = open === 4 ? null : 4"
|
@click="open = open === 4 ? null : 4"
|
||||||
:aria-expanded="open === 4 ? 'true' : 'false'"
|
:aria-expanded="open === 4 ? 'true' : 'false'"
|
||||||
aria-controls="faq-4">
|
aria-controls="faq-4">
|
||||||
<span>How do processing pipelines work?</span>
|
<span>{{ _("help.faq_4_q") }}</span>
|
||||||
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 4 }" aria-hidden="true"></i>
|
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 4 }" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
<div id="faq-4" x-show="open === 4" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
<div id="faq-4" x-show="open === 4" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
||||||
Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the
|
{{ _("help.faq_4_a") }}
|
||||||
result to one or more destinations. Create and manage them from the <strong>Pipelines</strong> page.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -405,12 +388,11 @@
|
|||||||
@click="open = open === 5 ? null : 5"
|
@click="open = open === 5 ? null : 5"
|
||||||
:aria-expanded="open === 5 ? 'true' : 'false'"
|
:aria-expanded="open === 5 ? 'true' : 'false'"
|
||||||
aria-controls="faq-5">
|
aria-controls="faq-5">
|
||||||
<span>Is my data secure?</span>
|
<span>{{ _("help.faq_5_q") }}</span>
|
||||||
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 5 }" aria-hidden="true"></i>
|
<i class="fas fa-chevron-down text-gray-400 transition-transform" :class="{ 'rotate-180': open === 5 }" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
<div id="faq-5" x-show="open === 5" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
<div id="faq-5" x-show="open === 5" x-collapse class="px-6 pb-4 text-gray-600 text-sm leading-relaxed">
|
||||||
DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents
|
{{ _("help.faq_5_a_pre") }}<a href="/privacy" class="text-blue-600 hover:underline">{{ _("help.privacy_notice") }}</a>{{ _("help.faq_5_a_post") }}
|
||||||
longer than necessary. See the <a href="/privacy" class="text-blue-600 hover:underline">Privacy Notice</a> for full details.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -420,7 +402,7 @@
|
|||||||
<!-- ═══════════════════════ Contact / Support ═══════════════════════ -->
|
<!-- ═══════════════════════ Contact / Support ═══════════════════════ -->
|
||||||
<section aria-labelledby="support-heading" class="mb-10">
|
<section aria-labelledby="support-heading" class="mb-10">
|
||||||
<h2 id="support-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
<h2 id="support-heading" class="text-2xl font-bold text-gray-800 mb-6">
|
||||||
<i class="fas fa-headset text-blue-500 mr-2" aria-hidden="true"></i>Contact Support
|
<i class="fas fa-headset text-blue-500 mr-2" aria-hidden="true"></i>{{ _("help.support_heading") }}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div class="grid gap-6 md:grid-cols-2">
|
<div class="grid gap-6 md:grid-cols-2">
|
||||||
@@ -428,7 +410,7 @@
|
|||||||
<!-- Left column: info -->
|
<!-- Left column: info -->
|
||||||
<div class="bg-white shadow rounded-lg p-6 space-y-4">
|
<div class="bg-white shadow rounded-lg p-6 space-y-4">
|
||||||
<p class="text-gray-600 text-sm leading-relaxed">
|
<p class="text-gray-600 text-sm leading-relaxed">
|
||||||
Can't find what you're looking for? Our support team is here to help.
|
{{ _("help.support_description") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% if support_email %}
|
{% if support_email %}
|
||||||
@@ -441,7 +423,7 @@
|
|||||||
{% if zammad_chat_enabled and zammad_url %}
|
{% if zammad_chat_enabled and zammad_url %}
|
||||||
<div class="flex items-center text-sm text-gray-700">
|
<div class="flex items-center text-sm text-gray-700">
|
||||||
<i class="fas fa-comments text-blue-500 mr-2" aria-hidden="true"></i>
|
<i class="fas fa-comments text-blue-500 mr-2" aria-hidden="true"></i>
|
||||||
<span>Live chat available – look for the chat bubble in the bottom-right corner.</span>
|
<span>{{ _("help.support_live_chat") }}</span>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@@ -450,22 +432,22 @@
|
|||||||
{% if zammad_form_enabled and zammad_url %}
|
{% if zammad_form_enabled and zammad_url %}
|
||||||
<div class="bg-white shadow rounded-lg p-6">
|
<div class="bg-white shadow rounded-lg p-6">
|
||||||
<h3 class="font-semibold text-gray-800 mb-3">
|
<h3 class="font-semibold text-gray-800 mb-3">
|
||||||
<i class="fas fa-ticket mr-2 text-gray-400" aria-hidden="true"></i>Open a Support Ticket
|
<i class="fas fa-ticket mr-2 text-gray-400" aria-hidden="true"></i>{{ _("help.support_ticket_heading") }}
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-gray-600 text-sm mb-4">
|
<p class="text-gray-600 text-sm mb-4">
|
||||||
Describe your issue below and we'll get back to you as soon as possible.
|
{{ _("help.support_ticket_desc") }}
|
||||||
</p>
|
</p>
|
||||||
<button id="zammad-feedback-form"
|
<button id="zammad-feedback-form"
|
||||||
type="button"
|
type="button"
|
||||||
class="inline-flex items-center bg-blue-600 hover:bg-blue-700 text-white font-semibold py-2 px-5 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-blue-400 min-h-[44px]">
|
class="inline-flex items-center bg-blue-600 hover:bg-blue-700 text-white font-semibold py-2 px-5 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-blue-400 min-h-[44px]">
|
||||||
<i class="fas fa-paper-plane mr-2" aria-hidden="true"></i>Submit a Ticket
|
<i class="fas fa-paper-plane mr-2" aria-hidden="true"></i>{{ _("help.support_ticket_button") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{% elif not zammad_form_enabled and not support_email and not zammad_chat_enabled %}
|
{% elif not zammad_form_enabled and not support_email and not zammad_chat_enabled %}
|
||||||
<div class="bg-white shadow rounded-lg p-6 flex flex-col items-center justify-center text-center">
|
<div class="bg-white shadow rounded-lg p-6 flex flex-col items-center justify-center text-center">
|
||||||
<i class="fas fa-info-circle text-blue-400 text-2xl mb-2" aria-hidden="true"></i>
|
<i class="fas fa-info-circle text-blue-400 text-2xl mb-2" aria-hidden="true"></i>
|
||||||
<p class="text-gray-500 text-sm">
|
<p class="text-gray-500 text-sm">
|
||||||
Contact your administrator for support information.
|
{{ _("help.support_admin_message") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}{% if multi_user_enabled and not is_logged_in %}DocuElevate – Intelligent Document Processing{% else %}Dashboard – DocuElevate{% endif %}{% endblock %}
|
{% block title %}{% if multi_user_enabled and not is_logged_in %}{{ _("index.page_title_public") }}{% else %}{{ _("index.page_title_dashboard") }}{% endif %}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="{% if multi_user_enabled and not is_logged_in %}bg-gray-50 min-h-screen{% else %}container mx-auto px-4 py-8{% endif %}">
|
<div class="{% if multi_user_enabled and not is_logged_in %}bg-gray-50 min-h-screen{% else %}container mx-auto px-4 py-8{% endif %}">
|
||||||
@@ -13,30 +13,29 @@
|
|||||||
<div class="bg-gradient-to-br from-blue-700 via-indigo-700 to-purple-700 text-white py-20 px-4">
|
<div class="bg-gradient-to-br from-blue-700 via-indigo-700 to-purple-700 text-white py-20 px-4">
|
||||||
<div class="max-w-4xl mx-auto text-center">
|
<div class="max-w-4xl mx-auto text-center">
|
||||||
<span class="inline-block bg-white/20 text-white text-xs font-semibold uppercase tracking-widest px-3 py-1 rounded-full mb-4">
|
<span class="inline-block bg-white/20 text-white text-xs font-semibold uppercase tracking-widest px-3 py-1 rounded-full mb-4">
|
||||||
Intelligent Document Processing
|
{{ _("index.badge_intelligent") }}
|
||||||
</span>
|
</span>
|
||||||
<h1 class="text-4xl sm:text-5xl font-extrabold mb-4 leading-tight">
|
<h1 class="text-4xl sm:text-5xl font-extrabold mb-4 leading-tight">
|
||||||
From upload to insight — automatically.
|
{{ _("index.hero_heading") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-indigo-100 text-lg max-w-2xl mx-auto mb-8">
|
<p class="text-indigo-100 text-lg max-w-2xl mx-auto mb-8">
|
||||||
DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to
|
{{ _("index.hero_description") }}
|
||||||
Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="flex flex-wrap justify-center gap-4">
|
<div class="flex flex-wrap justify-center gap-4">
|
||||||
{% if allow_signup %}
|
{% if allow_signup %}
|
||||||
<a href="/signup"
|
<a href="/signup"
|
||||||
class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold py-3 px-8 rounded-xl shadow-lg transition duration-200 flex items-center min-h-[44px]">
|
class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold py-3 px-8 rounded-xl shadow-lg transition duration-200 flex items-center min-h-[44px]">
|
||||||
<i class="fas fa-user-plus mr-2" aria-hidden="true"></i> Get Started — it's free
|
<i class="fas fa-user-plus mr-2" aria-hidden="true"></i> {{ _("index.hero_signup") }}
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="/login"
|
<a href="/login"
|
||||||
class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold py-3 px-8 rounded-xl shadow-lg transition duration-200 flex items-center min-h-[44px]">
|
class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold py-3 px-8 rounded-xl shadow-lg transition duration-200 flex items-center min-h-[44px]">
|
||||||
<i class="fas fa-sign-in-alt mr-2" aria-hidden="true"></i> Log In
|
<i class="fas fa-sign-in-alt mr-2" aria-hidden="true"></i> {{ _("index.hero_login") }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a href="/pricing"
|
<a href="/pricing"
|
||||||
class="bg-transparent border-2 border-white text-white hover:bg-white hover:text-indigo-700 font-bold py-3 px-8 rounded-xl transition duration-200 flex items-center min-h-[44px]">
|
class="bg-transparent border-2 border-white text-white hover:bg-white hover:text-indigo-700 font-bold py-3 px-8 rounded-xl transition duration-200 flex items-center min-h-[44px]">
|
||||||
<i class="fas fa-tags mr-2" aria-hidden="true"></i> View Plans & Pricing
|
<i class="fas fa-tags mr-2" aria-hidden="true"></i> {{ _("index.hero_pricing") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -44,7 +43,7 @@
|
|||||||
|
|
||||||
<!-- Feature grid -->
|
<!-- Feature grid -->
|
||||||
<div class="max-w-6xl mx-auto px-4 py-16">
|
<div class="max-w-6xl mx-auto px-4 py-16">
|
||||||
<h2 class="text-2xl font-bold text-center text-gray-800 mb-10">Everything you need for smart document workflows</h2>
|
<h2 class="text-2xl font-bold text-center text-gray-800 mb-10">{{ _("index.feature_section_title") }}</h2>
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||||
|
|
||||||
<div class="bg-white rounded-2xl shadow p-6 flex gap-4">
|
<div class="bg-white rounded-2xl shadow p-6 flex gap-4">
|
||||||
@@ -52,8 +51,8 @@
|
|||||||
<i class="fas fa-file-alt text-blue-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-file-alt text-blue-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1">OCR & Text Extraction</h3>
|
<h3 class="font-semibold text-gray-800 mb-1">{{ _("index.feature_ocr") }}</h3>
|
||||||
<p class="text-gray-500 text-sm">Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.</p>
|
<p class="text-gray-500 text-sm">{{ _("index.feature_ocr_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -62,8 +61,8 @@
|
|||||||
<i class="fas fa-brain text-indigo-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-brain text-indigo-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1">AI Metadata Extraction</h3>
|
<h3 class="font-semibold text-gray-800 mb-1">{{ _("index.feature_ai") }}</h3>
|
||||||
<p class="text-gray-500 text-sm">OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.</p>
|
<p class="text-gray-500 text-sm">{{ _("index.feature_ai_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -72,8 +71,8 @@
|
|||||||
<i class="fas fa-cloud-upload-alt text-green-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-cloud-upload-alt text-green-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1">Multi-Cloud Storage</h3>
|
<h3 class="font-semibold text-gray-800 mb-1">{{ _("index.feature_cloud") }}</h3>
|
||||||
<p class="text-gray-500 text-sm">Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.</p>
|
<p class="text-gray-500 text-sm">{{ _("index.feature_cloud_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -82,8 +81,8 @@
|
|||||||
<i class="fas fa-mail-bulk text-yellow-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-mail-bulk text-yellow-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1">Email & IMAP Ingestion</h3>
|
<h3 class="font-semibold text-gray-800 mb-1">{{ _("index.feature_email") }}</h3>
|
||||||
<p class="text-gray-500 text-sm">Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.</p>
|
<p class="text-gray-500 text-sm">{{ _("index.feature_email_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -92,8 +91,8 @@
|
|||||||
<i class="fas fa-search text-purple-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-search text-purple-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1">Full-Text Search</h3>
|
<h3 class="font-semibold text-gray-800 mb-1">{{ _("index.feature_search") }}</h3>
|
||||||
<p class="text-gray-500 text-sm">Instantly find any document by content, metadata, or tags across your entire archive.</p>
|
<p class="text-gray-500 text-sm">{{ _("index.feature_search_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -102,8 +101,8 @@
|
|||||||
<i class="fas fa-project-diagram text-pink-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-project-diagram text-pink-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="font-semibold text-gray-800 mb-1">Custom Pipelines</h3>
|
<h3 class="font-semibold text-gray-800 mb-1">{{ _("index.feature_pipelines") }}</h3>
|
||||||
<p class="text-gray-500 text-sm">Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.</p>
|
<p class="text-gray-500 text-sm">{{ _("index.feature_pipelines_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -113,23 +112,23 @@
|
|||||||
<!-- CTA banner -->
|
<!-- CTA banner -->
|
||||||
<div class="bg-indigo-700 text-white py-14 px-4">
|
<div class="bg-indigo-700 text-white py-14 px-4">
|
||||||
<div class="max-w-2xl mx-auto text-center">
|
<div class="max-w-2xl mx-auto text-center">
|
||||||
<h2 class="text-3xl font-extrabold mb-4">Ready to elevate your document workflow?</h2>
|
<h2 class="text-3xl font-extrabold mb-4">{{ _("index.cta_heading") }}</h2>
|
||||||
<p class="text-indigo-200 mb-8">Join teams already automating their document processing with DocuElevate.</p>
|
<p class="text-indigo-200 mb-8">{{ _("index.cta_description") }}</p>
|
||||||
<div class="flex flex-wrap justify-center gap-4">
|
<div class="flex flex-wrap justify-center gap-4">
|
||||||
{% if allow_signup %}
|
{% if allow_signup %}
|
||||||
<a href="/signup"
|
<a href="/signup"
|
||||||
class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold py-3 px-8 rounded-xl shadow-lg transition duration-200 flex items-center min-h-[44px]">
|
class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold py-3 px-8 rounded-xl shadow-lg transition duration-200 flex items-center min-h-[44px]">
|
||||||
<i class="fas fa-rocket mr-2" aria-hidden="true"></i> Create a free account
|
<i class="fas fa-rocket mr-2" aria-hidden="true"></i> {{ _("index.cta_signup") }}
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="/login"
|
<a href="/login"
|
||||||
class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold py-3 px-8 rounded-xl shadow-lg transition duration-200 flex items-center min-h-[44px]">
|
class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold py-3 px-8 rounded-xl shadow-lg transition duration-200 flex items-center min-h-[44px]">
|
||||||
<i class="fas fa-sign-in-alt mr-2" aria-hidden="true"></i> Log In
|
<i class="fas fa-sign-in-alt mr-2" aria-hidden="true"></i> {{ _("index.hero_login") }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a href="/pricing"
|
<a href="/pricing"
|
||||||
class="bg-transparent border-2 border-white text-white hover:bg-white hover:text-indigo-700 font-bold py-3 px-8 rounded-xl transition duration-200 flex items-center min-h-[44px]">
|
class="bg-transparent border-2 border-white text-white hover:bg-white hover:text-indigo-700 font-bold py-3 px-8 rounded-xl transition duration-200 flex items-center min-h-[44px]">
|
||||||
<i class="fas fa-tags mr-2" aria-hidden="true"></i> See pricing
|
<i class="fas fa-tags mr-2" aria-hidden="true"></i> {{ _("index.cta_pricing") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -145,16 +144,16 @@
|
|||||||
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4">
|
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="text-3xl font-bold mb-1">DocuElevate</h1>
|
<h1 class="text-3xl font-bold mb-1">DocuElevate</h1>
|
||||||
<p class="text-blue-100 text-sm">Intelligent document processing & management — built for teams</p>
|
<p class="text-blue-100 text-sm">{{ _("index.dashboard_subtitle_teams") }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap gap-3">
|
<div class="flex flex-wrap gap-3">
|
||||||
<a href="/upload"
|
<a href="/upload"
|
||||||
class="bg-white text-blue-700 hover:bg-blue-50 font-semibold py-2 px-5 rounded-lg transition duration-200 flex items-center shadow-sm">
|
class="bg-white text-blue-700 hover:bg-blue-50 font-semibold py-2 px-5 rounded-lg transition duration-200 flex items-center shadow-sm">
|
||||||
<i class="fas fa-upload mr-2" aria-hidden="true"></i> Upload
|
<i class="fas fa-upload mr-2" aria-hidden="true"></i> {{ _("index.button_upload") }}
|
||||||
</a>
|
</a>
|
||||||
<a href="/files"
|
<a href="/files"
|
||||||
class="bg-transparent border border-white text-white hover:bg-white hover:text-blue-700 font-semibold py-2 px-5 rounded-lg transition duration-200 flex items-center">
|
class="bg-transparent border border-white text-white hover:bg-white hover:text-blue-700 font-semibold py-2 px-5 rounded-lg transition duration-200 flex items-center">
|
||||||
<i class="fas fa-list mr-2" aria-hidden="true"></i> Browse Files
|
<i class="fas fa-list mr-2" aria-hidden="true"></i> {{ _("index.button_browse_files") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -162,7 +161,7 @@
|
|||||||
|
|
||||||
<!-- Platform stats row (admin only) -->
|
<!-- Platform stats row (admin only) -->
|
||||||
{% if is_admin %}
|
{% if is_admin %}
|
||||||
<h2 class="text-sm font-semibold text-gray-400 uppercase tracking-widest mb-3">Platform overview</h2>
|
<h2 class="text-sm font-semibold text-gray-400 uppercase tracking-widest mb-3">{{ _("index.platform_overview") }}</h2>
|
||||||
<div class="grid grid-cols-2 sm:grid-cols-4 gap-4 mb-8">
|
<div class="grid grid-cols-2 sm:grid-cols-4 gap-4 mb-8">
|
||||||
<div class="bg-white rounded-xl shadow p-5 flex items-center gap-3">
|
<div class="bg-white rounded-xl shadow p-5 flex items-center gap-3">
|
||||||
<div class="h-10 w-10 rounded-full bg-blue-100 flex items-center justify-center flex-shrink-0">
|
<div class="h-10 w-10 rounded-full bg-blue-100 flex items-center justify-center flex-shrink-0">
|
||||||
@@ -170,7 +169,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-2xl font-extrabold text-blue-600">{{ stats.processed_files | default(0) }}</p>
|
<p class="text-2xl font-extrabold text-blue-600">{{ stats.processed_files | default(0) }}</p>
|
||||||
<p class="text-gray-500 text-xs">Total files</p>
|
<p class="text-gray-500 text-xs">{{ _("index.stat_total_files") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white rounded-xl shadow p-5 flex items-center gap-3">
|
<div class="bg-white rounded-xl shadow p-5 flex items-center gap-3">
|
||||||
@@ -179,7 +178,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-2xl font-extrabold text-green-600">{{ stats.files_today | default(0) }}</p>
|
<p class="text-2xl font-extrabold text-green-600">{{ stats.files_today | default(0) }}</p>
|
||||||
<p class="text-gray-500 text-xs">Files today</p>
|
<p class="text-gray-500 text-xs">{{ _("index.stat_files_today") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white rounded-xl shadow p-5 flex items-center gap-3">
|
<div class="bg-white rounded-xl shadow p-5 flex items-center gap-3">
|
||||||
@@ -188,7 +187,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-2xl font-extrabold text-indigo-600">{{ stats.files_month | default(0) }}</p>
|
<p class="text-2xl font-extrabold text-indigo-600">{{ stats.files_month | default(0) }}</p>
|
||||||
<p class="text-gray-500 text-xs">Files this month</p>
|
<p class="text-gray-500 text-xs">{{ _("index.stat_files_month") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white rounded-xl shadow p-5 flex items-center gap-3">
|
<div class="bg-white rounded-xl shadow p-5 flex items-center gap-3">
|
||||||
@@ -197,7 +196,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-2xl font-extrabold text-purple-600">{{ stats.unique_users | default(0) }}</p>
|
<p class="text-2xl font-extrabold text-purple-600">{{ stats.unique_users | default(0) }}</p>
|
||||||
<p class="text-gray-500 text-xs">Active users</p>
|
<p class="text-gray-500 text-xs">{{ _("index.stat_active_users") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -205,7 +204,7 @@
|
|||||||
|
|
||||||
<!-- My usage / subscription widget -->
|
<!-- My usage / subscription widget -->
|
||||||
{% if user_tier and user_usage %}
|
{% if user_tier and user_usage %}
|
||||||
<h2 class="text-sm font-semibold text-gray-400 uppercase tracking-widest mb-3">My usage</h2>
|
<h2 class="text-sm font-semibold text-gray-400 uppercase tracking-widest mb-3">{{ _("index.usage_my_usage") }}</h2>
|
||||||
<div class="bg-white rounded-xl shadow p-6 mb-8">
|
<div class="bg-white rounded-xl shadow p-6 mb-8">
|
||||||
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-4">
|
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-4">
|
||||||
<div class="flex items-center gap-3">
|
<div class="flex items-center gap-3">
|
||||||
@@ -220,16 +219,16 @@
|
|||||||
{% elif user_tier.id == 'professional' %}fa-star
|
{% elif user_tier.id == 'professional' %}fa-star
|
||||||
{% else %}fa-building{% endif %}
|
{% else %}fa-building{% endif %}
|
||||||
mr-1" aria-hidden="true"></i>
|
mr-1" aria-hidden="true"></i>
|
||||||
{{ user_tier.name }} Plan
|
{{ user_tier.name }} {{ _("index.tier_plan") }}
|
||||||
</span>
|
</span>
|
||||||
{% if user_tier.id != 'business' %}
|
{% if user_tier.id != 'business' %}
|
||||||
<a href="/pricing" class="text-xs text-indigo-600 hover:text-indigo-800 font-medium">
|
<a href="/pricing" class="text-xs text-indigo-600 hover:text-indigo-800 font-medium">
|
||||||
Upgrade <i class="fas fa-arrow-up-right-from-square ml-0.5 text-xs" aria-hidden="true"></i>
|
{{ _("index.tier_upgrade") }} <i class="fas fa-arrow-up-right-from-square ml-0.5 text-xs" aria-hidden="true"></i>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<a href="/subscription" class="text-xs text-gray-500 hover:text-gray-700">
|
<a href="/subscription" class="text-xs text-gray-500 hover:text-gray-700">
|
||||||
View full details →
|
{{ _("index.tier_view_details") }} →
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -237,7 +236,7 @@
|
|||||||
<!-- Lifetime -->
|
<!-- Lifetime -->
|
||||||
<div>
|
<div>
|
||||||
<div class="flex justify-between text-xs mb-1">
|
<div class="flex justify-between text-xs mb-1">
|
||||||
<span class="text-gray-500">Lifetime files</span>
|
<span class="text-gray-500">{{ _("index.usage_lifetime") }}</span>
|
||||||
<span class="font-semibold text-gray-700">
|
<span class="font-semibold text-gray-700">
|
||||||
{{ user_usage.lifetime }}{% if user_tier.lifetime_file_limit > 0 %} / {{ user_tier.lifetime_file_limit }}{% endif %}
|
{{ user_usage.lifetime }}{% if user_tier.lifetime_file_limit > 0 %} / {{ user_tier.lifetime_file_limit }}{% endif %}
|
||||||
</span>
|
</span>
|
||||||
@@ -250,13 +249,13 @@
|
|||||||
style="width: {{ pct }}%"></div>
|
style="width: {{ pct }}%"></div>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="text-xs text-green-600">Unlimited</div>
|
<div class="text-xs text-green-600">{{ _("index.usage_unlimited") }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<!-- Today -->
|
<!-- Today -->
|
||||||
<div>
|
<div>
|
||||||
<div class="flex justify-between text-xs mb-1">
|
<div class="flex justify-between text-xs mb-1">
|
||||||
<span class="text-gray-500">Files today</span>
|
<span class="text-gray-500">{{ _("index.usage_today") }}</span>
|
||||||
<span class="font-semibold text-gray-700">
|
<span class="font-semibold text-gray-700">
|
||||||
{{ user_usage.today }}{% if user_tier.daily_upload_limit > 0 %} / {{ user_tier.daily_upload_limit }}{% endif %}
|
{{ user_usage.today }}{% if user_tier.daily_upload_limit > 0 %} / {{ user_tier.daily_upload_limit }}{% endif %}
|
||||||
</span>
|
</span>
|
||||||
@@ -269,13 +268,13 @@
|
|||||||
style="width: {{ pct }}%"></div>
|
style="width: {{ pct }}%"></div>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="text-xs text-green-600">Unlimited</div>
|
<div class="text-xs text-green-600">{{ _("index.usage_unlimited") }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<!-- This month -->
|
<!-- This month -->
|
||||||
<div>
|
<div>
|
||||||
<div class="flex justify-between text-xs mb-1">
|
<div class="flex justify-between text-xs mb-1">
|
||||||
<span class="text-gray-500">Files this month</span>
|
<span class="text-gray-500">{{ _("index.usage_month") }}</span>
|
||||||
<span class="font-semibold text-gray-700">
|
<span class="font-semibold text-gray-700">
|
||||||
{{ user_usage.month }}{% if user_tier.monthly_upload_limit > 0 %} / {{ user_tier.monthly_upload_limit }}{% endif %}
|
{{ user_usage.month }}{% if user_tier.monthly_upload_limit > 0 %} / {{ user_tier.monthly_upload_limit }}{% endif %}
|
||||||
</span>
|
</span>
|
||||||
@@ -288,7 +287,7 @@
|
|||||||
style="width: {{ pct }}%"></div>
|
style="width: {{ pct }}%"></div>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="text-xs text-green-600">Unlimited</div>
|
<div class="text-xs text-green-600">{{ _("index.usage_unlimited") }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -300,7 +299,7 @@
|
|||||||
<!-- Quick Actions -->
|
<!-- Quick Actions -->
|
||||||
<div class="bg-white rounded-xl shadow p-6">
|
<div class="bg-white rounded-xl shadow p-6">
|
||||||
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
||||||
<i class="fas fa-bolt text-yellow-500" aria-hidden="true"></i> Quick Actions
|
<i class="fas fa-bolt text-yellow-500" aria-hidden="true"></i> {{ _("index.quick_actions") }}
|
||||||
</h2>
|
</h2>
|
||||||
<ul class="space-y-2">
|
<ul class="space-y-2">
|
||||||
<li>
|
<li>
|
||||||
@@ -309,8 +308,8 @@
|
|||||||
<i class="fas fa-upload text-blue-600 text-sm" aria-hidden="true"></i>
|
<i class="fas fa-upload text-blue-600 text-sm" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm font-medium text-gray-800">Upload Document</p>
|
<p class="text-sm font-medium text-gray-800">{{ _("index.quick_upload") }}</p>
|
||||||
<p class="text-xs text-gray-400">Process a new file</p>
|
<p class="text-xs text-gray-400">{{ _("index.quick_upload_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -320,8 +319,8 @@
|
|||||||
<i class="fas fa-list text-indigo-600 text-sm" aria-hidden="true"></i>
|
<i class="fas fa-list text-indigo-600 text-sm" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm font-medium text-gray-800">My Documents</p>
|
<p class="text-sm font-medium text-gray-800">{{ _("index.quick_documents") }}</p>
|
||||||
<p class="text-xs text-gray-400">Browse your processed files</p>
|
<p class="text-xs text-gray-400">{{ _("index.quick_documents_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -331,8 +330,8 @@
|
|||||||
<i class="fas fa-layer-group text-purple-600 text-sm" aria-hidden="true"></i>
|
<i class="fas fa-layer-group text-purple-600 text-sm" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm font-medium text-gray-800">My Subscription</p>
|
<p class="text-sm font-medium text-gray-800">{{ _("index.quick_subscription") }}</p>
|
||||||
<p class="text-xs text-gray-400">View plan & usage details</p>
|
<p class="text-xs text-gray-400">{{ _("index.quick_subscription_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -342,8 +341,8 @@
|
|||||||
<i class="fas fa-search text-green-600 text-sm" aria-hidden="true"></i>
|
<i class="fas fa-search text-green-600 text-sm" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm font-medium text-gray-800">Search</p>
|
<p class="text-sm font-medium text-gray-800">{{ _("index.quick_search") }}</p>
|
||||||
<p class="text-xs text-gray-400">Full-text search across documents</p>
|
<p class="text-xs text-gray-400">{{ _("index.quick_search_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -353,30 +352,30 @@
|
|||||||
<!-- Processing stats -->
|
<!-- Processing stats -->
|
||||||
<div class="bg-white rounded-xl shadow p-6">
|
<div class="bg-white rounded-xl shadow p-6">
|
||||||
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
||||||
<i class="fas fa-chart-bar text-blue-500" aria-hidden="true"></i> Processing Stats
|
<i class="fas fa-chart-bar text-blue-500" aria-hidden="true"></i> {{ _("index.processing_stats") }}
|
||||||
</h2>
|
</h2>
|
||||||
<ul class="space-y-3 text-sm">
|
<ul class="space-y-3 text-sm">
|
||||||
<li class="flex items-center justify-between py-2 border-b border-gray-100">
|
<li class="flex items-center justify-between py-2 border-b border-gray-100">
|
||||||
<span class="text-gray-600 flex items-center gap-2">
|
<span class="text-gray-600 flex items-center gap-2">
|
||||||
<i class="fas fa-file-alt text-blue-400 w-4" aria-hidden="true"></i> Total processed
|
<i class="fas fa-file-alt text-blue-400 w-4" aria-hidden="true"></i> {{ _("index.stat_total_processed") }}
|
||||||
</span>
|
</span>
|
||||||
<span class="font-bold text-gray-900">{{ stats.processed_files | default(0) }}</span>
|
<span class="font-bold text-gray-900">{{ stats.processed_files | default(0) }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center justify-between py-2 border-b border-gray-100">
|
<li class="flex items-center justify-between py-2 border-b border-gray-100">
|
||||||
<span class="text-gray-600 flex items-center gap-2">
|
<span class="text-gray-600 flex items-center gap-2">
|
||||||
<i class="fas fa-eye text-indigo-400 w-4" aria-hidden="true"></i> Files with OCR
|
<i class="fas fa-eye text-indigo-400 w-4" aria-hidden="true"></i> {{ _("index.stat_files_ocr") }}
|
||||||
</span>
|
</span>
|
||||||
<span class="font-bold text-gray-900">{{ stats.files_with_ocr | default(0) }}</span>
|
<span class="font-bold text-gray-900">{{ stats.files_with_ocr | default(0) }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center justify-between py-2 border-b border-gray-100">
|
<li class="flex items-center justify-between py-2 border-b border-gray-100">
|
||||||
<span class="text-gray-600 flex items-center gap-2">
|
<span class="text-gray-600 flex items-center gap-2">
|
||||||
<i class="fas fa-calendar-day text-green-400 w-4" aria-hidden="true"></i> Today
|
<i class="fas fa-calendar-day text-green-400 w-4" aria-hidden="true"></i> {{ _("index.stat_today") }}
|
||||||
</span>
|
</span>
|
||||||
<span class="font-bold text-gray-900">{{ stats.files_today | default(0) }}</span>
|
<span class="font-bold text-gray-900">{{ stats.files_today | default(0) }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center justify-between py-2">
|
<li class="flex items-center justify-between py-2">
|
||||||
<span class="text-gray-600 flex items-center gap-2">
|
<span class="text-gray-600 flex items-center gap-2">
|
||||||
<i class="fas fa-calendar-alt text-orange-400 w-4" aria-hidden="true"></i> This month
|
<i class="fas fa-calendar-alt text-orange-400 w-4" aria-hidden="true"></i> {{ _("index.stat_this_month") }}
|
||||||
</span>
|
</span>
|
||||||
<span class="font-bold text-gray-900">{{ stats.files_month | default(0) }}</span>
|
<span class="font-bold text-gray-900">{{ stats.files_month | default(0) }}</span>
|
||||||
</li>
|
</li>
|
||||||
@@ -388,39 +387,39 @@
|
|||||||
<div class="bg-gradient-to-br from-indigo-600 to-purple-700 rounded-xl shadow p-6 text-white flex flex-col justify-between">
|
<div class="bg-gradient-to-br from-indigo-600 to-purple-700 rounded-xl shadow p-6 text-white flex flex-col justify-between">
|
||||||
<div>
|
<div>
|
||||||
<h2 class="text-lg font-semibold mb-2 flex items-center gap-2">
|
<h2 class="text-lg font-semibold mb-2 flex items-center gap-2">
|
||||||
<i class="fas fa-arrow-up-right-dots" aria-hidden="true"></i> Upgrade your plan
|
<i class="fas fa-arrow-up-right-dots" aria-hidden="true"></i> {{ _("index.upgrade_plan") }}
|
||||||
</h2>
|
</h2>
|
||||||
<p class="text-indigo-100 text-sm mb-4">
|
<p class="text-indigo-100 text-sm mb-4">
|
||||||
Unlock more documents, more destinations and priority support.
|
{{ _("index.upgrade_description") }}
|
||||||
</p>
|
</p>
|
||||||
<ul class="space-y-1.5 text-sm text-indigo-100">
|
<ul class="space-y-1.5 text-sm text-indigo-100">
|
||||||
<li class="flex items-center gap-2"><i class="fas fa-check-circle text-indigo-300" aria-hidden="true"></i> Higher daily & monthly limits</li>
|
<li class="flex items-center gap-2"><i class="fas fa-check-circle text-indigo-300" aria-hidden="true"></i> {{ _("index.upgrade_daily_limits") }}</li>
|
||||||
<li class="flex items-center gap-2"><i class="fas fa-check-circle text-indigo-300" aria-hidden="true"></i> More storage destinations</li>
|
<li class="flex items-center gap-2"><i class="fas fa-check-circle text-indigo-300" aria-hidden="true"></i> {{ _("index.upgrade_destinations") }}</li>
|
||||||
<li class="flex items-center gap-2"><i class="fas fa-check-circle text-indigo-300" aria-hidden="true"></i> More OCR pages</li>
|
<li class="flex items-center gap-2"><i class="fas fa-check-circle text-indigo-300" aria-hidden="true"></i> {{ _("index.upgrade_ocr_pages") }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<a href="/pricing"
|
<a href="/pricing"
|
||||||
class="mt-6 inline-flex items-center justify-center bg-white text-indigo-700 font-semibold px-5 py-2.5 rounded-lg hover:bg-indigo-50 transition shadow">
|
class="mt-6 inline-flex items-center justify-center bg-white text-indigo-700 font-semibold px-5 py-2.5 rounded-lg hover:bg-indigo-50 transition shadow">
|
||||||
View plans & pricing <i class="fas fa-arrow-right ml-2 text-xs" aria-hidden="true"></i>
|
{{ _("index.upgrade_view_pricing") }} <i class="fas fa-arrow-right ml-2 text-xs" aria-hidden="true"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="bg-white rounded-xl shadow p-6">
|
<div class="bg-white rounded-xl shadow p-6">
|
||||||
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
||||||
<i class="fas fa-plug text-green-500" aria-hidden="true"></i> Integrations
|
<i class="fas fa-plug text-green-500" aria-hidden="true"></i> {{ _("index.integrations_title") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="space-y-3 text-sm text-gray-600">
|
<div class="space-y-3 text-sm text-gray-600">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<span>Active integrations</span>
|
<span>{{ _("index.integrations_active") }}</span>
|
||||||
<span class="font-bold text-green-600">{{ stats.active_integrations | default(0) }}</span>
|
<span class="font-bold text-green-600">{{ stats.active_integrations | default(0) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<span>Storage targets</span>
|
<span>{{ _("index.integrations_storage") }}</span>
|
||||||
<span class="font-bold text-indigo-600">{{ stats.storage_targets | default(0) }}</span>
|
<span class="font-bold text-indigo-600">{{ stats.storage_targets | default(0) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="/status" class="mt-4 inline-flex items-center text-xs text-indigo-600 hover:text-indigo-800">
|
<a href="/status" class="mt-4 inline-flex items-center text-xs text-indigo-600 hover:text-indigo-800">
|
||||||
View system status <i class="fas fa-arrow-right ml-1" aria-hidden="true"></i>
|
{{ _("index.integrations_view_status") }} <i class="fas fa-arrow-right ml-1" aria-hidden="true"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -435,15 +434,15 @@
|
|||||||
<div class="bg-gradient-to-r from-blue-600 to-indigo-700 rounded-xl shadow-lg text-white p-8 mb-8">
|
<div class="bg-gradient-to-r from-blue-600 to-indigo-700 rounded-xl shadow-lg text-white p-8 mb-8">
|
||||||
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4">
|
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="text-3xl font-bold mb-1">DocuElevate Dashboard</h1>
|
<h1 class="text-3xl font-bold mb-1">{{ _("index.single_user_heading") }}</h1>
|
||||||
<p class="text-blue-100 text-sm">Intelligent document processing & management</p>
|
<p class="text-blue-100 text-sm">{{ _("index.dashboard_subtitle") }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap gap-3">
|
<div class="flex flex-wrap gap-3">
|
||||||
<a href="/upload" class="bg-white text-blue-700 hover:bg-blue-50 font-semibold py-2 px-5 rounded-lg transition duration-200 flex items-center shadow-sm">
|
<a href="/upload" class="bg-white text-blue-700 hover:bg-blue-50 font-semibold py-2 px-5 rounded-lg transition duration-200 flex items-center shadow-sm">
|
||||||
<i class="fas fa-upload mr-2" aria-hidden="true"></i> Upload
|
<i class="fas fa-upload mr-2" aria-hidden="true"></i> {{ _("index.button_upload") }}
|
||||||
</a>
|
</a>
|
||||||
<a href="/files" class="bg-transparent border border-white text-white hover:bg-white hover:text-blue-700 font-semibold py-2 px-5 rounded-lg transition duration-200 flex items-center">
|
<a href="/files" class="bg-transparent border border-white text-white hover:bg-white hover:text-blue-700 font-semibold py-2 px-5 rounded-lg transition duration-200 flex items-center">
|
||||||
<i class="fas fa-list mr-2" aria-hidden="true"></i> Browse Files
|
<i class="fas fa-list mr-2" aria-hidden="true"></i> {{ _("index.button_browse_files") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -457,7 +456,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-3xl font-bold text-blue-600">{{ stats.processed_files | default(0) }}</p>
|
<p class="text-3xl font-bold text-blue-600">{{ stats.processed_files | default(0) }}</p>
|
||||||
<p class="text-gray-500 text-sm">Documents Processed</p>
|
<p class="text-gray-500 text-sm">{{ _("index.stat_documents_processed") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white rounded-xl shadow p-6 flex items-center gap-4">
|
<div class="bg-white rounded-xl shadow p-6 flex items-center gap-4">
|
||||||
@@ -466,7 +465,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-3xl font-bold text-green-600">{{ stats.active_integrations | default(0) }}</p>
|
<p class="text-3xl font-bold text-green-600">{{ stats.active_integrations | default(0) }}</p>
|
||||||
<p class="text-gray-500 text-sm">Active Integrations</p>
|
<p class="text-gray-500 text-sm">{{ _("index.stat_active_integrations") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-white rounded-xl shadow p-6 flex items-center gap-4">
|
<div class="bg-white rounded-xl shadow p-6 flex items-center gap-4">
|
||||||
@@ -475,7 +474,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-3xl font-bold text-indigo-600">{{ stats.storage_targets | default(0) }}</p>
|
<p class="text-3xl font-bold text-indigo-600">{{ stats.storage_targets | default(0) }}</p>
|
||||||
<p class="text-gray-500 text-sm">Storage Targets</p>
|
<p class="text-gray-500 text-sm">{{ _("index.stat_storage_targets") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -486,7 +485,7 @@
|
|||||||
<!-- Quick Actions Widget -->
|
<!-- Quick Actions Widget -->
|
||||||
<div class="bg-white rounded-xl shadow p-6">
|
<div class="bg-white rounded-xl shadow p-6">
|
||||||
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
||||||
<i class="fas fa-bolt text-yellow-500" aria-hidden="true"></i> Quick Actions
|
<i class="fas fa-bolt text-yellow-500" aria-hidden="true"></i> {{ _("index.quick_actions") }}
|
||||||
</h2>
|
</h2>
|
||||||
<ul class="space-y-2">
|
<ul class="space-y-2">
|
||||||
<li>
|
<li>
|
||||||
@@ -495,8 +494,8 @@
|
|||||||
<i class="fas fa-upload text-blue-600 text-sm" aria-hidden="true"></i>
|
<i class="fas fa-upload text-blue-600 text-sm" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm font-medium text-gray-800">Upload Document</p>
|
<p class="text-sm font-medium text-gray-800">{{ _("index.quick_upload") }}</p>
|
||||||
<p class="text-xs text-gray-400">Process a new file</p>
|
<p class="text-xs text-gray-400">{{ _("index.quick_upload_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -506,8 +505,8 @@
|
|||||||
<i class="fas fa-list text-indigo-600 text-sm" aria-hidden="true"></i>
|
<i class="fas fa-list text-indigo-600 text-sm" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm font-medium text-gray-800">View All Files</p>
|
<p class="text-sm font-medium text-gray-800">{{ _("index.quick_view_files") }}</p>
|
||||||
<p class="text-xs text-gray-400">Browse processed documents</p>
|
<p class="text-xs text-gray-400">{{ _("index.quick_view_files_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -517,8 +516,8 @@
|
|||||||
<i class="fas fa-heartbeat text-green-600 text-sm" aria-hidden="true"></i>
|
<i class="fas fa-heartbeat text-green-600 text-sm" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm font-medium text-gray-800">System Status</p>
|
<p class="text-sm font-medium text-gray-800">{{ _("index.quick_system_status") }}</p>
|
||||||
<p class="text-xs text-gray-400">Check integration health</p>
|
<p class="text-xs text-gray-400">{{ _("index.quick_system_status_desc") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -528,28 +527,28 @@
|
|||||||
<!-- Capabilities Widget -->
|
<!-- Capabilities Widget -->
|
||||||
<div class="bg-white rounded-xl shadow p-6">
|
<div class="bg-white rounded-xl shadow p-6">
|
||||||
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
||||||
<i class="fas fa-cubes text-blue-500" aria-hidden="true"></i> Capabilities
|
<i class="fas fa-cubes text-blue-500" aria-hidden="true"></i> {{ _("index.capabilities_title") }}
|
||||||
</h2>
|
</h2>
|
||||||
<ul class="space-y-3 text-sm text-gray-600">
|
<ul class="space-y-3 text-sm text-gray-600">
|
||||||
<li class="flex items-start gap-2">
|
<li class="flex items-start gap-2">
|
||||||
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
||||||
<span>OCR & metadata extraction with AI</span>
|
<span>{{ _("index.capabilities_ocr") }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-start gap-2">
|
<li class="flex items-start gap-2">
|
||||||
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
||||||
<span>Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud</span>
|
<span>{{ _("index.capabilities_cloud") }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-start gap-2">
|
<li class="flex items-start gap-2">
|
||||||
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
||||||
<span>Paperless-ngx integration for document management</span>
|
<span>{{ _("index.capabilities_paperless") }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-start gap-2">
|
<li class="flex items-start gap-2">
|
||||||
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
||||||
<span>Email & URL-based document ingestion</span>
|
<span>{{ _("index.capabilities_ingestion") }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-start gap-2">
|
<li class="flex items-start gap-2">
|
||||||
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-500 mt-0.5 flex-shrink-0" aria-hidden="true"></i>
|
||||||
<span>Automated classification & routing workflows</span>
|
<span>{{ _("index.capabilities_workflows") }}</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -558,25 +557,25 @@
|
|||||||
<div class="bg-white rounded-xl shadow p-6 flex flex-col justify-between">
|
<div class="bg-white rounded-xl shadow p-6 flex flex-col justify-between">
|
||||||
<div>
|
<div>
|
||||||
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
<h2 class="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
|
||||||
<i class="fas fa-compass text-indigo-500" aria-hidden="true"></i> Getting Started
|
<i class="fas fa-compass text-indigo-500" aria-hidden="true"></i> {{ _("index.getting_started") }}
|
||||||
</h2>
|
</h2>
|
||||||
<ol class="space-y-3 text-sm text-gray-600 list-none">
|
<ol class="space-y-3 text-sm text-gray-600 list-none">
|
||||||
<li class="flex items-start gap-2">
|
<li class="flex items-start gap-2">
|
||||||
<span class="h-5 w-5 rounded-full bg-blue-600 text-white text-xs flex items-center justify-center flex-shrink-0 font-bold mt-0.5">1</span>
|
<span class="h-5 w-5 rounded-full bg-blue-600 text-white text-xs flex items-center justify-center flex-shrink-0 font-bold mt-0.5">1</span>
|
||||||
Configure integrations via <a href="/status" class="text-blue-600 hover:underline">System Status</a>
|
{{ _("index.getting_started_1_pre") }}<a href="/status" class="text-blue-600 hover:underline">{{ _("index.quick_system_status") }}</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-start gap-2">
|
<li class="flex items-start gap-2">
|
||||||
<span class="h-5 w-5 rounded-full bg-blue-600 text-white text-xs flex items-center justify-center flex-shrink-0 font-bold mt-0.5">2</span>
|
<span class="h-5 w-5 rounded-full bg-blue-600 text-white text-xs flex items-center justify-center flex-shrink-0 font-bold mt-0.5">2</span>
|
||||||
<a href="/upload" class="text-blue-600 hover:underline">Upload</a> your first document
|
<a href="/upload" class="text-blue-600 hover:underline">{{ _("index.button_upload") }}</a>{{ _("index.getting_started_2_post") }}
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-start gap-2">
|
<li class="flex items-start gap-2">
|
||||||
<span class="h-5 w-5 rounded-full bg-blue-600 text-white text-xs flex items-center justify-center flex-shrink-0 font-bold mt-0.5">3</span>
|
<span class="h-5 w-5 rounded-full bg-blue-600 text-white text-xs flex items-center justify-center flex-shrink-0 font-bold mt-0.5">3</span>
|
||||||
Review results in <a href="/files" class="text-blue-600 hover:underline">Files</a>
|
{{ _("index.getting_started_3_pre") }}<a href="/files" class="text-blue-600 hover:underline">{{ _("index.link_files") }}</a>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
<a href="/about" class="mt-6 inline-flex items-center text-sm text-indigo-600 hover:text-indigo-800 font-medium">
|
<a href="/about" class="mt-6 inline-flex items-center text-sm text-indigo-600 hover:text-indigo-800 font-medium">
|
||||||
Learn more about DocuElevate <i class="fas fa-arrow-right ml-1 text-xs" aria-hidden="true"></i>
|
{{ _("index.getting_started_learn") }} <i class="fas fa-arrow-right ml-1 text-xs" aria-hidden="true"></i>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>DocuElevate - Login</title>
|
<title>{{ _("app.name") }} - {{ _("auth.login_title") }}</title>
|
||||||
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
||||||
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
|
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
|
||||||
@@ -12,10 +12,10 @@
|
|||||||
<body class="bg-gray-100 h-screen flex items-center justify-center">
|
<body class="bg-gray-100 h-screen flex items-center justify-center">
|
||||||
<main class="bg-white rounded-lg shadow-lg p-8 max-w-md w-full" role="main">
|
<main class="bg-white rounded-lg shadow-lg p-8 max-w-md w-full" role="main">
|
||||||
<div class="flex justify-center mb-6">
|
<div class="flex justify-center mb-6">
|
||||||
<img src="/static/images/logo_writing.svg" alt="DocuElevate Logo" class="h-16">
|
<img src="/static/images/logo_writing.svg" alt="{{ _('auth.logo_alt') }}" class="h-16">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">Welcome to DocuElevate</h1>
|
<h1 class="text-2xl font-bold text-center text-gray-800 mb-6">{{ _("dashboard.welcome") }}</h1>
|
||||||
|
|
||||||
{% if error %}
|
{% if error %}
|
||||||
<div class="bg-red-100 border-l-4 border-red-500 text-red-700 p-4 mb-6" role="alert">
|
<div class="bg-red-100 border-l-4 border-red-500 text-red-700 p-4 mb-6" role="alert">
|
||||||
@@ -31,33 +31,33 @@
|
|||||||
|
|
||||||
<!-- Local authentication form -->
|
<!-- Local authentication form -->
|
||||||
<div class="mb-8" id="local-auth">
|
<div class="mb-8" id="local-auth">
|
||||||
<h2 class="text-lg font-semibold mb-4 text-gray-700">Sign in with username</h2>
|
<h2 class="text-lg font-semibold mb-4 text-gray-700">{{ _("auth.sign_in_with_username") }}</h2>
|
||||||
<form method="POST" action="/auth" class="space-y-4">
|
<form method="POST" action="/auth" class="space-y-4">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token | default('', true) }}">
|
<input type="hidden" name="csrf_token" value="{{ csrf_token | default('', true) }}">
|
||||||
<div>
|
<div>
|
||||||
<label for="username" class="block text-sm font-medium text-gray-700">Username or Email</label>
|
<label for="username" class="block text-sm font-medium text-gray-700">{{ _("auth.username_or_email") }}</label>
|
||||||
<input type="text" id="username" name="username" required
|
<input type="text" id="username" name="username" required
|
||||||
autocomplete="username"
|
autocomplete="username"
|
||||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring focus:ring-blue-500 focus:ring-opacity-50">
|
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring focus:ring-blue-500 focus:ring-opacity-50">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label for="password" class="block text-sm font-medium text-gray-700">Password</label>
|
<label for="password" class="block text-sm font-medium text-gray-700">{{ _("auth.password_label") }}</label>
|
||||||
<input type="password" id="password" name="password" required
|
<input type="password" id="password" name="password" required
|
||||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring focus:ring-blue-500 focus:ring-opacity-50">
|
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring focus:ring-blue-500 focus:ring-opacity-50">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit" class="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
|
<button type="submit" class="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
|
||||||
Sign in
|
{{ _("auth.sign_in") }}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
<div class="mt-3 text-center space-x-3">
|
<div class="mt-3 text-center space-x-3">
|
||||||
<a href="/forgot-password" class="text-sm text-blue-600 hover:text-blue-500">
|
<a href="/forgot-password" class="text-sm text-blue-600 hover:text-blue-500">
|
||||||
Forgot password?
|
{{ _("auth.forgot_password") }}
|
||||||
</a>
|
</a>
|
||||||
<span class="text-gray-300" aria-hidden="true">|</span>
|
<span class="text-gray-300" aria-hidden="true">|</span>
|
||||||
<a href="/forgot-username" class="text-sm text-blue-600 hover:text-blue-500">
|
<a href="/forgot-username" class="text-sm text-blue-600 hover:text-blue-500">
|
||||||
Forgot username?
|
{{ _("auth.forgot_username") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
<div class="w-full border-t border-gray-300"></div>
|
<div class="w-full border-t border-gray-300"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="relative flex justify-center text-sm">
|
<div class="relative flex justify-center text-sm">
|
||||||
<span class="px-2 bg-white text-gray-500">Or continue with</span>
|
<span class="px-2 bg-white text-gray-500">{{ _("auth.or_continue_with") }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
<a href="/oauth-login"
|
<a href="/oauth-login"
|
||||||
class="w-full inline-flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
class="w-full inline-flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
||||||
style="min-height:44px; min-width:44px">
|
style="min-height:44px; min-width:44px">
|
||||||
<span class="sr-only">Sign in with SSO</span>
|
<span class="sr-only">{{ _("auth.sign_in_sso") }}</span>
|
||||||
<i class="fas fa-lock mr-2" aria-hidden="true"></i>
|
<i class="fas fa-lock mr-2" aria-hidden="true"></i>
|
||||||
{{ oauth_provider_name }}
|
{{ oauth_provider_name }}
|
||||||
</a>
|
</a>
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
<div class="w-full border-t border-gray-300"></div>
|
<div class="w-full border-t border-gray-300"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="relative flex justify-center text-sm">
|
<div class="relative flex justify-center text-sm">
|
||||||
<span class="px-2 bg-white text-gray-500">Or continue with</span>
|
<span class="px-2 bg-white text-gray-500">{{ _("auth.or_continue_with") }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -102,9 +102,9 @@
|
|||||||
<a href="/social-login/{{ provider_key }}"
|
<a href="/social-login/{{ provider_key }}"
|
||||||
class="w-full inline-flex items-center justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
class="w-full inline-flex items-center justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
||||||
style="min-height:44px; min-width:44px"
|
style="min-height:44px; min-width:44px"
|
||||||
aria-label="Sign in with {{ provider.name }}">
|
aria-label="{{ _('auth.sign_in_with') }} {{ provider.name }}">
|
||||||
<i class="{{ provider.icon }} mr-2" aria-hidden="true"></i>
|
<i class="{{ provider.icon }} mr-2" aria-hidden="true"></i>
|
||||||
Sign in with {{ provider.name }}
|
{{ _("auth.sign_in_with") }} {{ provider.name }}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
@@ -112,21 +112,21 @@
|
|||||||
|
|
||||||
<div class="mt-8 text-center">
|
<div class="mt-8 text-center">
|
||||||
<a href="/" class="text-sm font-medium text-blue-600 hover:text-blue-500">
|
<a href="/" class="text-sm font-medium text-blue-600 hover:text-blue-500">
|
||||||
Return to Home
|
{{ _("auth.return_home") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if allow_signup %}
|
{% if allow_signup %}
|
||||||
<div class="mt-4 text-center">
|
<div class="mt-4 text-center">
|
||||||
<span class="text-sm text-gray-600">Don't have an account?</span>
|
<span class="text-sm text-gray-600">{{ _("auth.no_account") }}</span>
|
||||||
<a href="/signup" class="ml-1 text-sm font-medium text-indigo-600 hover:text-indigo-500">
|
<a href="/signup" class="ml-1 text-sm font-medium text-indigo-600 hover:text-indigo-500">
|
||||||
Create account
|
{{ _("auth.create_account") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</main>
|
</main>
|
||||||
<div class="fixed bottom-4 text-center w-full text-xs text-gray-500">
|
<div class="fixed bottom-4 text-center w-full text-xs text-gray-500">
|
||||||
DocuElevate {{ app_version|default('', true) }}
|
{{ _("app.name") }} {{ app_version|default('', true) }}
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Processing Pipelines – DocuElevate{% endblock %}
|
{% block title %}{{ _("pipelines.title") }} – DocuElevate{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container mx-auto px-4 py-8" x-data="pipelinesApp()" x-init="init()">
|
<div class="container mx-auto px-4 py-8" x-data="pipelinesApp()" x-init="init()">
|
||||||
@@ -9,13 +9,13 @@
|
|||||||
<div>
|
<div>
|
||||||
<h1 class="text-3xl font-bold text-gray-900 dark:text-white flex items-center gap-2">
|
<h1 class="text-3xl font-bold text-gray-900 dark:text-white flex items-center gap-2">
|
||||||
<i class="fas fa-project-diagram text-blue-500" aria-hidden="true"></i>
|
<i class="fas fa-project-diagram text-blue-500" aria-hidden="true"></i>
|
||||||
Processing Pipelines
|
{{ _("pipelines.page_title") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-500 dark:text-gray-400 text-sm mt-1">
|
<p class="text-gray-500 dark:text-gray-400 text-sm mt-1">
|
||||||
Define and manage custom document processing workflows.
|
{{ _("pipelines.subtitle_intro") }}
|
||||||
System pipelines (created by admins) are shown with a
|
{{ _("pipelines.subtitle_system_pre") }}
|
||||||
<span class="text-xs font-semibold text-purple-700 bg-purple-50 border border-purple-200 rounded px-1">System</span>
|
<span class="text-xs font-semibold text-purple-700 bg-purple-50 border border-purple-200 rounded px-1">{{ _("pipelines.system_label") }}</span>
|
||||||
badge and are visible to all users.
|
{{ _("pipelines.subtitle_system_post") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
class="inline-flex items-center px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
class="inline-flex items-center px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-plus mr-2" aria-hidden="true"></i> New Pipeline
|
<i class="fas fa-plus mr-2" aria-hidden="true"></i> {{ _("pipelines.new_pipeline_btn") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
<template x-if="loading">
|
<template x-if="loading">
|
||||||
<div class="text-center py-12 text-gray-400">
|
<div class="text-center py-12 text-gray-400">
|
||||||
<i class="fas fa-spinner fa-spin text-3xl mb-3" aria-hidden="true"></i>
|
<i class="fas fa-spinner fa-spin text-3xl mb-3" aria-hidden="true"></i>
|
||||||
<p>Loading pipelines…</p>
|
<p>{{ _("pipelines.loading") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -59,15 +59,15 @@
|
|||||||
<template x-if="!loading && pipelines.length === 0">
|
<template x-if="!loading && pipelines.length === 0">
|
||||||
<div class="text-center py-16 bg-white dark:bg-gray-800 rounded-lg shadow">
|
<div class="text-center py-16 bg-white dark:bg-gray-800 rounded-lg shadow">
|
||||||
<i class="fas fa-project-diagram text-5xl text-gray-300 mb-4" aria-hidden="true"></i>
|
<i class="fas fa-project-diagram text-5xl text-gray-300 mb-4" aria-hidden="true"></i>
|
||||||
<h2 class="text-xl font-semibold text-gray-700 dark:text-gray-300 mb-2">No pipelines yet</h2>
|
<h2 class="text-xl font-semibold text-gray-700 dark:text-gray-300 mb-2">{{ _("pipelines.empty_state") }}</h2>
|
||||||
<p class="text-gray-500 dark:text-gray-400 mb-6">Create your first pipeline to define custom document processing workflows.</p>
|
<p class="text-gray-500 dark:text-gray-400 mb-6">{{ _("pipelines.empty_state_hint") }}</p>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@click="openCreatePipelineModal()"
|
@click="openCreatePipelineModal()"
|
||||||
class="inline-flex items-center px-5 py-2.5 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium rounded-md"
|
class="inline-flex items-center px-5 py-2.5 bg-blue-600 hover:bg-blue-700 text-white text-sm font-medium rounded-md"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-plus mr-2" aria-hidden="true"></i> Create Pipeline
|
<i class="fas fa-plus mr-2" aria-hidden="true"></i> {{ _("pipelines.create") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -84,13 +84,13 @@
|
|||||||
<h2 class="text-lg font-semibold text-gray-900 dark:text-white" x-text="pipeline.name"></h2>
|
<h2 class="text-lg font-semibold text-gray-900 dark:text-white" x-text="pipeline.name"></h2>
|
||||||
<!-- Badges -->
|
<!-- Badges -->
|
||||||
<template x-if="pipeline.owner_id === null">
|
<template x-if="pipeline.owner_id === null">
|
||||||
<span class="text-xs font-semibold text-purple-700 bg-purple-50 border border-purple-200 rounded px-1.5 py-0.5">System</span>
|
<span class="text-xs font-semibold text-purple-700 bg-purple-50 border border-purple-200 rounded px-1.5 py-0.5">{{ _("pipelines.system_label") }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template x-if="pipeline.is_default">
|
<template x-if="pipeline.is_default">
|
||||||
<span class="text-xs font-semibold text-green-700 bg-green-50 border border-green-200 rounded px-1.5 py-0.5">Default</span>
|
<span class="text-xs font-semibold text-green-700 bg-green-50 border border-green-200 rounded px-1.5 py-0.5">{{ _("pipelines.default_label") }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template x-if="!pipeline.is_active">
|
<template x-if="!pipeline.is_active">
|
||||||
<span class="text-xs font-semibold text-gray-500 bg-gray-100 border border-gray-200 rounded px-1.5 py-0.5">Inactive</span>
|
<span class="text-xs font-semibold text-gray-500 bg-gray-100 border border-gray-200 rounded px-1.5 py-0.5">{{ _("pipelines.inactive_label") }}</span>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
style="min-height:36px;"
|
style="min-height:36px;"
|
||||||
:aria-label="`Edit pipeline ${pipeline.name}`"
|
:aria-label="`Edit pipeline ${pipeline.name}`"
|
||||||
>
|
>
|
||||||
<i class="fas fa-pencil-alt mr-1" aria-hidden="true"></i> Edit
|
<i class="fas fa-pencil-alt mr-1" aria-hidden="true"></i> {{ _("common.edit") }}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@@ -124,7 +124,7 @@
|
|||||||
style="min-height:36px;"
|
style="min-height:36px;"
|
||||||
:aria-label="`Delete pipeline ${pipeline.name}`"
|
:aria-label="`Delete pipeline ${pipeline.name}`"
|
||||||
>
|
>
|
||||||
<i class="fas fa-trash mr-1" aria-hidden="true"></i> Delete
|
<i class="fas fa-trash mr-1" aria-hidden="true"></i> {{ _("common.delete") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
|
|
||||||
<!-- Step list -->
|
<!-- Step list -->
|
||||||
<template x-if="(pipeline.steps || []).length === 0">
|
<template x-if="(pipeline.steps || []).length === 0">
|
||||||
<p class="text-sm text-gray-400 italic mb-3">No steps defined. Add a step to start building your pipeline.</p>
|
<p class="text-sm text-gray-400 italic mb-3">{{ _("pipelines.no_steps") }}</p>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template x-if="(pipeline.steps || []).length > 0">
|
<template x-if="(pipeline.steps || []).length > 0">
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
<p class="text-xs text-gray-400 truncate" x-text="step.step_type"></p>
|
<p class="text-xs text-gray-400 truncate" x-text="step.step_type"></p>
|
||||||
</div>
|
</div>
|
||||||
<template x-if="!step.enabled">
|
<template x-if="!step.enabled">
|
||||||
<span class="text-xs text-gray-400 bg-gray-200 rounded px-1.5 py-0.5 flex-shrink-0">Disabled</span>
|
<span class="text-xs text-gray-400 bg-gray-200 rounded px-1.5 py-0.5 flex-shrink-0">{{ _("pipelines.disabled_label") }}</span>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-1.5 flex-shrink-0">
|
<div class="flex items-center gap-1.5 flex-shrink-0">
|
||||||
@@ -201,7 +201,7 @@
|
|||||||
style="min-height:36px;"
|
style="min-height:36px;"
|
||||||
:aria-label="`Add step to ${pipeline.name}`"
|
:aria-label="`Add step to ${pipeline.name}`"
|
||||||
>
|
>
|
||||||
<i class="fas fa-plus mr-1" aria-hidden="true"></i> Add Step
|
<i class="fas fa-plus mr-1" aria-hidden="true"></i> {{ _("pipelines.add_step_btn") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
<!-- Name -->
|
<!-- Name -->
|
||||||
<div>
|
<div>
|
||||||
<label for="pipelineName" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="pipelineName" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
Name <span aria-hidden="true" class="text-red-500">*</span>
|
{{ _("common.name") }} <span aria-hidden="true" class="text-red-500">*</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="pipelineName"
|
id="pipelineName"
|
||||||
@@ -250,21 +250,21 @@
|
|||||||
maxlength="255"
|
maxlength="255"
|
||||||
required
|
required
|
||||||
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white"
|
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white"
|
||||||
placeholder="My pipeline"
|
placeholder="{{ _('pipelines.name_placeholder') }}"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Description -->
|
<!-- Description -->
|
||||||
<div>
|
<div>
|
||||||
<label for="pipelineDesc" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">Description</label>
|
<label for="pipelineDesc" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _("common.description") }}</label>
|
||||||
<textarea
|
<textarea
|
||||||
id="pipelineDesc"
|
id="pipelineDesc"
|
||||||
x-model="pipelineModal.form.description"
|
x-model="pipelineModal.form.description"
|
||||||
rows="2"
|
rows="2"
|
||||||
maxlength="4096"
|
maxlength="4096"
|
||||||
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white resize-none"
|
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white resize-none"
|
||||||
placeholder="Optional description"
|
placeholder="{{ _('pipelines.description_placeholder') }}"
|
||||||
></textarea>
|
></textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -276,7 +276,7 @@
|
|||||||
x-model="pipelineModal.form.is_default"
|
x-model="pipelineModal.form.is_default"
|
||||||
class="rounded border-gray-300 text-blue-600 focus:ring-blue-400"
|
class="rounded border-gray-300 text-blue-600 focus:ring-blue-400"
|
||||||
/>
|
/>
|
||||||
<span class="text-sm text-gray-700 dark:text-gray-300">Set as my default pipeline</span>
|
<span class="text-sm text-gray-700 dark:text-gray-300">{{ _("pipelines.set_default") }}</span>
|
||||||
</label>
|
</label>
|
||||||
<label class="inline-flex items-center gap-2 cursor-pointer">
|
<label class="inline-flex items-center gap-2 cursor-pointer">
|
||||||
<input
|
<input
|
||||||
@@ -284,7 +284,7 @@
|
|||||||
x-model="pipelineModal.form.is_active"
|
x-model="pipelineModal.form.is_active"
|
||||||
class="rounded border-gray-300 text-blue-600 focus:ring-blue-400"
|
class="rounded border-gray-300 text-blue-600 focus:ring-blue-400"
|
||||||
/>
|
/>
|
||||||
<span class="text-sm text-gray-700 dark:text-gray-300">Active</span>
|
<span class="text-sm text-gray-700 dark:text-gray-300">{{ _("pipelines.active_label") }}</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
x-model="pipelineModal.form.system"
|
x-model="pipelineModal.form.system"
|
||||||
class="rounded border-gray-300 text-purple-600 focus:ring-purple-400"
|
class="rounded border-gray-300 text-purple-600 focus:ring-purple-400"
|
||||||
/>
|
/>
|
||||||
<span class="text-sm text-gray-700 dark:text-gray-300">System pipeline (visible to all users)</span>
|
<span class="text-sm text-gray-700 dark:text-gray-300">{{ _("pipelines.system_pipeline_label") }}</span>
|
||||||
</label>
|
</label>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -310,7 +310,7 @@
|
|||||||
@click="closePipelineModal()"
|
@click="closePipelineModal()"
|
||||||
class="px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50"
|
class="px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>Cancel</button>
|
>{{ _("common.cancel") }}</button>
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
:disabled="pipelineModal.saving"
|
:disabled="pipelineModal.saving"
|
||||||
@@ -358,7 +358,7 @@
|
|||||||
<!-- Step type -->
|
<!-- Step type -->
|
||||||
<div>
|
<div>
|
||||||
<label for="stepType" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="stepType" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
Step Type <span aria-hidden="true" class="text-red-500">*</span>
|
{{ _("pipelines.step_type_label") }} <span aria-hidden="true" class="text-red-500">*</span>
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
id="stepType"
|
id="stepType"
|
||||||
@@ -366,7 +366,7 @@
|
|||||||
:disabled="stepModal.editMode"
|
:disabled="stepModal.editMode"
|
||||||
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white"
|
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white"
|
||||||
>
|
>
|
||||||
<option value="">— select —</option>
|
<option value="">{{ _("common.select_placeholder") }}</option>
|
||||||
<template x-for="[key, meta] in Object.entries(stepTypes)" :key="key">
|
<template x-for="[key, meta] in Object.entries(stepTypes)" :key="key">
|
||||||
<option :value="key" x-text="meta.label"></option>
|
<option :value="key" x-text="meta.label"></option>
|
||||||
</template>
|
</template>
|
||||||
@@ -379,7 +379,7 @@
|
|||||||
<!-- Custom label -->
|
<!-- Custom label -->
|
||||||
<div>
|
<div>
|
||||||
<label for="stepLabel" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="stepLabel" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
Custom Label <span class="text-gray-400 font-normal">(optional)</span>
|
{{ _("pipelines.custom_label_label") }} <span class="text-gray-400 font-normal">{{ _("pipelines.optional_suffix") }}</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="stepLabel"
|
id="stepLabel"
|
||||||
@@ -387,7 +387,7 @@
|
|||||||
x-model="stepModal.form.label"
|
x-model="stepModal.form.label"
|
||||||
maxlength="255"
|
maxlength="255"
|
||||||
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white"
|
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white"
|
||||||
placeholder="Override the default step name"
|
placeholder="{{ _('pipelines.step_label_placeholder') }}"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -400,7 +400,7 @@
|
|||||||
x-model="stepModal.form.config.force_cloud_ocr"
|
x-model="stepModal.form.config.force_cloud_ocr"
|
||||||
class="rounded border-gray-300 text-blue-600 focus:ring-blue-400"
|
class="rounded border-gray-300 text-blue-600 focus:ring-blue-400"
|
||||||
/>
|
/>
|
||||||
<span class="text-sm text-gray-700 dark:text-gray-300">Force cloud OCR (skip local text extraction)</span>
|
<span class="text-sm text-gray-700 dark:text-gray-300">{{ _("pipelines.force_cloud_ocr_label") }}</span>
|
||||||
</label>
|
</label>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -408,14 +408,14 @@
|
|||||||
<template x-if="stepModal.form.step_type === 'ocr'">
|
<template x-if="stepModal.form.step_type === 'ocr'">
|
||||||
<div>
|
<div>
|
||||||
<label for="ocrLanguage" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="ocrLanguage" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
OCR Language
|
{{ _("pipelines.ocr_language_label") }}
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
id="ocrLanguage"
|
id="ocrLanguage"
|
||||||
x-model="stepModal.form.config.ocr_language"
|
x-model="stepModal.form.config.ocr_language"
|
||||||
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white"
|
class="w-full border border-gray-300 dark:border-gray-600 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400 dark:bg-gray-700 dark:text-white"
|
||||||
>
|
>
|
||||||
<option value="auto">Auto (use system default)</option>
|
<option value="auto">{{ _("pipelines.ocr_auto") }}</option>
|
||||||
<option value="ara">Arabic</option>
|
<option value="ara">Arabic</option>
|
||||||
<option value="chi_sim">Chinese (Simplified)</option>
|
<option value="chi_sim">Chinese (Simplified)</option>
|
||||||
<option value="chi_tra">Chinese (Traditional)</option>
|
<option value="chi_tra">Chinese (Traditional)</option>
|
||||||
@@ -446,7 +446,7 @@
|
|||||||
<option value="vie">Vietnamese</option>
|
<option value="vie">Vietnamese</option>
|
||||||
</select>
|
</select>
|
||||||
<p class="mt-1 text-xs text-gray-400">
|
<p class="mt-1 text-xs text-gray-400">
|
||||||
Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.
|
{{ _("pipelines.ocr_language_hint") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -458,7 +458,7 @@
|
|||||||
x-model="stepModal.form.enabled"
|
x-model="stepModal.form.enabled"
|
||||||
class="rounded border-gray-300 text-blue-600 focus:ring-blue-400"
|
class="rounded border-gray-300 text-blue-600 focus:ring-blue-400"
|
||||||
/>
|
/>
|
||||||
<span class="text-sm text-gray-700 dark:text-gray-300">Enabled</span>
|
<span class="text-sm text-gray-700 dark:text-gray-300">{{ _("pipelines.enabled_label") }}</span>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<!-- Error -->
|
<!-- Error -->
|
||||||
@@ -471,7 +471,7 @@
|
|||||||
@click="closeStepModal()"
|
@click="closeStepModal()"
|
||||||
class="px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50"
|
class="px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>Cancel</button>
|
>{{ _("common.cancel") }}</button>
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
:disabled="stepModal.saving"
|
:disabled="stepModal.saving"
|
||||||
@@ -515,13 +515,13 @@
|
|||||||
@click="confirmModal.open = false"
|
@click="confirmModal.open = false"
|
||||||
class="px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50"
|
class="px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>Cancel</button>
|
>{{ _("common.cancel") }}</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@click="confirmModal.action(); confirmModal.open = false"
|
@click="confirmModal.action(); confirmModal.open = false"
|
||||||
class="px-4 py-2 text-sm font-medium text-white bg-red-600 hover:bg-red-700 rounded-md"
|
class="px-4 py-2 text-sm font-medium text-white bg-red-600 hover:bg-red-700 rounded-md"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>Delete</button>
|
>{{ _("common.delete") }}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Queue Monitor — DocuElevate{% endblock %}
|
{% block title %}{{ _("queue.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block head_extra %}
|
{% block head_extra %}
|
||||||
<script src="/static/js/common.js"></script>
|
<script src="/static/js/common.js"></script>
|
||||||
@@ -11,20 +11,20 @@
|
|||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<h1 class="text-3xl font-bold mb-2">
|
<h1 class="text-3xl font-bold mb-2">
|
||||||
<i class="fas fa-stream mr-2 text-blue-500" aria-hidden="true"></i>Queue Monitor
|
<i class="fas fa-stream mr-2 text-blue-500" aria-hidden="true"></i>{{ _("queue.heading") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-600">Real-time view of the document processing pipeline and Celery task queues.</p>
|
<p class="text-gray-600">{{ _("queue.subtitle") }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Loading state -->
|
<!-- Loading state -->
|
||||||
<div id="queueLoading" class="text-center py-12">
|
<div id="queueLoading" class="text-center py-12">
|
||||||
<i class="fas fa-spinner fa-spin fa-2x text-blue-400" aria-hidden="true"></i>
|
<i class="fas fa-spinner fa-spin fa-2x text-blue-400" aria-hidden="true"></i>
|
||||||
<p class="mt-2 text-gray-500">Loading queue statistics…</p>
|
<p class="mt-2 text-gray-500">{{ _("queue.loading_stats") }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Error state -->
|
<!-- Error state -->
|
||||||
<div id="queueError" class="hidden bg-red-100 border-l-4 border-red-500 text-red-700 p-4 mb-6" role="alert">
|
<div id="queueError" class="hidden bg-red-100 border-l-4 border-red-500 text-red-700 p-4 mb-6" role="alert">
|
||||||
<p><strong>Error:</strong> <span id="queueErrorMsg"></span></p>
|
<p><strong>{{ _("common.error") }}:</strong> <span id="queueErrorMsg"></span></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Dashboard content (hidden until loaded) -->
|
<!-- Dashboard content (hidden until loaded) -->
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
<i class="fas fa-inbox text-yellow-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-inbox text-yellow-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<p class="text-sm font-medium text-gray-500">Queued Tasks</p>
|
<p class="text-sm font-medium text-gray-500">{{ _("queue.queued_tasks") }}</p>
|
||||||
<p id="totalQueued" class="text-2xl font-bold text-gray-900">0</p>
|
<p id="totalQueued" class="text-2xl font-bold text-gray-900">0</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
<i class="fas fa-cogs text-blue-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-cogs text-blue-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<p class="text-sm font-medium text-gray-500">Active Tasks</p>
|
<p class="text-sm font-medium text-gray-500">{{ _("queue.active_tasks") }}</p>
|
||||||
<p id="activeTasks" class="text-2xl font-bold text-gray-900">0</p>
|
<p id="activeTasks" class="text-2xl font-bold text-gray-900">0</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
<i class="fas fa-file-alt text-indigo-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-file-alt text-indigo-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<p class="text-sm font-medium text-gray-500">Files Processing</p>
|
<p class="text-sm font-medium text-gray-500">{{ _("queue.files_processing") }}</p>
|
||||||
<p id="filesProcessing" class="text-2xl font-bold text-gray-900">0</p>
|
<p id="filesProcessing" class="text-2xl font-bold text-gray-900">0</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
<i class="fas fa-server text-green-600 text-xl" aria-hidden="true"></i>
|
<i class="fas fa-server text-green-600 text-xl" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<p class="text-sm font-medium text-gray-500">Workers Online</p>
|
<p class="text-sm font-medium text-gray-500">{{ _("queue.workers_online") }}</p>
|
||||||
<p id="workersOnline" class="text-2xl font-bold text-gray-900">0</p>
|
<p id="workersOnline" class="text-2xl font-bold text-gray-900">0</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -89,19 +89,19 @@
|
|||||||
<div class="bg-white rounded-lg shadow">
|
<div class="bg-white rounded-lg shadow">
|
||||||
<div class="px-5 py-4 border-b border-gray-200">
|
<div class="px-5 py-4 border-b border-gray-200">
|
||||||
<h2 class="text-lg font-semibold text-gray-900">
|
<h2 class="text-lg font-semibold text-gray-900">
|
||||||
<i class="fas fa-list-ol mr-2 text-gray-500" aria-hidden="true"></i>Redis Queues
|
<i class="fas fa-list-ol mr-2 text-gray-500" aria-hidden="true"></i>{{ _("queue.redis_queues") }}
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-5">
|
<div class="p-5">
|
||||||
<table class="w-full text-sm">
|
<table class="w-full text-sm">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="text-left text-gray-500 border-b">
|
<tr class="text-left text-gray-500 border-b">
|
||||||
<th class="pb-2">Queue</th>
|
<th class="pb-2">{{ _("queue.col_queue") }}</th>
|
||||||
<th class="pb-2 text-right">Pending</th>
|
<th class="pb-2 text-right">{{ _("common.pending") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="queueRows">
|
<tbody id="queueRows">
|
||||||
<tr><td colspan="2" class="py-3 text-gray-400 text-center">No data</td></tr>
|
<tr><td colspan="2" class="py-3 text-gray-400 text-center">{{ _("queue.no_data") }}</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@@ -111,19 +111,19 @@
|
|||||||
<div class="bg-white rounded-lg shadow">
|
<div class="bg-white rounded-lg shadow">
|
||||||
<div class="px-5 py-4 border-b border-gray-200">
|
<div class="px-5 py-4 border-b border-gray-200">
|
||||||
<h2 class="text-lg font-semibold text-gray-900">
|
<h2 class="text-lg font-semibold text-gray-900">
|
||||||
<i class="fas fa-database mr-2 text-gray-500" aria-hidden="true"></i>Processing Pipeline
|
<i class="fas fa-database mr-2 text-gray-500" aria-hidden="true"></i>{{ _("queue.processing_pipeline") }}
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-5">
|
<div class="p-5">
|
||||||
<table class="w-full text-sm">
|
<table class="w-full text-sm">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="text-left text-gray-500 border-b">
|
<tr class="text-left text-gray-500 border-b">
|
||||||
<th class="pb-2">State</th>
|
<th class="pb-2">{{ _("queue.col_state") }}</th>
|
||||||
<th class="pb-2 text-right">Files</th>
|
<th class="pb-2 text-right">{{ _("queue.col_files") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="dbSummaryRows">
|
<tbody id="dbSummaryRows">
|
||||||
<tr><td colspan="2" class="py-3 text-gray-400 text-center">No data</td></tr>
|
<tr><td colspan="2" class="py-3 text-gray-400 text-center">{{ _("queue.no_data") }}</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
<div class="bg-white rounded-lg shadow mb-8">
|
<div class="bg-white rounded-lg shadow mb-8">
|
||||||
<div class="px-5 py-4 border-b border-gray-200">
|
<div class="px-5 py-4 border-b border-gray-200">
|
||||||
<h2 class="text-lg font-semibold text-gray-900">
|
<h2 class="text-lg font-semibold text-gray-900">
|
||||||
<i class="fas fa-play-circle mr-2 text-blue-500" aria-hidden="true"></i>Active Tasks
|
<i class="fas fa-play-circle mr-2 text-blue-500" aria-hidden="true"></i>{{ _("queue.active_tasks") }}
|
||||||
<span id="activeCount" class="ml-1 text-sm font-normal text-gray-500">(0)</span>
|
<span id="activeCount" class="ml-1 text-sm font-normal text-gray-500">(0)</span>
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
@@ -142,13 +142,13 @@
|
|||||||
<table class="w-full text-sm" id="activeTable">
|
<table class="w-full text-sm" id="activeTable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="text-left text-gray-500 border-b">
|
<tr class="text-left text-gray-500 border-b">
|
||||||
<th class="pb-2">Task</th>
|
<th class="pb-2">{{ _("queue.col_task") }}</th>
|
||||||
<th class="pb-2">Arguments</th>
|
<th class="pb-2">{{ _("queue.col_arguments") }}</th>
|
||||||
<th class="pb-2">Task ID</th>
|
<th class="pb-2">{{ _("queue.col_task_id") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="activeRows">
|
<tbody id="activeRows">
|
||||||
<tr><td colspan="3" class="py-3 text-gray-400 text-center">No active tasks</td></tr>
|
<tr><td colspan="3" class="py-3 text-gray-400 text-center">{{ _("queue.no_active_tasks") }}</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@@ -158,20 +158,20 @@
|
|||||||
<div class="bg-white rounded-lg shadow mb-8">
|
<div class="bg-white rounded-lg shadow mb-8">
|
||||||
<div class="px-5 py-4 border-b border-gray-200">
|
<div class="px-5 py-4 border-b border-gray-200">
|
||||||
<h2 class="text-lg font-semibold text-gray-900">
|
<h2 class="text-lg font-semibold text-gray-900">
|
||||||
<i class="fas fa-file-medical-alt mr-2 text-indigo-500" aria-hidden="true"></i>Recently Processing Files
|
<i class="fas fa-file-medical-alt mr-2 text-indigo-500" aria-hidden="true"></i>{{ _("queue.recently_processing") }}
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-5 overflow-x-auto">
|
<div class="p-5 overflow-x-auto">
|
||||||
<table class="w-full text-sm">
|
<table class="w-full text-sm">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="text-left text-gray-500 border-b">
|
<tr class="text-left text-gray-500 border-b">
|
||||||
<th class="pb-2">File</th>
|
<th class="pb-2">{{ _("queue.col_file") }}</th>
|
||||||
<th class="pb-2">Current Step</th>
|
<th class="pb-2">{{ _("queue.col_current_step") }}</th>
|
||||||
<th class="pb-2 text-right">Actions</th>
|
<th class="pb-2 text-right">{{ _("common.actions") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="recentRows">
|
<tbody id="recentRows">
|
||||||
<tr><td colspan="3" class="py-3 text-gray-400 text-center">No files currently processing</td></tr>
|
<tr><td colspan="3" class="py-3 text-gray-400 text-center">{{ _("queue.no_files_processing") }}</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@@ -180,8 +180,8 @@
|
|||||||
<!-- Auto-refresh info -->
|
<!-- Auto-refresh info -->
|
||||||
<div class="text-center text-gray-400 text-xs mb-4">
|
<div class="text-center text-gray-400 text-xs mb-4">
|
||||||
<i class="fas fa-sync-alt mr-1" aria-hidden="true"></i>
|
<i class="fas fa-sync-alt mr-1" aria-hidden="true"></i>
|
||||||
Auto-refreshes every <span id="refreshInterval">10</span> seconds —
|
{{ _("queue.auto_refresh_1") }} <span id="refreshInterval">10</span> {{ _("queue.auto_refresh_2") }} —
|
||||||
Last updated: <span id="lastUpdated">—</span>
|
{{ _("queue.last_updated") }} <span id="lastUpdated">—</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Search Documents - DocuElevate{% endblock %}
|
{% block title %}{{ _("search.page_title") }} - DocuElevate{% endblock %}
|
||||||
|
|
||||||
{% block head_extra %}
|
{% block head_extra %}
|
||||||
<script src="/static/js/common.js"></script>
|
<script src="/static/js/common.js"></script>
|
||||||
@@ -121,74 +121,74 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container mx-auto px-4 py-8">
|
<div class="container mx-auto px-4 py-8">
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<h1 class="text-3xl font-bold mb-6"><i class="fas fa-search text-blue-500" aria-hidden="true"></i> Document Search</h1>
|
<h1 class="text-3xl font-bold mb-6"><i class="fas fa-search text-blue-500" aria-hidden="true"></i> {{ _("search.heading") }}</h1>
|
||||||
|
|
||||||
<!-- Search box -->
|
<!-- Search box -->
|
||||||
<div class="search-box" role="search">
|
<div class="search-box" role="search">
|
||||||
<label for="search-input" class="sr-only">Search documents</label>
|
<label for="search-input" class="sr-only">{{ _("search.input_aria_label") }}</label>
|
||||||
<input
|
<input
|
||||||
type="search"
|
type="search"
|
||||||
id="search-input"
|
id="search-input"
|
||||||
placeholder="Search documents by content, sender, tags, type..."
|
placeholder="{{ _('search.input_placeholder') }}"
|
||||||
value="{{ query }}"
|
value="{{ query }}"
|
||||||
autofocus
|
autofocus
|
||||||
>
|
>
|
||||||
<button type="button" id="search-btn" aria-label="Search documents">
|
<button type="button" id="search-btn" aria-label="{{ _('search.input_aria_label') }}">
|
||||||
<i class="fas fa-search" aria-hidden="true"></i> Search
|
<i class="fas fa-search" aria-hidden="true"></i> {{ _("search.button") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Content-finding filters -->
|
<!-- Content-finding filters -->
|
||||||
<div class="search-filters" id="search-filters">
|
<div class="search-filters" id="search-filters">
|
||||||
<div class="search-filter-item">
|
<div class="search-filter-item">
|
||||||
<label for="filter-document-type">Document Type</label>
|
<label for="filter-document-type">{{ _("search.filter_document_type") }}</label>
|
||||||
<input type="text" id="filter-document-type" placeholder="e.g. Invoice" aria-label="Filter by document type">
|
<input type="text" id="filter-document-type" placeholder="{{ _('search.filter_document_type_placeholder') }}" aria-label="{{ _('search.filter_aria_document_type') }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="search-filter-item">
|
<div class="search-filter-item">
|
||||||
<label for="filter-tags">Tags</label>
|
<label for="filter-tags">{{ _("search.filter_tags") }}</label>
|
||||||
<input type="text" id="filter-tags" placeholder="e.g. amazon" aria-label="Filter by tag">
|
<input type="text" id="filter-tags" placeholder="{{ _('search.filter_tags_placeholder') }}" aria-label="{{ _('search.filter_aria_tag') }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="search-filter-item">
|
<div class="search-filter-item">
|
||||||
<label for="filter-sender">Sender</label>
|
<label for="filter-sender">{{ _("search.filter_sender") }}</label>
|
||||||
<input type="text" id="filter-sender" placeholder="e.g. ACME Corp" aria-label="Filter by sender">
|
<input type="text" id="filter-sender" placeholder="{{ _('search.filter_sender_placeholder') }}" aria-label="{{ _('search.filter_aria_sender') }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="search-filter-item">
|
<div class="search-filter-item">
|
||||||
<label for="filter-language">Language</label>
|
<label for="filter-language">{{ _("search.filter_language") }}</label>
|
||||||
<input type="text" id="filter-language" placeholder="e.g. de" aria-label="Filter by language code">
|
<input type="text" id="filter-language" placeholder="{{ _('search.filter_language_placeholder') }}" aria-label="{{ _('search.filter_aria_language') }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="search-filter-item">
|
<div class="search-filter-item">
|
||||||
<label for="filter-text-quality">Text Quality</label>
|
<label for="filter-text-quality">{{ _("search.filter_text_quality") }}</label>
|
||||||
<select id="filter-text-quality" aria-label="Filter by OCR text quality">
|
<select id="filter-text-quality" aria-label="{{ _('search.filter_aria_text_quality') }}">
|
||||||
<option value="">All</option>
|
<option value="">{{ _("search.filter_text_quality_all") }}</option>
|
||||||
<option value="high">High</option>
|
<option value="high">{{ _("search.filter_text_quality_high") }}</option>
|
||||||
<option value="medium">Medium</option>
|
<option value="medium">{{ _("search.filter_text_quality_medium") }}</option>
|
||||||
<option value="low">Low</option>
|
<option value="low">{{ _("search.filter_text_quality_low") }}</option>
|
||||||
<option value="no_text">No text</option>
|
<option value="no_text">{{ _("search.filter_text_quality_no_text") }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="search-filter-item">
|
<div class="search-filter-item">
|
||||||
<label for="filter-date-from">Date From</label>
|
<label for="filter-date-from">{{ _("search.filter_date_from") }}</label>
|
||||||
<input type="date" id="filter-date-from" aria-label="Filter from date">
|
<input type="date" id="filter-date-from" aria-label="{{ _('search.filter_aria_date_from') }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="search-filter-item">
|
<div class="search-filter-item">
|
||||||
<label for="filter-date-to">Date To</label>
|
<label for="filter-date-to">{{ _("search.filter_date_to") }}</label>
|
||||||
<input type="date" id="filter-date-to" aria-label="Filter to date">
|
<input type="date" id="filter-date-to" aria-label="{{ _('search.filter_aria_date_to') }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="search-filter-item" style="align-self: flex-end;">
|
<div class="search-filter-item" style="align-self: flex-end;">
|
||||||
<button type="button" id="clear-filters-btn" style="padding: 0.4rem 0.75rem; border: 1px solid #d1d5db; border-radius: 0.375rem; font-size: 0.8rem; cursor: pointer; background: white; color: #374151;" aria-label="Clear all filters">
|
<button type="button" id="clear-filters-btn" style="padding: 0.4rem 0.75rem; border: 1px solid #d1d5db; border-radius: 0.375rem; font-size: 0.8rem; cursor: pointer; background: white; color: #374151;" aria-label="{{ _('search.filter_aria_clear') }}">
|
||||||
Clear Filters
|
{{ _("search.filter_clear_button") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Saved Searches -->
|
<!-- Saved Searches -->
|
||||||
<div class="search-saved-bar" id="saved-searches-bar">
|
<div class="search-saved-bar" id="saved-searches-bar">
|
||||||
<span class="saved-label"><i class="fas fa-bookmark" aria-hidden="true"></i> Saved Searches:</span>
|
<span class="saved-label"><i class="fas fa-bookmark" aria-hidden="true"></i> {{ _("search.saved_label") }}:</span>
|
||||||
<span id="saved-searches-list" aria-live="polite" style="display: flex; gap: 0.25rem; flex-wrap: wrap;">
|
<span id="saved-searches-list" aria-live="polite" style="display: flex; gap: 0.25rem; flex-wrap: wrap;">
|
||||||
<span style="color: #9ca3af; font-size: 0.85rem;">Loading...</span>
|
<span style="color: #9ca3af; font-size: 0.85rem;">{{ _("search.saved_loading") }}</span>
|
||||||
</span>
|
</span>
|
||||||
<button type="button" id="save-search-btn" class="btn-save-search" aria-label="Save current search and filters as a saved search">
|
<button type="button" id="save-search-btn" class="btn-save-search" aria-label="{{ _('search.saved_aria_save') }}">
|
||||||
<i class="fas fa-plus" aria-hidden="true"></i> Save Current
|
<i class="fas fa-plus" aria-hidden="true"></i> {{ _("search.saved_button") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Settings - DocuElevate{% endblock %}
|
{% block title %}{{ _("settings.title") }} - DocuElevate{% endblock %}
|
||||||
|
|
||||||
{# Category icon mapping #}
|
{# Category icon mapping #}
|
||||||
{% set category_icons = {
|
{% set category_icons = {
|
||||||
@@ -48,27 +48,27 @@
|
|||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<div class="flex flex-col sm:flex-row justify-between items-start gap-4 mb-4">
|
<div class="flex flex-col sm:flex-row justify-between items-start gap-4 mb-4">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="text-3xl font-bold mb-1">Application Settings</h1>
|
<h1 class="text-3xl font-bold mb-1">{{ _("settings.page_heading") }}</h1>
|
||||||
<p class="text-gray-500 text-sm">
|
<p class="text-gray-500 text-sm">
|
||||||
Manage configuration. Priority: <span class="inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800">DB</span> >
|
{{ _("settings.manage_config_prefix") }} <span class="inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800">{{ _("settings.source_db_badge") }}</span> >
|
||||||
<span class="inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800 ml-1">ENV</span> >
|
<span class="inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800 ml-1">{{ _("settings.source_env_badge") }}</span> >
|
||||||
<span class="inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-gray-100 text-gray-800 ml-1">DEFAULT</span>
|
<span class="inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-gray-100 text-gray-800 ml-1">{{ _("settings.source_default_badge") }}</span>
|
||||||
<span class="mx-1.5">·</span> <span class="text-red-600">*</span> = restart required <span class="mx-1.5">·</span> <i class="fas fa-lock text-xs" aria-hidden="true"></i> = encrypted at rest
|
<span class="mx-1.5">·</span> <span class="text-red-600">*</span> {{ _("settings.restart_required_suffix") }} <span class="mx-1.5">·</span> <i class="fas fa-lock text-xs" aria-hidden="true"></i> {{ _("settings.encrypted_suffix") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2 flex-shrink-0">
|
<div class="flex items-center gap-2 flex-shrink-0">
|
||||||
<a href="/setup?step=1"
|
<a href="/setup?step=1"
|
||||||
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50">
|
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50">
|
||||||
<i class="fas fa-magic mr-1.5" aria-hidden="true"></i> Wizard
|
<i class="fas fa-magic mr-1.5" aria-hidden="true"></i> {{ _("settings.wizard_btn") }}
|
||||||
</a>
|
</a>
|
||||||
<a href="/database-wizard"
|
<a href="/database-wizard"
|
||||||
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50">
|
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50">
|
||||||
<i class="fas fa-database mr-1.5" aria-hidden="true"></i> DB Wizard
|
<i class="fas fa-database mr-1.5" aria-hidden="true"></i> {{ _("settings.db_wizard_btn") }}
|
||||||
</a>
|
</a>
|
||||||
<div class="relative" x-data="{ exportOpen: false }">
|
<div class="relative" x-data="{ exportOpen: false }">
|
||||||
<button @click="exportOpen = !exportOpen"
|
<button @click="exportOpen = !exportOpen"
|
||||||
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50">
|
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50">
|
||||||
<i class="fas fa-download mr-1.5" aria-hidden="true"></i> Export
|
<i class="fas fa-download mr-1.5" aria-hidden="true"></i> {{ _("settings.export_btn") }}
|
||||||
<i class="fas fa-chevron-down ml-1 text-xs" aria-hidden="true"></i>
|
<i class="fas fa-chevron-down ml-1 text-xs" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
<div x-show="exportOpen" @click.outside="exportOpen = false" x-transition
|
<div x-show="exportOpen" @click.outside="exportOpen = false" x-transition
|
||||||
@@ -76,18 +76,18 @@
|
|||||||
<a href="/api/settings/export-env?source=db"
|
<a href="/api/settings/export-env?source=db"
|
||||||
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50"
|
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50"
|
||||||
@click="exportOpen = false">
|
@click="exportOpen = false">
|
||||||
<i class="fas fa-database mr-2 text-green-600" aria-hidden="true"></i>DB settings only
|
<i class="fas fa-database mr-2 text-green-600" aria-hidden="true"></i>{{ _("settings.export_db_only") }}
|
||||||
</a>
|
</a>
|
||||||
<a href="/api/settings/export-env?source=effective"
|
<a href="/api/settings/export-env?source=effective"
|
||||||
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50"
|
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-50"
|
||||||
@click="exportOpen = false">
|
@click="exportOpen = false">
|
||||||
<i class="fas fa-layer-group mr-2 text-blue-600" aria-hidden="true"></i>Full effective config
|
<i class="fas fa-layer-group mr-2 text-blue-600" aria-hidden="true"></i>{{ _("settings.export_full_config") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="/admin/settings/audit-log"
|
<a href="/admin/settings/audit-log"
|
||||||
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
|
class="inline-flex items-center px-3 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
|
||||||
<i class="fas fa-history mr-1.5" aria-hidden="true"></i> Audit Log
|
<i class="fas fa-history mr-1.5" aria-hidden="true"></i> {{ _("settings.audit_log_btn") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -99,14 +99,14 @@
|
|||||||
type="search"
|
type="search"
|
||||||
x-model="searchQuery"
|
x-model="searchQuery"
|
||||||
@input="filterSettings()"
|
@input="filterSettings()"
|
||||||
placeholder="Search settings by name, key, or description…"
|
placeholder="{{ _('settings.search_placeholder') }}"
|
||||||
class="w-full pl-10 pr-20 py-2.5 border border-gray-300 rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm"
|
class="w-full pl-10 pr-20 py-2.5 border border-gray-300 rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm"
|
||||||
aria-label="Search settings"
|
aria-label="{{ _('settings.search_aria_label') }}"
|
||||||
/>
|
/>
|
||||||
<div class="absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2">
|
<div class="absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2">
|
||||||
<span x-show="searchQuery" x-text="matchCount + ' found'" x-transition class="text-xs text-gray-400"></span>
|
<span x-show="searchQuery" x-text="matchCount + ' found'" x-transition class="text-xs text-gray-400"></span>
|
||||||
<button x-show="searchQuery" @click="searchQuery = ''; filterSettings()" type="button"
|
<button x-show="searchQuery" @click="searchQuery = ''; filterSettings()" type="button"
|
||||||
class="text-gray-400 hover:text-gray-600" aria-label="Clear search">
|
class="text-gray-400 hover:text-gray-600" aria-label="{{ _('settings.search_clear_aria') }}">
|
||||||
<i class="fas fa-times"></i>
|
<i class="fas fa-times"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -125,9 +125,9 @@
|
|||||||
<!-- Two-column layout -->
|
<!-- Two-column layout -->
|
||||||
<div class="flex gap-6">
|
<div class="flex gap-6">
|
||||||
<!-- Sidebar Navigation (hidden on small screens) -->
|
<!-- Sidebar Navigation (hidden on small screens) -->
|
||||||
<aside class="hidden lg:block w-56 flex-shrink-0" aria-label="Settings categories">
|
<aside class="hidden lg:block w-56 flex-shrink-0" aria-label="{{ _('settings.categories_aria') }}">
|
||||||
<nav class="settings-sidebar space-y-0.5 bg-white rounded-lg border border-gray-200 p-2 shadow-sm">
|
<nav class="settings-sidebar space-y-0.5 bg-white rounded-lg border border-gray-200 p-2 shadow-sm">
|
||||||
<p class="px-3 py-1.5 text-xs font-semibold text-gray-400 uppercase tracking-wider">Categories</p>
|
<p class="px-3 py-1.5 text-xs font-semibold text-gray-400 uppercase tracking-wider">{{ _("settings.categories_heading") }}</p>
|
||||||
{% for category, settings_list in settings_data.items() %}
|
{% for category, settings_list in settings_data.items() %}
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@@ -149,11 +149,11 @@
|
|||||||
<div class="flex-1 min-w-0">
|
<div class="flex-1 min-w-0">
|
||||||
<!-- Mobile category jump (visible on small screens only) -->
|
<!-- Mobile category jump (visible on small screens only) -->
|
||||||
<div class="lg:hidden mb-4">
|
<div class="lg:hidden mb-4">
|
||||||
<label for="mobile-category-select" class="sr-only">Jump to category</label>
|
<label for="mobile-category-select" class="sr-only">{{ _("settings.jump_to_category") }}</label>
|
||||||
<select id="mobile-category-select"
|
<select id="mobile-category-select"
|
||||||
@change="scrollToCategory($event.target.value)"
|
@change="scrollToCategory($event.target.value)"
|
||||||
class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm shadow-sm">
|
class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm shadow-sm">
|
||||||
<option value="">Jump to category…</option>
|
<option value="">{{ _("settings.jump_to_category") }}</option>
|
||||||
{% for category in settings_data.keys() %}
|
{% for category in settings_data.keys() %}
|
||||||
<option value="{{ category }}">{{ category }} ({{ settings_data[category]|length }})</option>
|
<option value="{{ category }}">{{ category }} ({{ settings_data[category]|length }})</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -163,8 +163,8 @@
|
|||||||
<!-- No results state -->
|
<!-- No results state -->
|
||||||
<div x-show="searchQuery && matchCount === 0" class="settings-no-results bg-white rounded-lg border border-gray-200 shadow-sm">
|
<div x-show="searchQuery && matchCount === 0" class="settings-no-results bg-white rounded-lg border border-gray-200 shadow-sm">
|
||||||
<i class="fas fa-search text-4xl text-gray-300 mb-3"></i>
|
<i class="fas fa-search text-4xl text-gray-300 mb-3"></i>
|
||||||
<p class="text-gray-500 text-lg font-medium">No settings found</p>
|
<p class="text-gray-500 text-lg font-medium">{{ _("settings.no_results_heading") }}</p>
|
||||||
<p class="text-gray-400 text-sm mt-1">Try a different search term or <button type="button" @click="searchQuery = ''; filterSettings()" class="text-blue-500 hover:underline">clear the search</button></p>
|
<p class="text-gray-400 text-sm mt-1">{{ _("settings.no_results_hint") }} <button type="button" @click="searchQuery = ''; filterSettings()" class="text-blue-500 hover:underline">{{ _("settings.no_results_clear") }}</button></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form @submit.prevent="saveSettings">
|
<form @submit.prevent="saveSettings">
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
<h2 class="text-lg font-semibold text-gray-800">{{ category }}</h2>
|
<h2 class="text-lg font-semibold text-gray-800">{{ category }}</h2>
|
||||||
<span class="text-xs text-gray-400 bg-gray-100 px-2 py-0.5 rounded-full tabular-nums"
|
<span class="text-xs text-gray-400 bg-gray-100 px-2 py-0.5 rounded-full tabular-nums"
|
||||||
x-text="(visibleCount['{{ category|e }}'] ?? {{ settings_list|length }}) + ' settings'">
|
x-text="(visibleCount['{{ category|e }}'] ?? {{ settings_list|length }}) + ' settings'">
|
||||||
{{ settings_list|length }} settings
|
{{ settings_list|length }} {{ _("settings.settings_count_suffix") }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<i class="fas fa-chevron-down text-gray-400 category-chevron"
|
<i class="fas fa-chevron-down text-gray-400 category-chevron"
|
||||||
@@ -225,7 +225,7 @@
|
|||||||
<span class="text-red-600" title="Restart required">*</span>
|
<span class="text-red-600" title="Restart required">*</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if setting.metadata.required %}
|
{% if setting.metadata.required %}
|
||||||
<span class="text-red-600 text-xs">(required)</span>
|
<span class="text-red-600 text-xs">{{ _("settings.required_label") }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</label>
|
</label>
|
||||||
<!-- Source Badge -->
|
<!-- Source Badge -->
|
||||||
@@ -262,7 +262,7 @@
|
|||||||
class="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
class="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
||||||
/>
|
/>
|
||||||
<label for="{{ setting.key }}" class="ml-2 text-sm text-gray-700">
|
<label for="{{ setting.key }}" class="ml-2 text-sm text-gray-700">
|
||||||
Enable {{ setting.key.replace('_', ' ').title() }}
|
{{ _("settings.boolean_enable_prefix") }} {{ setting.key.replace('_', ' ').title() }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
{% elif setting.metadata.type == 'slider' %}
|
{% elif setting.metadata.type == 'slider' %}
|
||||||
@@ -302,7 +302,7 @@
|
|||||||
</label>
|
</label>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<p class="mt-1 text-xs text-gray-400">Effective value: <code x-text="formData['{{ setting.key }}'] || '(none)'"></code></p>
|
<p class="mt-1 text-xs text-gray-400">{{ _("settings.effective_value_label") }} <code x-text="formData['{{ setting.key }}'] || '(none)'"></code></p>
|
||||||
{% elif setting.metadata.type == 'user_autocomplete' %}
|
{% elif setting.metadata.type == 'user_autocomplete' %}
|
||||||
<!-- User Autocomplete (WCAG 2.1 AA combobox pattern) -->
|
<!-- User Autocomplete (WCAG 2.1 AA combobox pattern) -->
|
||||||
<div class="relative" x-data="userAutocomplete('{{ setting.key }}')" @click.away="showSuggestions = false">
|
<div class="relative" x-data="userAutocomplete('{{ setting.key }}')" @click.away="showSuggestions = false">
|
||||||
@@ -320,7 +320,7 @@
|
|||||||
@keydown.enter.prevent="selectHighlighted()"
|
@keydown.enter.prevent="selectHighlighted()"
|
||||||
@keydown.escape="showSuggestions = false"
|
@keydown.escape="showSuggestions = false"
|
||||||
class="setting-input w-full px-3 py-2 pl-9 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
class="setting-input w-full px-3 py-2 pl-9 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
||||||
placeholder="Start typing to search users…"
|
placeholder="{{ _('settings.user_autocomplete_placeholder') }}"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
role="combobox"
|
role="combobox"
|
||||||
aria-autocomplete="list"
|
aria-autocomplete="list"
|
||||||
@@ -371,11 +371,11 @@
|
|||||||
class="absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-md shadow-lg px-3 py-2 text-sm text-gray-500"
|
class="absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-md shadow-lg px-3 py-2 text-sm text-gray-500"
|
||||||
role="status"
|
role="status"
|
||||||
>
|
>
|
||||||
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i> No matching users found
|
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i> {{ _("settings.user_autocomplete_empty") }}
|
||||||
</div>
|
</div>
|
||||||
<p class="text-xs text-gray-400 mt-1" id="{{ setting.key }}_help">
|
<p class="text-xs text-gray-400 mt-1" id="{{ setting.key }}_help">
|
||||||
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i>
|
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i>
|
||||||
Type to search existing users by name, or enter any identifier manually.
|
{{ _("settings.user_autocomplete_hint") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{% elif setting.metadata.type == 'autocomplete' %}
|
{% elif setting.metadata.type == 'autocomplete' %}
|
||||||
@@ -395,7 +395,7 @@
|
|||||||
@keydown.enter.prevent="selectHighlighted()"
|
@keydown.enter.prevent="selectHighlighted()"
|
||||||
@keydown.escape="showSuggestions = false"
|
@keydown.escape="showSuggestions = false"
|
||||||
class="setting-input w-full px-3 py-2 pl-9 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
class="setting-input w-full px-3 py-2 pl-9 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
||||||
placeholder="Type to search or enter a value…"
|
placeholder="{{ _('settings.autocomplete_placeholder') }}"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
role="combobox"
|
role="combobox"
|
||||||
aria-autocomplete="list"
|
aria-autocomplete="list"
|
||||||
@@ -445,11 +445,11 @@
|
|||||||
class="absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-md shadow-lg px-3 py-2 text-sm text-gray-500"
|
class="absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-md shadow-lg px-3 py-2 text-sm text-gray-500"
|
||||||
role="status"
|
role="status"
|
||||||
>
|
>
|
||||||
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i> No matches — you can still type a custom value
|
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i> {{ _("settings.autocomplete_no_matches") }}
|
||||||
</div>
|
</div>
|
||||||
<p class="text-xs text-gray-400 mt-1">
|
<p class="text-xs text-gray-400 mt-1">
|
||||||
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i>
|
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i>
|
||||||
Type to search known values, or enter any custom value.
|
{{ _("settings.autocomplete_hint") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{% elif setting.metadata.type == 'model_picker' %}
|
{% elif setting.metadata.type == 'model_picker' %}
|
||||||
@@ -462,7 +462,7 @@
|
|||||||
list="{{ setting.key }}_models"
|
list="{{ setting.key }}_models"
|
||||||
x-model="formData['{{ setting.key }}']"
|
x-model="formData['{{ setting.key }}']"
|
||||||
class="setting-input w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
class="setting-input w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
||||||
placeholder="Select a common model or type a custom name…"
|
placeholder="{{ _('settings.model_picker_placeholder') }}"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
/>
|
/>
|
||||||
<datalist id="{{ setting.key }}_models">
|
<datalist id="{{ setting.key }}_models">
|
||||||
@@ -472,7 +472,7 @@
|
|||||||
</datalist>
|
</datalist>
|
||||||
<p class="text-xs text-gray-400 mt-1">
|
<p class="text-xs text-gray-400 mt-1">
|
||||||
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i>
|
<i class="fas fa-info-circle mr-1" aria-hidden="true"></i>
|
||||||
Pick from the list or type any model name supported by your provider.
|
{{ _("settings.model_picker_hint") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{% elif setting.metadata.options %}
|
{% elif setting.metadata.options %}
|
||||||
@@ -483,7 +483,7 @@
|
|||||||
x-model="formData['{{ setting.key }}']"
|
x-model="formData['{{ setting.key }}']"
|
||||||
class="setting-input w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
class="setting-input w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
||||||
>
|
>
|
||||||
<option value="">— select —</option>
|
<option value="">{{ _("common.select_placeholder") }}</option>
|
||||||
{% for opt in setting.metadata.options %}
|
{% for opt in setting.metadata.options %}
|
||||||
<option value="{{ opt }}">{{ opt }}</option>
|
<option value="{{ opt }}">{{ opt }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -503,15 +503,15 @@
|
|||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
/>
|
/>
|
||||||
<div class="absolute inset-y-0 right-0 flex items-center pr-3 space-x-2">
|
<div class="absolute inset-y-0 right-0 flex items-center pr-3 space-x-2">
|
||||||
<span class="text-xs text-gray-400" title="Value is encrypted at rest in database">
|
<span class="text-xs text-gray-400" title="{{ _('settings.encrypted_title') }}">
|
||||||
<i class="fas fa-lock"></i>
|
<i class="fas fa-lock"></i>
|
||||||
</span>
|
</span>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@click="togglePassword('{{ setting.key }}')"
|
@click="togglePassword('{{ setting.key }}')"
|
||||||
class="text-gray-400 hover:text-gray-600 focus:outline-none"
|
class="text-gray-400 hover:text-gray-600 focus:outline-none"
|
||||||
title="Show/hide value"
|
title="{{ _('settings.toggle_visibility_title') }}"
|
||||||
aria-label="Toggle password visibility"
|
aria-label="{{ _('settings.toggle_visibility_aria') }}"
|
||||||
>
|
>
|
||||||
<i :class="showPassword['{{ setting.key }}'] ? 'fas fa-eye-slash' : 'fas fa-eye'"></i>
|
<i :class="showPassword['{{ setting.key }}'] ? 'fas fa-eye-slash' : 'fas fa-eye'"></i>
|
||||||
</button>
|
</button>
|
||||||
@@ -540,10 +540,10 @@
|
|||||||
@click="revertSetting('{{ setting.key }}')"
|
@click="revertSetting('{{ setting.key }}')"
|
||||||
:disabled="revertingKey === '{{ setting.key }}'"
|
:disabled="revertingKey === '{{ setting.key }}'"
|
||||||
class="px-3 py-1 text-sm bg-red-600 text-white rounded-md hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap"
|
class="px-3 py-1 text-sm bg-red-600 text-white rounded-md hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap"
|
||||||
title="Remove DB override and revert to environment variable or default"
|
title="{{ _('settings.revert_title') }}"
|
||||||
>
|
>
|
||||||
<span x-show="revertingKey !== '{{ setting.key }}'"><i class="fas fa-trash-alt mr-1" aria-hidden="true"></i>Remove from DB</span>
|
<span x-show="revertingKey !== '{{ setting.key }}'"><i class="fas fa-trash-alt mr-1" aria-hidden="true"></i>{{ _("settings.revert_btn") }}</span>
|
||||||
<span x-show="revertingKey === '{{ setting.key }}'">Reverting…</span>
|
<span x-show="revertingKey === '{{ setting.key }}'">{{ _("settings.reverting") }}</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@@ -552,10 +552,10 @@
|
|||||||
@click="saveSetting('{{ setting.key }}')"
|
@click="saveSetting('{{ setting.key }}')"
|
||||||
:disabled="savingKey === '{{ setting.key }}'"
|
:disabled="savingKey === '{{ setting.key }}'"
|
||||||
class="px-3 py-1 text-sm bg-green-600 text-white rounded-md hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap"
|
class="px-3 py-1 text-sm bg-green-600 text-white rounded-md hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap"
|
||||||
title="Save this setting"
|
title="{{ _('settings.save_setting_title') }}"
|
||||||
>
|
>
|
||||||
<span x-show="savingKey !== '{{ setting.key }}'"><i class="fas fa-save mr-1" aria-hidden="true"></i>Save</span>
|
<span x-show="savingKey !== '{{ setting.key }}'"><i class="fas fa-save mr-1" aria-hidden="true"></i>{{ _("common.save") }}</span>
|
||||||
<span x-show="savingKey === '{{ setting.key }}'">Saving…</span>
|
<span x-show="savingKey === '{{ setting.key }}'">{{ _("settings.saving_state") }}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -573,15 +573,15 @@
|
|||||||
@click="resetForm"
|
@click="resetForm"
|
||||||
class="px-6 py-2 border border-gray-300 text-gray-700 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
class="px-6 py-2 border border-gray-300 text-gray-700 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
||||||
>
|
>
|
||||||
Reset
|
{{ _("common.reset") }}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
:disabled="saving"
|
:disabled="saving"
|
||||||
class="px-6 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed"
|
class="px-6 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed"
|
||||||
>
|
>
|
||||||
<span x-show="!saving">Save All Changes</span>
|
<span x-show="!saving">{{ _("settings.save_all_btn") }}</span>
|
||||||
<span x-show="saving">Saving...</span>
|
<span x-show="saving">{{ _("settings.saving_state") }}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,37 +1,35 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block title %}Shared Links – DocuElevate{% endblock %}
|
{% block title %}{{ _("shared.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div x-data="sharedLinks()" x-init="init(); loadLinks()" class="container mx-auto px-4 py-8 max-w-5xl">
|
<div x-data="sharedLinks()" x-init="init(); loadLinks()" class="container mx-auto px-4 py-8 max-w-5xl">
|
||||||
<header class="mb-8">
|
<header class="mb-8">
|
||||||
<h1 class="text-2xl font-bold text-gray-900 dark:text-white flex items-center gap-2">
|
<h1 class="text-2xl font-bold text-gray-900 dark:text-white flex items-center gap-2">
|
||||||
<i class="fas fa-share-alt text-blue-500" aria-hidden="true"></i>
|
<i class="fas fa-share-alt text-blue-500" aria-hidden="true"></i>
|
||||||
Shared Links
|
{{ _("shared.heading") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="mt-2 text-gray-600 dark:text-gray-400 text-sm leading-relaxed max-w-2xl">
|
<p class="mt-2 text-gray-600 dark:text-gray-400 text-sm leading-relaxed max-w-2xl">
|
||||||
Share documents with anyone via a time-limited or view-limited link.
|
{{ _("shared.subtitle") }}
|
||||||
Recipients do not need a DocuElevate account. Links can be password-protected
|
|
||||||
and revoked at any time.
|
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- Create link section -->
|
<!-- Create link section -->
|
||||||
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 mb-6" aria-labelledby="create-link-heading">
|
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-6 mb-6" aria-labelledby="create-link-heading">
|
||||||
<h2 id="create-link-heading" class="text-lg font-semibold text-gray-900 dark:text-white mb-4">Create New Shared Link</h2>
|
<h2 id="create-link-heading" class="text-lg font-semibold text-gray-900 dark:text-white mb-4">{{ _("shared.create_heading") }}</h2>
|
||||||
|
|
||||||
<form @submit.prevent="createLink()" class="space-y-4">
|
<form @submit.prevent="createLink()" class="space-y-4">
|
||||||
<!-- File ID -->
|
<!-- File ID -->
|
||||||
<div class="flex flex-col sm:flex-row gap-3 items-start sm:items-end">
|
<div class="flex flex-col sm:flex-row gap-3 items-start sm:items-end">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<label for="file-id-input" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="file-id-input" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
File ID <span class="text-red-500" aria-hidden="true">*</span>
|
{{ _("shared.file_id_label") }} <span class="text-red-500" aria-hidden="true">*</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="file-id-input"
|
id="file-id-input"
|
||||||
type="number"
|
type="number"
|
||||||
x-model.number="newLink.file_id"
|
x-model.number="newLink.file_id"
|
||||||
placeholder="e.g. 42"
|
placeholder="{{ _('shared.file_id_placeholder') }}"
|
||||||
required
|
required
|
||||||
min="1"
|
min="1"
|
||||||
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
||||||
@@ -39,20 +37,20 @@
|
|||||||
aria-required="true"
|
aria-required="true"
|
||||||
/>
|
/>
|
||||||
<p class="mt-1 text-xs text-gray-500 dark:text-gray-400">
|
<p class="mt-1 text-xs text-gray-500 dark:text-gray-400">
|
||||||
Find the file ID on the <a href="/files" class="underline hover:text-blue-600">Files</a> page or in the document detail URL.
|
{{ _("shared.file_id_help_pre") }} <a href="/files" class="underline hover:text-blue-600">{{ _("shared.files_link") }}</a> {{ _("shared.file_id_help_post") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Label (optional) -->
|
<!-- Label (optional) -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<label for="link-label-input" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="link-label-input" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
Label <span class="text-gray-400 font-normal">(optional)</span>
|
{{ _("shared.label_label") }} <span class="text-gray-400 font-normal">({{ _("shared.optional") }})</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="link-label-input"
|
id="link-label-input"
|
||||||
type="text"
|
type="text"
|
||||||
x-model="newLink.label"
|
x-model="newLink.label"
|
||||||
placeholder="e.g. Shared with Bob"
|
placeholder="{{ _('shared.label_placeholder') }}"
|
||||||
maxlength="255"
|
maxlength="255"
|
||||||
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
||||||
focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white text-sm"
|
focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white text-sm"
|
||||||
@@ -65,7 +63,7 @@
|
|||||||
<!-- Expiry -->
|
<!-- Expiry -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<label for="expires-select" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="expires-select" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
Expiry
|
{{ _("shared.expiry_label") }}
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
id="expires-select"
|
id="expires-select"
|
||||||
@@ -73,28 +71,28 @@
|
|||||||
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
||||||
focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white text-sm"
|
focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white text-sm"
|
||||||
>
|
>
|
||||||
<option :value="null">Never</option>
|
<option :value="null">{{ _("shared.expiry_never") }}</option>
|
||||||
<option value="1">1 hour</option>
|
<option value="1">{{ _("shared.expiry_1h") }}</option>
|
||||||
<option value="6">6 hours</option>
|
<option value="6">{{ _("shared.expiry_6h") }}</option>
|
||||||
<option value="12">12 hours</option>
|
<option value="12">{{ _("shared.expiry_12h") }}</option>
|
||||||
<option value="24">24 hours (1 day)</option>
|
<option value="24">{{ _("shared.expiry_24h") }}</option>
|
||||||
<option value="72">3 days</option>
|
<option value="72">{{ _("shared.expiry_3d") }}</option>
|
||||||
<option value="168">7 days</option>
|
<option value="168">{{ _("shared.expiry_7d") }}</option>
|
||||||
<option value="336">14 days</option>
|
<option value="336">{{ _("shared.expiry_14d") }}</option>
|
||||||
<option value="720">30 days</option>
|
<option value="720">{{ _("shared.expiry_30d") }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Max views -->
|
<!-- Max views -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<label for="max-views-input" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="max-views-input" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
Max downloads <span class="text-gray-400 font-normal">(optional)</span>
|
{{ _("shared.max_downloads_label") }} <span class="text-gray-400 font-normal">({{ _("shared.optional") }})</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="max-views-input"
|
id="max-views-input"
|
||||||
type="number"
|
type="number"
|
||||||
x-model.number="newLink.max_views"
|
x-model.number="newLink.max_views"
|
||||||
placeholder="Unlimited"
|
placeholder="{{ _('shared.unlimited_placeholder') }}"
|
||||||
min="1"
|
min="1"
|
||||||
max="10000"
|
max="10000"
|
||||||
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
||||||
@@ -105,13 +103,13 @@
|
|||||||
<!-- Password -->
|
<!-- Password -->
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<label for="link-password-input" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
<label for="link-password-input" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
|
||||||
Password <span class="text-gray-400 font-normal">(optional)</span>
|
{{ _("shared.password_label") }} <span class="text-gray-400 font-normal">({{ _("shared.optional") }})</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="link-password-input"
|
id="link-password-input"
|
||||||
type="password"
|
type="password"
|
||||||
x-model="newLink.password"
|
x-model="newLink.password"
|
||||||
placeholder="Leave blank for no password"
|
placeholder="{{ _('shared.password_placeholder') }}"
|
||||||
maxlength="128"
|
maxlength="128"
|
||||||
autocomplete="new-password"
|
autocomplete="new-password"
|
||||||
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
class="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm
|
||||||
@@ -135,7 +133,7 @@
|
|||||||
style="min-height:40px; min-width:44px;"
|
style="min-height:40px; min-width:44px;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-share-alt mr-2" aria-hidden="true"></i>
|
<i class="fas fa-share-alt mr-2" aria-hidden="true"></i>
|
||||||
<span x-text="creating ? 'Creating…' : 'Create Link'"></span>
|
<span x-text="creating ? '{{ _('shared.creating') }}' : '{{ _('shared.create_btn') }}'"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@@ -146,9 +144,9 @@
|
|||||||
<div class="flex items-start gap-3">
|
<div class="flex items-start gap-3">
|
||||||
<i class="fas fa-check-circle text-green-600 dark:text-green-400 mt-0.5 text-lg" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-600 dark:text-green-400 mt-0.5 text-lg" aria-hidden="true"></i>
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<p class="font-semibold text-green-800 dark:text-green-200 text-sm">Shared link created!</p>
|
<p class="font-semibold text-green-800 dark:text-green-200 text-sm">{{ _("shared.link_created") }}</p>
|
||||||
<p class="text-green-700 dark:text-green-300 text-xs mt-1">
|
<p class="text-green-700 dark:text-green-300 text-xs mt-1">
|
||||||
Copy and send this link to the recipient.
|
{{ _("shared.link_created_help") }}
|
||||||
</p>
|
</p>
|
||||||
<div class="mt-3 flex items-center gap-2">
|
<div class="mt-3 flex items-center gap-2">
|
||||||
<code
|
<code
|
||||||
@@ -164,10 +162,10 @@
|
|||||||
hover:bg-gray-200 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500
|
hover:bg-gray-200 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500
|
||||||
transition-colors"
|
transition-colors"
|
||||||
style="min-height:40px; min-width:44px;"
|
style="min-height:40px; min-width:44px;"
|
||||||
:aria-label="copied ? 'Copied!' : 'Copy link to clipboard'"
|
:aria-label="copied ? '{{ _('common.copied') }}' : '{{ _('shared.copy_link_aria') }}'"
|
||||||
>
|
>
|
||||||
<i :class="copied ? 'fas fa-check text-green-600' : 'fas fa-copy'" aria-hidden="true"></i>
|
<i :class="copied ? 'fas fa-check text-green-600' : 'fas fa-copy'" aria-hidden="true"></i>
|
||||||
<span class="ml-1 hidden sm:inline" x-text="copied ? 'Copied!' : 'Copy'"></span>
|
<span class="ml-1 hidden sm:inline" x-text="copied ? '{{ _('common.copied') }}' : '{{ _('common.copy') }}'"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -180,28 +178,28 @@
|
|||||||
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-6" aria-labelledby="links-heading">
|
<section class="bg-white dark:bg-gray-800 shadow rounded-lg p-6" aria-labelledby="links-heading">
|
||||||
<div class="flex items-center justify-between mb-4">
|
<div class="flex items-center justify-between mb-4">
|
||||||
<h2 id="links-heading" class="text-lg font-semibold text-gray-900 dark:text-white">
|
<h2 id="links-heading" class="text-lg font-semibold text-gray-900 dark:text-white">
|
||||||
Your Shared Links
|
{{ _("shared.your_links") }}
|
||||||
<span
|
<span
|
||||||
x-show="links.length > 0"
|
x-show="links.length > 0"
|
||||||
class="ml-2 inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"
|
class="ml-2 inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"
|
||||||
x-text="links.length"
|
x-text="links.length"
|
||||||
aria-label="number of links"
|
aria-label="{{ _('shared.links_count_aria') }}"
|
||||||
></span>
|
></span>
|
||||||
</h2>
|
</h2>
|
||||||
<button
|
<button
|
||||||
@click="loadLinks()"
|
@click="loadLinks()"
|
||||||
type="button"
|
type="button"
|
||||||
class="text-sm text-blue-600 hover:underline focus:outline-none focus:ring-2 focus:ring-blue-500 rounded"
|
class="text-sm text-blue-600 hover:underline focus:outline-none focus:ring-2 focus:ring-blue-500 rounded"
|
||||||
aria-label="Refresh shared links list"
|
aria-label="{{ _('shared.refresh_aria') }}"
|
||||||
>
|
>
|
||||||
<i class="fas fa-sync-alt mr-1" aria-hidden="true"></i>Refresh
|
<i class="fas fa-sync-alt mr-1" aria-hidden="true"></i>{{ _("common.refresh") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Loading state -->
|
<!-- Loading state -->
|
||||||
<template x-if="loading">
|
<template x-if="loading">
|
||||||
<p class="text-sm text-gray-400 dark:text-gray-500 py-4 text-center">
|
<p class="text-sm text-gray-400 dark:text-gray-500 py-4 text-center">
|
||||||
<i class="fas fa-spinner fa-spin mr-2" aria-hidden="true"></i>Loading…
|
<i class="fas fa-spinner fa-spin mr-2" aria-hidden="true"></i>{{ _("common.loading") }}
|
||||||
</p>
|
</p>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -209,22 +207,22 @@
|
|||||||
<template x-if="!loading && links.length === 0">
|
<template x-if="!loading && links.length === 0">
|
||||||
<div class="text-center py-10 text-gray-400 dark:text-gray-500">
|
<div class="text-center py-10 text-gray-400 dark:text-gray-500">
|
||||||
<i class="fas fa-share-alt text-3xl mb-3" aria-hidden="true"></i>
|
<i class="fas fa-share-alt text-3xl mb-3" aria-hidden="true"></i>
|
||||||
<p class="text-sm">No shared links yet. Create one above to get started.</p>
|
<p class="text-sm">{{ _("shared.no_links") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- Links list -->
|
<!-- Links list -->
|
||||||
<template x-if="!loading && links.length > 0">
|
<template x-if="!loading && links.length > 0">
|
||||||
<div class="overflow-x-auto">
|
<div class="overflow-x-auto">
|
||||||
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700 text-sm" aria-label="Shared links">
|
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700 text-sm" aria-label="{{ _('shared.table_aria') }}">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="text-left text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider">
|
<tr class="text-left text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider">
|
||||||
<th scope="col" class="pb-3 pr-4">File / Label</th>
|
<th scope="col" class="pb-3 pr-4">{{ _("shared.col_file_label") }}</th>
|
||||||
<th scope="col" class="pb-3 pr-4">Link</th>
|
<th scope="col" class="pb-3 pr-4">{{ _("shared.col_link") }}</th>
|
||||||
<th scope="col" class="pb-3 pr-4">Expiry</th>
|
<th scope="col" class="pb-3 pr-4">{{ _("shared.col_expiry") }}</th>
|
||||||
<th scope="col" class="pb-3 pr-4">Views</th>
|
<th scope="col" class="pb-3 pr-4">{{ _("shared.col_views") }}</th>
|
||||||
<th scope="col" class="pb-3 pr-4">Status</th>
|
<th scope="col" class="pb-3 pr-4">{{ _("common.status") }}</th>
|
||||||
<th scope="col" class="pb-3">Actions</th>
|
<th scope="col" class="pb-3">{{ _("common.actions") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="divide-y divide-gray-100 dark:divide-gray-700">
|
<tbody class="divide-y divide-gray-100 dark:divide-gray-700">
|
||||||
@@ -235,7 +233,7 @@
|
|||||||
<p class="font-medium text-gray-800 dark:text-gray-200 truncate" x-text="link.original_filename || ('File #' + link.file_id)"></p>
|
<p class="font-medium text-gray-800 dark:text-gray-200 truncate" x-text="link.original_filename || ('File #' + link.file_id)"></p>
|
||||||
<p x-show="link.label" class="text-xs text-gray-500 dark:text-gray-400 truncate" x-text="link.label"></p>
|
<p x-show="link.label" class="text-xs text-gray-500 dark:text-gray-400 truncate" x-text="link.label"></p>
|
||||||
<p x-show="link.has_password" class="text-xs text-yellow-600 dark:text-yellow-400 mt-0.5">
|
<p x-show="link.has_password" class="text-xs text-yellow-600 dark:text-yellow-400 mt-0.5">
|
||||||
<i class="fas fa-lock text-xs" aria-hidden="true"></i> Password protected
|
<i class="fas fa-lock text-xs" aria-hidden="true"></i> {{ _("shared.password_protected") }}
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
<!-- Link -->
|
<!-- Link -->
|
||||||
@@ -246,8 +244,8 @@
|
|||||||
type="button"
|
type="button"
|
||||||
@click="copyUrl(link.share_url)"
|
@click="copyUrl(link.share_url)"
|
||||||
class="p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 focus:outline-none focus:ring-1 focus:ring-blue-500 rounded"
|
class="p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 focus:outline-none focus:ring-1 focus:ring-blue-500 rounded"
|
||||||
aria-label="Copy link"
|
aria-label="{{ _('shared.copy_link_aria') }}"
|
||||||
title="Copy link"
|
title="{{ _('shared.copy_link_title') }}"
|
||||||
style="min-height:32px;min-width:32px;"
|
style="min-height:32px;min-width:32px;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-copy text-xs" aria-hidden="true"></i>
|
<i class="fas fa-copy text-xs" aria-hidden="true"></i>
|
||||||
@@ -257,8 +255,8 @@
|
|||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="p-1 text-gray-400 hover:text-blue-600 focus:outline-none focus:ring-1 focus:ring-blue-500 rounded"
|
class="p-1 text-gray-400 hover:text-blue-600 focus:outline-none focus:ring-1 focus:ring-blue-500 rounded"
|
||||||
aria-label="Open shared link"
|
aria-label="{{ _('shared.open_link_aria') }}"
|
||||||
title="Open in new tab"
|
title="{{ _('shared.open_in_new_tab') }}"
|
||||||
style="min-height:32px;min-width:32px;"
|
style="min-height:32px;min-width:32px;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-external-link-alt text-xs" aria-hidden="true"></i>
|
<i class="fas fa-external-link-alt text-xs" aria-hidden="true"></i>
|
||||||
@@ -278,22 +276,22 @@
|
|||||||
<td class="py-3 pr-4 whitespace-nowrap">
|
<td class="py-3 pr-4 whitespace-nowrap">
|
||||||
<template x-if="!link.is_active">
|
<template x-if="!link.is_active">
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300">
|
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300">
|
||||||
Revoked
|
{{ _("shared.status_revoked") }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<template x-if="link.is_active && isExpired(link)">
|
<template x-if="link.is_active && isExpired(link)">
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300">
|
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300">
|
||||||
Expired
|
{{ _("shared.status_expired") }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<template x-if="link.is_active && isViewLimitReached(link)">
|
<template x-if="link.is_active && isViewLimitReached(link)">
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-orange-100 text-orange-700 dark:bg-orange-900/40 dark:text-orange-300">
|
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-orange-100 text-orange-700 dark:bg-orange-900/40 dark:text-orange-300">
|
||||||
Limit reached
|
{{ _("shared.status_limit_reached") }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<template x-if="link.is_active && !isExpired(link) && !isViewLimitReached(link)">
|
<template x-if="link.is_active && !isExpired(link) && !isViewLimitReached(link)">
|
||||||
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300">
|
<span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300">
|
||||||
Active
|
{{ _("shared.status_active") }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</td>
|
</td>
|
||||||
@@ -307,9 +305,9 @@
|
|||||||
border border-red-300 dark:border-red-700 rounded hover:bg-red-50 dark:hover:bg-red-900/20
|
border border-red-300 dark:border-red-700 rounded hover:bg-red-50 dark:hover:bg-red-900/20
|
||||||
focus:outline-none focus:ring-2 focus:ring-red-500 transition-colors"
|
focus:outline-none focus:ring-2 focus:ring-red-500 transition-colors"
|
||||||
style="min-height:32px;min-width:44px;"
|
style="min-height:32px;min-width:44px;"
|
||||||
:aria-label="'Revoke shared link for ' + (link.original_filename || 'file')"
|
:aria-label="'{{ _('shared.revoke_aria_prefix') }} ' + (link.original_filename || '{{ _('shared.revoke_aria_file') }}')"
|
||||||
>
|
>
|
||||||
<i class="fas fa-ban mr-1" aria-hidden="true"></i> Revoke
|
<i class="fas fa-ban mr-1" aria-hidden="true"></i> {{ _("shared.revoke_btn") }}
|
||||||
</button>
|
</button>
|
||||||
<span x-show="!link.is_active" class="text-xs text-gray-400 dark:text-gray-500">—</span>
|
<span x-show="!link.is_active" class="text-xs text-gray-400 dark:text-gray-500">—</span>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Document Similarity - DocuElevate{% endblock %}
|
{% block title %}{{ _("similarity.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block head_extra %}
|
{% block head_extra %}
|
||||||
<style>
|
<style>
|
||||||
@@ -97,45 +97,43 @@
|
|||||||
<main id="main-content" class="sim-container px-4 py-8">
|
<main id="main-content" class="sim-container px-4 py-8">
|
||||||
<h1 class="text-2xl font-bold mb-2">
|
<h1 class="text-2xl font-bold mb-2">
|
||||||
<i class="fas fa-project-diagram text-blue-500" aria-hidden="true"></i>
|
<i class="fas fa-project-diagram text-blue-500" aria-hidden="true"></i>
|
||||||
Document Similarity
|
{{ _("similarity.heading") }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-500 mb-6 text-sm">
|
<p class="text-gray-500 mb-6 text-sm">
|
||||||
Pairs of documents with high semantic similarity, ranked by score.
|
{{ _("similarity.subtitle") }}
|
||||||
Embeddings are computed during document ingestion; a background task
|
|
||||||
also backfills any files that were processed before this feature was enabled.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Embedding coverage stats -->
|
<!-- Embedding coverage stats -->
|
||||||
<div class="stats-bar">
|
<div class="stats-bar">
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<div class="stat-value">{{ total_files }}</div>
|
<div class="stat-value">{{ total_files }}</div>
|
||||||
<div class="stat-label">Total Files</div>
|
<div class="stat-label">{{ _("similarity.stat_total_files") }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<div class="stat-value" style="color: #2563eb;">{{ files_with_embedding }}</div>
|
<div class="stat-value" style="color: #2563eb;">{{ files_with_embedding }}</div>
|
||||||
<div class="stat-label">With Embedding</div>
|
<div class="stat-label">{{ _("similarity.stat_with_embedding") }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<div class="stat-value" style="color: {% if files_missing_embedding > 0 %}#d97706{% else %}#059669{% endif %};">
|
<div class="stat-value" style="color: {% if files_missing_embedding > 0 %}#d97706{% else %}#059669{% endif %};">
|
||||||
{{ files_missing_embedding }}
|
{{ files_missing_embedding }}
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-label">Missing Embedding</div>
|
<div class="stat-label">{{ _("similarity.stat_missing_embedding") }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<div class="stat-value text-sm" style="word-break: break-all;">{{ embedding_model }}</div>
|
<div class="stat-value text-sm" style="word-break: break-all;">{{ embedding_model }}</div>
|
||||||
<div class="stat-label">Embedding Model</div>
|
<div class="stat-label">{{ _("similarity.stat_embedding_model") }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if files_missing_embedding > 0 %}
|
{% if files_missing_embedding > 0 %}
|
||||||
<div style="background: #fffff0; border: 1px solid #fefcbf; border-radius: 0.5rem; padding: 0.75rem 1rem; margin-bottom: 1.5rem; font-size: 0.85rem; color: #975a16;">
|
<div style="background: #fffff0; border: 1px solid #fefcbf; border-radius: 0.5rem; padding: 0.75rem 1rem; margin-bottom: 1.5rem; font-size: 0.85rem; color: #975a16;">
|
||||||
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
|
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
|
||||||
<strong>{{ files_missing_embedding }}</strong> file(s) have OCR text but no embedding yet.
|
<strong>{{ files_missing_embedding }}</strong> {{ _("similarity.files_missing_text") }}
|
||||||
The background task will compute them automatically every 5 minutes, or you can
|
{{ _("similarity.backfill_auto") }}
|
||||||
<button onclick="triggerBackfill()" id="backfill-btn"
|
<button onclick="triggerBackfill()" id="backfill-btn"
|
||||||
style="background: #d97706; color: white; border: none; padding: 0.2rem 0.6rem; border-radius: 0.25rem; cursor: pointer; font-size: 0.8rem; min-height: 44px; min-width: 44px;"
|
style="background: #d97706; color: white; border: none; padding: 0.2rem 0.6rem; border-radius: 0.25rem; cursor: pointer; font-size: 0.8rem; min-height: 44px; min-width: 44px;"
|
||||||
aria-label="Trigger embedding computation for all files missing embeddings">
|
aria-label="{{ _('similarity.trigger_aria') }}">
|
||||||
trigger it now
|
{{ _("similarity.trigger_now") }}
|
||||||
</button>.
|
</button>.
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -144,12 +142,12 @@
|
|||||||
<div class="controls">
|
<div class="controls">
|
||||||
<form id="pairsForm" onsubmit="loadPairs(event)" class="controls-form">
|
<form id="pairsForm" onsubmit="loadPairs(event)" class="controls-form">
|
||||||
<div class="flex flex-col gap-1">
|
<div class="flex flex-col gap-1">
|
||||||
<label for="pairThreshold">Min. similarity</label>
|
<label for="pairThreshold">{{ _("similarity.min_similarity_label") }}</label>
|
||||||
<input type="number" id="pairThreshold" min="0" max="1" step="0.05"
|
<input type="number" id="pairThreshold" min="0" max="1" step="0.05"
|
||||||
value="{{ default_threshold }}" style="min-height:44px;">
|
value="{{ default_threshold }}" style="min-height:44px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col gap-1">
|
<div class="flex flex-col gap-1">
|
||||||
<label for="pairLimit">Per page</label>
|
<label for="pairLimit">{{ _("similarity.per_page_label") }}</label>
|
||||||
<select id="pairLimit" style="min-height:44px;">
|
<select id="pairLimit" style="min-height:44px;">
|
||||||
<option value="25">25</option>
|
<option value="25">25</option>
|
||||||
<option value="50" selected>50</option>
|
<option value="50" selected>50</option>
|
||||||
@@ -159,7 +157,7 @@
|
|||||||
<button type="submit"
|
<button type="submit"
|
||||||
style="min-height:44px; background-color: #2563eb; color: white; font-weight: 700;
|
style="min-height:44px; background-color: #2563eb; color: white; font-weight: 700;
|
||||||
padding: 0 1.25rem; border: none; border-radius: 0.5rem; cursor: pointer;">
|
padding: 0 1.25rem; border: none; border-radius: 0.5rem; cursor: pointer;">
|
||||||
<i class="fas fa-search" aria-hidden="true"></i> Find Pairs
|
<i class="fas fa-search" aria-hidden="true"></i> {{ _("similarity.find_pairs_btn") }}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@@ -167,23 +165,23 @@
|
|||||||
<!-- Results area -->
|
<!-- Results area -->
|
||||||
<div id="pairs-loading" style="text-align: center; padding: 2rem; color: #718096;">
|
<div id="pairs-loading" style="text-align: center; padding: 2rem; color: #718096;">
|
||||||
<i class="fas fa-spinner fa-spin" aria-hidden="true" style="font-size: 1.5rem; margin-bottom: 0.5rem;"></i>
|
<i class="fas fa-spinner fa-spin" aria-hidden="true" style="font-size: 1.5rem; margin-bottom: 0.5rem;"></i>
|
||||||
<p>Scanning for similar document pairs…</p>
|
<p>{{ _("similarity.scanning") }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="pairs-content" style="display: none;" aria-live="polite"></div>
|
<div id="pairs-content" style="display: none;" aria-live="polite"></div>
|
||||||
<div id="pairs-empty" style="display: none;" class="empty-state">
|
<div id="pairs-empty" style="display: none;" class="empty-state">
|
||||||
<i class="fas fa-check-circle text-green-400" aria-hidden="true"></i>
|
<i class="fas fa-check-circle text-green-400" aria-hidden="true"></i>
|
||||||
<p class="font-semibold text-lg text-gray-700">No similar pairs found</p>
|
<p class="font-semibold text-lg text-gray-700">{{ _("similarity.no_pairs_heading") }}</p>
|
||||||
<p class="text-sm mt-1" id="pairs-empty-detail">
|
<p class="text-sm mt-1" id="pairs-empty-detail">
|
||||||
No document pairs exceed the similarity threshold.
|
{{ _("similarity.no_pairs_detail") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="pairs-error" style="display: none;" class="empty-state">
|
<div id="pairs-error" style="display: none;" class="empty-state">
|
||||||
<i class="fas fa-exclamation-triangle text-red-400" aria-hidden="true"></i>
|
<i class="fas fa-exclamation-triangle text-red-400" aria-hidden="true"></i>
|
||||||
<p class="font-semibold text-lg text-gray-700" id="pairs-error-msg">Failed to load pairs.</p>
|
<p class="font-semibold text-lg text-gray-700" id="pairs-error-msg">{{ _("similarity.load_error") }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Pagination -->
|
<!-- Pagination -->
|
||||||
<nav id="pairs-pagination" class="pagination" style="display: none;" aria-label="Similarity pairs pagination"></nav>
|
<nav id="pairs-pagination" class="pagination" style="display: none;" aria-label="{{ _('similarity.pagination_aria') }}"></nav>
|
||||||
</main>
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +1,28 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Upload Document{% endblock %}
|
{% block title %}{{ _("upload.page_title") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="flex flex-col items-center justify-center p-4 sm:p-8">
|
<div class="flex flex-col items-center justify-center p-4 sm:p-8">
|
||||||
<h1 class="text-2xl sm:text-3xl font-bold mb-6 sm:mb-8">Upload Files</h1>
|
<h1 class="text-2xl sm:text-3xl font-bold mb-6 sm:mb-8">{{ _("upload.page_title") }}</h1>
|
||||||
|
|
||||||
<!-- File Upload Section -->
|
<!-- File Upload Section -->
|
||||||
<div class="w-full max-w-2xl mb-6 sm:mb-8">
|
<div class="w-full max-w-2xl mb-6 sm:mb-8">
|
||||||
<h2 class="text-xl font-semibold mb-4">Upload from Device</h2>
|
<h2 class="text-xl font-semibold mb-4">{{ _("upload.section_device") }}</h2>
|
||||||
<form action="/api/ui-upload" method="POST" enctype="multipart/form-data">
|
<form action="/api/ui-upload" method="POST" enctype="multipart/form-data">
|
||||||
<div
|
<div
|
||||||
id="dropZone"
|
id="dropZone"
|
||||||
class="border-4 border-dashed border-gray-300 rounded-lg p-6 sm:p-8 bg-white text-center w-full"
|
class="border-4 border-dashed border-gray-300 rounded-lg p-6 sm:p-8 bg-white text-center w-full"
|
||||||
role="button"
|
role="button"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
aria-label="File upload area. Drag and drop files here, or press Enter to browse files."
|
aria-label="{{ _('upload.drop_zone_aria') }}"
|
||||||
ondragover="handleDragOver(event)"
|
ondragover="handleDragOver(event)"
|
||||||
ondragleave="handleDragLeave(event)"
|
ondragleave="handleDragLeave(event)"
|
||||||
>
|
>
|
||||||
<p class="text-gray-500 mb-4 hidden sm:block">
|
<p class="text-gray-500 mb-4 hidden sm:block">
|
||||||
Drag & drop files or folders here, or click to select files.
|
{{ _("upload.drop_hint_desktop") }}
|
||||||
</p>
|
</p>
|
||||||
<p class="text-gray-500 mb-4 sm:hidden">
|
<p class="text-gray-500 mb-4 sm:hidden">
|
||||||
Tap to select files or use the camera button below.
|
{{ _("upload.drop_hint_mobile") }}
|
||||||
</p>
|
</p>
|
||||||
<input
|
<input
|
||||||
id="fileInput"
|
id="fileInput"
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
onchange="handleFileSelect(event)"
|
onchange="handleFileSelect(event)"
|
||||||
name="files"
|
name="files"
|
||||||
multiple
|
multiple
|
||||||
aria-label="Select files to upload"
|
aria-label="{{ _('upload.select_file') }}"
|
||||||
accept="application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,image/*"
|
accept="application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,image/*"
|
||||||
/>
|
/>
|
||||||
<!-- Browse Files button (all devices) -->
|
<!-- Browse Files button (all devices) -->
|
||||||
@@ -41,11 +41,11 @@
|
|||||||
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded-lg transition duration-200 mb-4"
|
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded-lg transition duration-200 mb-4"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-folder-open mr-2" aria-hidden="true"></i> Browse Files
|
<i class="fas fa-folder-open mr-2" aria-hidden="true"></i> {{ _("upload.browse_button") }}
|
||||||
</button>
|
</button>
|
||||||
<div class="text-sm text-gray-500 mt-2">
|
<div class="text-sm text-gray-500 mt-2">
|
||||||
<p>Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images</p>
|
<p>{{ _("upload.file_types") }}</p>
|
||||||
<p>Maximum size: 500MB per file • Directories are uploaded recursively</p>
|
<p>{{ _("upload.file_size_hint") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
class="w-full flex items-center justify-center gap-2 bg-green-500 hover:bg-green-700 text-white font-bold py-3 px-6 rounded-lg transition duration-200 cursor-pointer"
|
class="w-full flex items-center justify-center gap-2 bg-green-500 hover:bg-green-700 text-white font-bold py-3 px-6 rounded-lg transition duration-200 cursor-pointer"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>
|
>
|
||||||
<i class="fas fa-camera" aria-hidden="true"></i> Take Photo / Scan Document
|
<i class="fas fa-camera" aria-hidden="true"></i> {{ _("upload.camera_button") }}
|
||||||
<input
|
<input
|
||||||
id="cameraInput"
|
id="cameraInput"
|
||||||
type="file"
|
type="file"
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
onchange="handleFileSelect(event)"
|
onchange="handleFileSelect(event)"
|
||||||
accept="image/*"
|
accept="image/*"
|
||||||
capture="environment"
|
capture="environment"
|
||||||
aria-label="Take photo or scan document"
|
aria-label="{{ _('upload.camera_button') }}"
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@@ -72,40 +72,40 @@
|
|||||||
|
|
||||||
<!-- URL Upload Section -->
|
<!-- URL Upload Section -->
|
||||||
<div class="w-full max-w-2xl mb-6 sm:mb-8">
|
<div class="w-full max-w-2xl mb-6 sm:mb-8">
|
||||||
<h2 class="text-xl font-semibold mb-4">Upload from URL</h2>
|
<h2 class="text-xl font-semibold mb-4">{{ _("upload.section_url") }}</h2>
|
||||||
<div class="bg-white border border-gray-300 rounded-lg p-4 sm:p-6">
|
<div class="bg-white border border-gray-300 rounded-lg p-4 sm:p-6">
|
||||||
<form id="urlUploadForm" class="space-y-4">
|
<form id="urlUploadForm" class="space-y-4">
|
||||||
<div>
|
<div>
|
||||||
<label for="urlInput" class="block text-sm font-medium text-gray-700 mb-2">
|
<label for="urlInput" class="block text-sm font-medium text-gray-700 mb-2">
|
||||||
File URL
|
{{ _("upload.url_label") }}
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="url"
|
type="url"
|
||||||
id="urlInput"
|
id="urlInput"
|
||||||
name="url"
|
name="url"
|
||||||
placeholder="https://example.com/document.pdf"
|
placeholder="{{ _('upload.url_placeholder') }}"
|
||||||
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
<p class="text-sm text-gray-500 mt-1">
|
<p class="text-sm text-gray-500 mt-1">
|
||||||
Enter a direct link to a file (PDF, Office documents, or images)
|
{{ _("upload.url_description") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label for="urlFilename" class="block text-sm font-medium text-gray-700 mb-2">
|
<label for="urlFilename" class="block text-sm font-medium text-gray-700 mb-2">
|
||||||
Filename (optional)
|
{{ _("upload.filename_label") }}
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
id="urlFilename"
|
id="urlFilename"
|
||||||
name="filename"
|
name="filename"
|
||||||
placeholder="my-document.pdf"
|
placeholder="{{ _('upload.filename_placeholder') }}"
|
||||||
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
/>
|
/>
|
||||||
<p class="text-sm text-gray-500 mt-1">
|
<p class="text-sm text-gray-500 mt-1">
|
||||||
Leave empty to use filename from URL
|
{{ _("upload.filename_description") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
class="w-full bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-4 rounded-lg transition duration-200"
|
class="w-full bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-4 rounded-lg transition duration-200"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>
|
>
|
||||||
Download and Process
|
{{ _("upload.download_button") }}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
<div id="urlStatusMessage" class="mt-4" aria-live="polite"></div>
|
<div id="urlStatusMessage" class="mt-4" aria-live="polite"></div>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>DocuElevate - Verify Your Email</title>
|
<title>{{ _("auth.verify_email_page_title") }}</title>
|
||||||
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
||||||
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
|
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<body class="bg-gray-100 min-h-screen flex items-center justify-center py-8">
|
<body class="bg-gray-100 min-h-screen flex items-center justify-center py-8">
|
||||||
<main class="bg-white rounded-lg shadow-lg p-8 max-w-md w-full text-center" role="main">
|
<main class="bg-white rounded-lg shadow-lg p-8 max-w-md w-full text-center" role="main">
|
||||||
<div class="flex justify-center mb-6">
|
<div class="flex justify-center mb-6">
|
||||||
<img src="/static/images/logo_writing.svg" alt="DocuElevate Logo" class="h-16">
|
<img src="/static/images/logo_writing.svg" alt="{{ _('auth.logo_alt') }}" class="h-16">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex justify-center mb-4">
|
<div class="flex justify-center mb-4">
|
||||||
@@ -22,19 +22,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1 class="text-2xl font-bold text-gray-800 mb-2">Check your inbox</h1>
|
<h1 class="text-2xl font-bold text-gray-800 mb-2">{{ _("auth.verify_email_heading") }}</h1>
|
||||||
<p class="text-gray-600 mb-6">
|
<p class="text-gray-600 mb-6">
|
||||||
We've sent you a verification email. Please click the link in the email to activate your account.
|
{{ _("auth.verify_email_message") }}
|
||||||
</p>
|
</p>
|
||||||
<p class="text-sm text-gray-500 mb-8">
|
<p class="text-sm text-gray-500 mb-8">
|
||||||
The link expires in 24 hours. If you don't see the email, check your spam folder.
|
{{ _("auth.verify_email_expiry") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
x-data="{ email: '', loading: false, message: '', error: '' }"
|
x-data="{ email: '', loading: false, message: '', error: '' }"
|
||||||
class="border-t border-gray-100 pt-6"
|
class="border-t border-gray-100 pt-6"
|
||||||
>
|
>
|
||||||
<p class="text-sm text-gray-600 mb-3">Didn't receive it?</p>
|
<p class="text-sm text-gray-600 mb-3">{{ _("auth.verify_email_resend_prompt") }}</p>
|
||||||
|
|
||||||
<div x-show="message" x-cloak
|
<div x-show="message" x-cloak
|
||||||
class="bg-green-100 border-l-4 border-green-500 text-green-700 p-3 mb-4 rounded text-sm"
|
class="bg-green-100 border-l-4 border-green-500 text-green-700 p-3 mb-4 rounded text-sm"
|
||||||
@@ -73,14 +73,14 @@
|
|||||||
novalidate
|
novalidate
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<label for="resend-email" class="sr-only">Email address</label>
|
<label for="resend-email" class="sr-only">{{ _("auth.verify_email_resend_label") }}</label>
|
||||||
<input
|
<input
|
||||||
type="email" id="resend-email" name="email"
|
type="email" id="resend-email" name="email"
|
||||||
x-model="email"
|
x-model="email"
|
||||||
placeholder="Enter your email address"
|
placeholder="{{ _('auth.verify_email_resend_placeholder') }}"
|
||||||
autocomplete="email"
|
autocomplete="email"
|
||||||
class="block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring focus:ring-indigo-500 focus:ring-opacity-50 text-sm"
|
class="block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring focus:ring-indigo-500 focus:ring-opacity-50 text-sm"
|
||||||
aria-label="Email address for resend"
|
aria-label="{{ _('auth.verify_email_resend_aria_label') }}"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@@ -90,9 +90,9 @@
|
|||||||
class="w-full flex justify-center py-2 px-4 border border-indigo-600 rounded-md text-sm font-medium text-indigo-600 hover:bg-indigo-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 disabled:opacity-50"
|
class="w-full flex justify-center py-2 px-4 border border-indigo-600 rounded-md text-sm font-medium text-indigo-600 hover:bg-indigo-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 disabled:opacity-50"
|
||||||
style="min-height:44px;"
|
style="min-height:44px;"
|
||||||
>
|
>
|
||||||
<span x-show="!loading">Resend verification email</span>
|
<span x-show="!loading">{{ _("auth.verify_email_resend_button") }}</span>
|
||||||
<span x-show="loading" x-cloak>
|
<span x-show="loading" x-cloak>
|
||||||
<i class="fas fa-spinner fa-spin mr-2" aria-hidden="true"></i>Sending…
|
<i class="fas fa-spinner fa-spin mr-2" aria-hidden="true"></i>{{ _("common.loading") }}
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
|
|
||||||
<div class="mt-6 text-center">
|
<div class="mt-6 text-center">
|
||||||
<a href="/login" class="text-sm font-medium text-blue-600 hover:text-blue-500">
|
<a href="/login" class="text-sm font-medium text-blue-600 hover:text-blue-500">
|
||||||
Back to sign in
|
{{ _("auth.verify_email_back_sign_in") }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Passwort bestätigen",
|
"auth.confirm_password": "Passwort bestätigen",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Anzeigename",
|
"auth.display_name_label": "Anzeigename",
|
||||||
"auth.email_label": "E-Mail",
|
"auth.email_label": "E-Mail",
|
||||||
"auth.forgot_password": "Passwort vergessen?",
|
"auth.forgot_password": "Passwort vergessen?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Anmelden",
|
"auth.login": "Anmelden",
|
||||||
"auth.login_title": "Anmelden",
|
"auth.login_title": "Anmelden",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Abmelden",
|
"auth.logout": "Abmelden",
|
||||||
"auth.my_account": "Mein Konto",
|
"auth.my_account": "Mein Konto",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Passwort",
|
"auth.password_label": "Passwort",
|
||||||
"auth.profile": "Profil",
|
"auth.profile": "Profil",
|
||||||
"auth.remember_me": "Angemeldet bleiben",
|
"auth.remember_me": "Angemeldet bleiben",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Registrieren",
|
"auth.signup": "Registrieren",
|
||||||
"auth.signup_title": "Registrieren",
|
"auth.signup_title": "Registrieren",
|
||||||
"auth.username_label": "Benutzername",
|
"auth.username_label": "Benutzername",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Aktionen",
|
"common.actions": "Aktionen",
|
||||||
"common.active": "Aktiv",
|
"common.active": "Aktiv",
|
||||||
"common.all": "Alle",
|
"common.all": "Alle",
|
||||||
"common.back": "Zurück",
|
"common.back": "Zurück",
|
||||||
"common.cancel": "Abbrechen",
|
"common.cancel": "Abbrechen",
|
||||||
"common.close": "Schließen",
|
"common.close": "Schließen",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Abgeschlossen",
|
"common.completed": "Abgeschlossen",
|
||||||
"common.confirm": "Bestätigen",
|
"common.confirm": "Bestätigen",
|
||||||
"common.copied": "Kopiert!",
|
"common.copied": "Kopiert!",
|
||||||
@@ -43,9 +214,12 @@
|
|||||||
"common.loading": "Laden...",
|
"common.loading": "Laden...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Weiter",
|
"common.next": "Weiter",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "Nein",
|
"common.no": "Nein",
|
||||||
"common.none": "Keine",
|
"common.none": "Keine",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Ausstehend",
|
"common.pending": "Ausstehend",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.previous": "Zurück",
|
"common.previous": "Zurück",
|
||||||
"common.processing": "Verarbeitung",
|
"common.processing": "Verarbeitung",
|
||||||
"common.refresh": "Aktualisieren",
|
"common.refresh": "Aktualisieren",
|
||||||
@@ -54,6 +228,7 @@
|
|||||||
"common.save": "Speichern",
|
"common.save": "Speichern",
|
||||||
"common.search": "Suche",
|
"common.search": "Suche",
|
||||||
"common.select": "Auswählen",
|
"common.select": "Auswählen",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Größe",
|
"common.size": "Größe",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.submit": "Absenden",
|
"common.submit": "Absenden",
|
||||||
@@ -72,6 +247,29 @@
|
|||||||
"cookie.notice_label": "Cookie-Hinweis",
|
"cookie.notice_label": "Cookie-Hinweis",
|
||||||
"cookie.policy_link": "Cookie-Richtlinie",
|
"cookie.policy_link": "Cookie-Richtlinie",
|
||||||
"cookie.privacy_link": "Datenschutzhinweis",
|
"cookie.privacy_link": "Datenschutzhinweis",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Aktive Integrationen",
|
"dashboard.active_integrations": "Aktive Integrationen",
|
||||||
"dashboard.files_this_month": "Dateien diesen Monat",
|
"dashboard.files_this_month": "Dateien diesen Monat",
|
||||||
"dashboard.files_today": "Dateien heute",
|
"dashboard.files_today": "Dateien heute",
|
||||||
@@ -82,14 +280,43 @@
|
|||||||
"dashboard.title": "Übersicht",
|
"dashboard.title": "Übersicht",
|
||||||
"dashboard.total_files": "Dateien gesamt",
|
"dashboard.total_files": "Dateien gesamt",
|
||||||
"dashboard.welcome": "Willkommen bei DocuElevate",
|
"dashboard.welcome": "Willkommen bei DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Ups, diese Seite konnten wir nicht finden!",
|
"error.404_heading": "Ups, diese Seite konnten wir nicht finden!",
|
||||||
"error.404_home": "Zur Startseite",
|
"error.404_home": "Zur Startseite",
|
||||||
"error.404_message": "Es scheint, als hätte DocuElevate das gesuchte Dokument verlegt. Keine Sorge – wir helfen Ihnen weiter.",
|
"error.404_message": "Es scheint, als hätte DocuElevate das gesuchte Dokument verlegt. Keine Sorge – wir helfen Ihnen weiter.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Unsere Server haben ein Problem und brauchen einen Moment.",
|
"error.500_description": "Unsere Server haben ein Problem und brauchen einen Moment.",
|
||||||
"error.500_heading": "Ups! Etwas ist schiefgelaufen.",
|
"error.500_heading": "Ups! Etwas ist schiefgelaufen.",
|
||||||
"error.500_home": "Zur Startseite",
|
"error.500_home": "Zur Startseite",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Zugriff verweigert",
|
"error.forbidden": "Zugriff verweigert",
|
||||||
"error.forbidden_message": "Sie haben keine Berechtigung, auf diese Seite zuzugreifen.",
|
"error.forbidden_message": "Sie haben keine Berechtigung, auf diese Seite zuzugreifen.",
|
||||||
"error.not_found": "Seite nicht gefunden",
|
"error.not_found": "Seite nicht gefunden",
|
||||||
@@ -113,43 +340,59 @@
|
|||||||
"files.document_title": "Dokumenttitel",
|
"files.document_title": "Dokumenttitel",
|
||||||
"files.drop_overlay_hint": "Unterstützt PDF, Office-Dokumente, Bilder, HTML, Markdown und mehr",
|
"files.drop_overlay_hint": "Unterstützt PDF, Office-Dokumente, Bilder, HTML, Markdown und mehr",
|
||||||
"files.drop_overlay_title": "Dateien oder Ordner zum Hochladen hier ablegen",
|
"files.drop_overlay_title": "Dateien oder Ordner zum Hochladen hier ablegen",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "Dateigröße",
|
"files.file_size": "Dateigröße",
|
||||||
"files.filename": "Dateiname",
|
"files.filename": "Dateiname",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "Alle Anbieter",
|
"files.filter_all_providers": "Alle Anbieter",
|
||||||
"files.filter_all_statuses": "Alle Status",
|
"files.filter_all_statuses": "Alle Status",
|
||||||
"files.filter_all_types": "Alle Typen",
|
"files.filter_all_types": "Alle Typen",
|
||||||
"files.filter_apply": "Filter anwenden",
|
"files.filter_apply": "Filter anwenden",
|
||||||
"files.filter_clear": "Zurücksetzen",
|
"files.filter_clear": "Zurücksetzen",
|
||||||
"files.filter_date_from": "Datum von",
|
"files.filter_date_from": "Datum von",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Datum bis",
|
"files.filter_date_to": "Datum bis",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME-Typ",
|
"files.filter_mime_type": "MIME-Typ",
|
||||||
"files.filter_ocr_all": "Alle Dateien",
|
"files.filter_ocr_all": "Alle Dateien",
|
||||||
"files.filter_ocr_good": "Gute Qualität",
|
"files.filter_ocr_good": "Gute Qualität",
|
||||||
"files.filter_ocr_poor": "Schlechte Qualität",
|
"files.filter_ocr_poor": "Schlechte Qualität",
|
||||||
"files.filter_ocr_quality": "OCR-Qualität",
|
"files.filter_ocr_quality": "OCR-Qualität",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Noch nicht bewertet",
|
"files.filter_ocr_unchecked": "Noch nicht bewertet",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Dateinamen eingeben...",
|
"files.filter_search_placeholder": "Dateinamen eingeben...",
|
||||||
"files.filter_storage_provider": "Speicheranbieter",
|
"files.filter_storage_provider": "Speicheranbieter",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "z.B. Rechnung,Amazon",
|
"files.filter_tags_placeholder": "z.B. Rechnung,Amazon",
|
||||||
"files.fulltext_search_label": "Volltextsuche",
|
"files.fulltext_search_label": "Volltextsuche",
|
||||||
"files.fulltext_search_placeholder": "Dokumentinhalt, Absender, Tags, Typ durchsuchen...",
|
"files.fulltext_search_placeholder": "Dokumentinhalt, Absender, Tags, Typ durchsuchen...",
|
||||||
"files.no_files": "Keine Dateien gefunden",
|
"files.no_files": "Keine Dateien gefunden",
|
||||||
"files.ocr_status": "OCR-Status",
|
"files.ocr_status": "OCR-Status",
|
||||||
"files.page_title": "Dateiübersicht",
|
"files.page_title": "Dateiübersicht",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "Erste",
|
"files.pagination_first": "Erste",
|
||||||
"files.pagination_last": "Letzte",
|
"files.pagination_last": "Letzte",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Nächste",
|
"files.pagination_next": "Nächste",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Vorherige",
|
"files.pagination_previous": "Vorherige",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Vorschau schließen",
|
"files.preview_modal_close": "Vorschau schließen",
|
||||||
"files.preview_modal_title": "Vorschau",
|
"files.preview_modal_title": "Vorschau",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "Warteschlange ansehen",
|
"files.queue_banner_link": "Warteschlange ansehen",
|
||||||
"files.saved_searches_empty": "Noch keine gespeicherten Suchen",
|
"files.saved_searches_empty": "Noch keine gespeicherten Suchen",
|
||||||
"files.saved_searches_error": "Gespeicherte Suchen konnten nicht geladen werden",
|
"files.saved_searches_error": "Gespeicherte Suchen konnten nicht geladen werden",
|
||||||
"files.saved_searches_label": "Gespeicherte Suchen",
|
"files.saved_searches_label": "Gespeicherte Suchen",
|
||||||
"files.saved_searches_save": "Aktuelle speichern",
|
"files.saved_searches_save": "Aktuelle speichern",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "Keine Ergebnisse gefunden.",
|
"files.search_results_empty": "Keine Ergebnisse gefunden.",
|
||||||
"files.search_results_title": "Suchergebnisse",
|
"files.search_results_title": "Suchergebnisse",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Aktionen",
|
"files.table_actions": "Aktionen",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Erstellt am",
|
"files.table_created_at": "Erstellt am",
|
||||||
"files.table_empty": "Keine Dateien gefunden",
|
"files.table_empty": "Keine Dateien gefunden",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -158,6 +401,8 @@
|
|||||||
"files.table_select_all": "Alle Dateien auf dieser Seite auswählen",
|
"files.table_select_all": "Alle Dateien auf dieser Seite auswählen",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Dateien",
|
"files.title": "Dateien",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Dateien hochladen",
|
"files.upload_modal_header": "Dateien hochladen",
|
||||||
"files.uploaded": "Hochgeladen",
|
"files.uploaded": "Hochgeladen",
|
||||||
"footer.about": "Über uns",
|
"footer.about": "Über uns",
|
||||||
@@ -206,6 +451,7 @@
|
|||||||
"help.getting_started": "Erste Schritte",
|
"help.getting_started": "Erste Schritte",
|
||||||
"help.heading": "Hilfezentrum",
|
"help.heading": "Hilfezentrum",
|
||||||
"help.page_title": "Hilfezentrum",
|
"help.page_title": "Hilfezentrum",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Schnellstart",
|
"help.quickstart_heading": "Schnellstart",
|
||||||
"help.quickstart_storage": "Speicher verbinden",
|
"help.quickstart_storage": "Speicher verbinden",
|
||||||
"help.quickstart_storage_desc": "Gehen Sie zu Einstellungen und verknüpfen Sie Ihre Cloud-Konten. Verarbeitete Dokumente werden automatisch an jedes konfigurierte Ziel weitergeleitet.",
|
"help.quickstart_storage_desc": "Gehen Sie zu Einstellungen und verknüpfen Sie Ihre Cloud-Konten. Verarbeitete Dokumente werden automatisch an jedes konfigurierte Ziel weitergeleitet.",
|
||||||
@@ -227,6 +473,8 @@
|
|||||||
"help.support_admin_message": "Wenden Sie sich an Ihren Administrator für Support-Informationen.",
|
"help.support_admin_message": "Wenden Sie sich an Ihren Administrator für Support-Informationen.",
|
||||||
"help.support_description": "Können Sie nicht finden, was Sie suchen? Unser Support-Team hilft Ihnen gerne weiter.",
|
"help.support_description": "Können Sie nicht finden, was Sie suchen? Unser Support-Team hilft Ihnen gerne weiter.",
|
||||||
"help.support_heading": "Support kontaktieren",
|
"help.support_heading": "Support kontaktieren",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Hilfecenter",
|
"help.title": "Hilfecenter",
|
||||||
"help.workflows_creating": "Eine Pipeline erstellen",
|
"help.workflows_creating": "Eine Pipeline erstellen",
|
||||||
"help.workflows_definition": "Eine Pipeline ist eine Reihe von Verarbeitungsschritten, die automatisch ausgeführt werden, wenn ein Dokument aufgenommen wird. Jeder Schritt kann das Dokument transformieren, anreichern oder weiterleiten.",
|
"help.workflows_definition": "Eine Pipeline ist eine Reihe von Verarbeitungsschritten, die automatisch ausgeführt werden, wenn ein Dokument aufgenommen wird. Jeder Schritt kann das Dokument transformieren, anreichern oder weiterleiten.",
|
||||||
@@ -243,6 +491,8 @@
|
|||||||
"help.workflows_typical_steps": "Typische Schritte",
|
"help.workflows_typical_steps": "Typische Schritte",
|
||||||
"help.workflows_what_is": "Was ist eine Pipeline?",
|
"help.workflows_what_is": "Was ist eine Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligente Dokumentenverarbeitung",
|
"index.badge_intelligent": "Intelligente Dokumentenverarbeitung",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud-Speicher: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud-Speicher: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "E-Mail- & URL-basierte Dokumentenaufnahme",
|
"index.capabilities_ingestion": "E-Mail- & URL-basierte Dokumentenaufnahme",
|
||||||
"index.capabilities_ocr": "OCR & Metadatenextraktion mit KI",
|
"index.capabilities_ocr": "OCR & Metadatenextraktion mit KI",
|
||||||
@@ -254,6 +504,7 @@
|
|||||||
"index.cta_pricing": "Preise ansehen",
|
"index.cta_pricing": "Preise ansehen",
|
||||||
"index.cta_signup": "Kostenloses Konto erstellen",
|
"index.cta_signup": "Kostenloses Konto erstellen",
|
||||||
"index.dashboard_subtitle": "Intelligente Dokumentenverarbeitung & -verwaltung",
|
"index.dashboard_subtitle": "Intelligente Dokumentenverarbeitung & -verwaltung",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "KI-Metadatenextraktion",
|
"index.feature_ai": "KI-Metadatenextraktion",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini und andere KI-Anbieter klassifizieren Dokumente und extrahieren wichtige Felder wie Daten, Beträge und Betreffzeilen.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini und andere KI-Anbieter klassifizieren Dokumente und extrahieren wichtige Felder wie Daten, Beträge und Betreffzeilen.",
|
||||||
"index.feature_cloud": "Multi-Cloud-Speicher",
|
"index.feature_cloud": "Multi-Cloud-Speicher",
|
||||||
@@ -291,13 +542,19 @@
|
|||||||
"index.quick_search_desc": "Volltextsuche über Dokumente",
|
"index.quick_search_desc": "Volltextsuche über Dokumente",
|
||||||
"index.quick_subscription": "Mein Abonnement",
|
"index.quick_subscription": "Mein Abonnement",
|
||||||
"index.quick_subscription_desc": "Tarif & Nutzungsdetails anzeigen",
|
"index.quick_subscription_desc": "Tarif & Nutzungsdetails anzeigen",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Dokument hochladen",
|
"index.quick_upload": "Dokument hochladen",
|
||||||
"index.quick_upload_desc": "Eine neue Datei verarbeiten",
|
"index.quick_upload_desc": "Eine neue Datei verarbeiten",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligente Dokumentenverarbeitung & -verwaltung",
|
"index.single_user_subtitle": "Intelligente Dokumentenverarbeitung & -verwaltung",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Aktive Benutzer",
|
"index.stat_active_users": "Aktive Benutzer",
|
||||||
"index.stat_files_month": "Dateien diesen Monat",
|
"index.stat_files_month": "Dateien diesen Monat",
|
||||||
"index.stat_files_today": "Dateien heute",
|
"index.stat_files_today": "Dateien heute",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Dateien gesamt",
|
"index.stat_total_files": "Dateien gesamt",
|
||||||
"index.tier_plan": "Tarif",
|
"index.tier_plan": "Tarif",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -425,20 +682,65 @@
|
|||||||
"notifications.title": "Benachrichtigungen",
|
"notifications.title": "Benachrichtigungen",
|
||||||
"notifications.unread_count": "{count} ungelesene Benachrichtigungen",
|
"notifications.unread_count": "{count} ungelesene Benachrichtigungen",
|
||||||
"pipelines.active_label": "Aktiv",
|
"pipelines.active_label": "Aktiv",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Pipeline erstellen",
|
"pipelines.create": "Pipeline erstellen",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Standard",
|
"pipelines.default_label": "Standard",
|
||||||
"pipelines.description_label": "Beschreibung",
|
"pipelines.description_label": "Beschreibung",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Deaktiviert",
|
"pipelines.disabled_label": "Deaktiviert",
|
||||||
"pipelines.edit": "Pipeline bearbeiten",
|
"pipelines.edit": "Pipeline bearbeiten",
|
||||||
"pipelines.empty_state": "Noch keine Pipelines",
|
"pipelines.empty_state": "Noch keine Pipelines",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Aktiviert",
|
"pipelines.enabled_label": "Aktiviert",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inaktiv",
|
"pipelines.inactive_label": "Inaktiv",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Verarbeitungs-Pipelines",
|
"pipelines.page_title": "Verarbeitungs-Pipelines",
|
||||||
"pipelines.set_default": "Als meine Standard-Pipeline festlegen",
|
"pipelines.set_default": "Als meine Standard-Pipeline festlegen",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Verarbeitungs-Pipelines",
|
"pipelines.title": "Verarbeitungs-Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Suchen",
|
"search.button": "Suchen",
|
||||||
"search.error_message": "Suche ist vorübergehend nicht verfügbar. Bitte versuchen Sie es gleich erneut.",
|
"search.error_message": "Suche ist vorübergehend nicht verfügbar. Bitte versuchen Sie es gleich erneut.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Filter zurücksetzen",
|
"search.filter_clear_button": "Filter zurücksetzen",
|
||||||
"search.filter_date_from": "Datum von",
|
"search.filter_date_from": "Datum von",
|
||||||
"search.filter_date_to": "Datum bis",
|
"search.filter_date_to": "Datum bis",
|
||||||
@@ -448,6 +750,7 @@
|
|||||||
"search.filter_language_placeholder": "z.B. de",
|
"search.filter_language_placeholder": "z.B. de",
|
||||||
"search.filter_sender": "Absender",
|
"search.filter_sender": "Absender",
|
||||||
"search.filter_sender_placeholder": "z.B. ACME GmbH",
|
"search.filter_sender_placeholder": "z.B. ACME GmbH",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "z.B. Amazon",
|
"search.filter_tags_placeholder": "z.B. Amazon",
|
||||||
"search.filter_text_quality": "Textqualität",
|
"search.filter_text_quality": "Textqualität",
|
||||||
"search.filter_text_quality_all": "Alle",
|
"search.filter_text_quality_all": "Alle",
|
||||||
@@ -456,6 +759,7 @@
|
|||||||
"search.filter_text_quality_medium": "Mittel",
|
"search.filter_text_quality_medium": "Mittel",
|
||||||
"search.filter_text_quality_no_text": "Kein Text",
|
"search.filter_text_quality_no_text": "Kein Text",
|
||||||
"search.heading": "Dokumentensuche",
|
"search.heading": "Dokumentensuche",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Dokumente nach Inhalt, Absender, Tags, Typ suchen...",
|
"search.input_placeholder": "Dokumente nach Inhalt, Absender, Tags, Typ suchen...",
|
||||||
"search.loading_indicator": "Suche läuft…",
|
"search.loading_indicator": "Suche läuft…",
|
||||||
"search.no_results": "Keine Ergebnisse gefunden",
|
"search.no_results": "Keine Ergebnisse gefunden",
|
||||||
@@ -463,16 +767,129 @@
|
|||||||
"search.placeholder": "Nach Dateiname, Inhalt, Tags suchen...",
|
"search.placeholder": "Nach Dateiname, Inhalt, Tags suchen...",
|
||||||
"search.result_empty": "Keine Dokumente gefunden, die Ihrer Suche entsprechen.",
|
"search.result_empty": "Keine Dokumente gefunden, die Ihrer Suche entsprechen.",
|
||||||
"search.results_count": "{count} Ergebnisse gefunden",
|
"search.results_count": "{count} Ergebnisse gefunden",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Aktuelle speichern",
|
"search.saved_button": "Aktuelle speichern",
|
||||||
"search.saved_empty": "Noch keine gespeicherten Suchen",
|
"search.saved_empty": "Noch keine gespeicherten Suchen",
|
||||||
"search.saved_error": "Gespeicherte Suchen konnten nicht geladen werden",
|
"search.saved_error": "Gespeicherte Suchen konnten nicht geladen werden",
|
||||||
"search.saved_label": "Gespeicherte Suchen",
|
"search.saved_label": "Gespeicherte Suchen",
|
||||||
"search.saved_loading": "Laden...",
|
"search.saved_loading": "Laden...",
|
||||||
"search.title": "Dokumente suchen",
|
"search.title": "Dokumente suchen",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Möchten Sie diese Einstellung wirklich zurücksetzen?",
|
"settings.reset_confirm": "Möchten Sie diese Einstellung wirklich zurücksetzen?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Einstellung konnte nicht gespeichert werden",
|
"settings.save_error": "Einstellung konnte nicht gespeichert werden",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Einstellung erfolgreich gespeichert",
|
"settings.save_success": "Einstellung erfolgreich gespeichert",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Einstellungen",
|
"settings.title": "Einstellungen",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App-Version",
|
"status.app_version": "App-Version",
|
||||||
"status.build_date": "Build-Datum",
|
"status.build_date": "Build-Datum",
|
||||||
"status.container_id": "Container-ID",
|
"status.container_id": "Container-ID",
|
||||||
@@ -489,6 +906,7 @@
|
|||||||
"upload.drag_drop": "Dateien hierher ziehen oder zum Durchsuchen klicken",
|
"upload.drag_drop": "Dateien hierher ziehen oder zum Durchsuchen klicken",
|
||||||
"upload.drop_hint_desktop": "Dateien oder Ordner hierher ziehen oder klicken, um Dateien auszuwählen.",
|
"upload.drop_hint_desktop": "Dateien oder Ordner hierher ziehen oder klicken, um Dateien auszuwählen.",
|
||||||
"upload.drop_hint_mobile": "Tippen Sie, um Dateien auszuwählen, oder verwenden Sie die Kamera-Schaltfläche unten.",
|
"upload.drop_hint_mobile": "Tippen Sie, um Dateien auszuwählen, oder verwenden Sie die Kamera-Schaltfläche unten.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload fehlgeschlagen",
|
"upload.error": "Upload fehlgeschlagen",
|
||||||
"upload.error_invalid_url": "Ungültiges URL-Format",
|
"upload.error_invalid_url": "Ungültiges URL-Format",
|
||||||
"upload.error_url_required": "Bitte geben Sie eine URL ein",
|
"upload.error_url_required": "Bitte geben Sie eine URL ein",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -193,7 +193,7 @@
|
|||||||
"upload.button_processing": "Processing...",
|
"upload.button_processing": "Processing...",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
@@ -481,5 +481,423 @@
|
|||||||
"language.lv": "Latviešu",
|
"language.lv": "Latviešu",
|
||||||
"language.lt": "Lietuvių",
|
"language.lt": "Lietuvių",
|
||||||
"language.lb": "Lëtzebuergesch",
|
"language.lb": "Lëtzebuergesch",
|
||||||
"language.ca": "Català"
|
"language.ca": "Català",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
|
"common.next_page": "Next page",
|
||||||
|
"common.page": "Page",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
|
"files.pagination_of": "of",
|
||||||
|
"files.pagination_files": "files",
|
||||||
|
"files.table_aria": "File records",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.sign_in_with": "Sign in with"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Iniciar sesión",
|
"auth.login": "Iniciar sesión",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Cerrar sesión",
|
"auth.logout": "Cerrar sesión",
|
||||||
"auth.my_account": "Mi cuenta",
|
"auth.my_account": "Mi cuenta",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Perfil",
|
"auth.profile": "Perfil",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Registrarse",
|
"auth.signup": "Registrarse",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Acciones",
|
"common.actions": "Acciones",
|
||||||
"common.active": "Activo",
|
"common.active": "Activo",
|
||||||
"common.all": "Todo",
|
"common.all": "Todo",
|
||||||
"common.back": "Atrás",
|
"common.back": "Atrás",
|
||||||
"common.cancel": "Cancelar",
|
"common.cancel": "Cancelar",
|
||||||
"common.close": "Cerrar",
|
"common.close": "Cerrar",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completado",
|
"common.completed": "Completado",
|
||||||
"common.confirm": "Confirmar",
|
"common.confirm": "Confirmar",
|
||||||
"common.copied": "¡Copiado!",
|
"common.copied": "¡Copiado!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Cargando...",
|
"common.loading": "Cargando...",
|
||||||
"common.name": "Nombre",
|
"common.name": "Nombre",
|
||||||
"common.next": "Siguiente",
|
"common.next": "Siguiente",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "Ninguno",
|
"common.none": "Ninguno",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pendiente",
|
"common.pending": "Pendiente",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Procesando",
|
"common.processing": "Procesando",
|
||||||
"common.refresh": "Actualizar",
|
"common.refresh": "Actualizar",
|
||||||
"common.reset": "Restablecer",
|
"common.reset": "Restablecer",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Guardar",
|
"common.save": "Guardar",
|
||||||
"common.search": "Buscar",
|
"common.search": "Buscar",
|
||||||
"common.select": "Seleccionar",
|
"common.select": "Seleccionar",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Tamaño",
|
"common.size": "Tamaño",
|
||||||
"common.status": "Estado",
|
"common.status": "Estado",
|
||||||
"common.success": "Éxito",
|
"common.success": "Éxito",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Aviso de cookies",
|
"cookie.notice_label": "Aviso de cookies",
|
||||||
"cookie.policy_link": "Política de cookies",
|
"cookie.policy_link": "Política de cookies",
|
||||||
"cookie.privacy_link": "Aviso de privacidad",
|
"cookie.privacy_link": "Aviso de privacidad",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Integraciones activas",
|
"dashboard.active_integrations": "Integraciones activas",
|
||||||
"dashboard.files_this_month": "Archivos este mes",
|
"dashboard.files_this_month": "Archivos este mes",
|
||||||
"dashboard.files_today": "Archivos hoy",
|
"dashboard.files_today": "Archivos hoy",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Panel",
|
"dashboard.title": "Panel",
|
||||||
"dashboard.total_files": "Total de archivos",
|
"dashboard.total_files": "Total de archivos",
|
||||||
"dashboard.welcome": "Bienvenido a DocuElevate",
|
"dashboard.welcome": "Bienvenido a DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Prohibido",
|
"error.forbidden": "Prohibido",
|
||||||
"error.forbidden_message": "No tiene permiso para acceder a esta página.",
|
"error.forbidden_message": "No tiene permiso para acceder a esta página.",
|
||||||
"error.not_found": "Página no encontrada",
|
"error.not_found": "Página no encontrada",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Título del documento",
|
"files.document_title": "Título del documento",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "Tamaño del archivo",
|
"files.file_size": "Tamaño del archivo",
|
||||||
"files.filename": "Nombre del archivo",
|
"files.filename": "Nombre del archivo",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No se encontraron archivos",
|
"files.no_files": "No se encontraron archivos",
|
||||||
"files.ocr_status": "Estado OCR",
|
"files.ocr_status": "Estado OCR",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Etiquetas",
|
"files.tags": "Etiquetas",
|
||||||
"files.title": "Archivos",
|
"files.title": "Archivos",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Subido",
|
"files.uploaded": "Subido",
|
||||||
"footer.attributions": "Atribuciones",
|
"footer.attributions": "Atribuciones",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Primeros pasos",
|
"help.getting_started": "Primeros pasos",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Centro de ayuda",
|
"help.title": "Centro de ayuda",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notificaciones",
|
"notifications.title": "Notificaciones",
|
||||||
"notifications.unread_count": "{count} notificaciones no leídas",
|
"notifications.unread_count": "{count} notificaciones no leídas",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Crear pipeline",
|
"pipelines.create": "Crear pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Editar pipeline",
|
"pipelines.edit": "Editar pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Pipelines de procesamiento",
|
"pipelines.title": "Pipelines de procesamiento",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No se encontraron resultados",
|
"search.no_results": "No se encontraron resultados",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Buscar por nombre, contenido, etiquetas...",
|
"search.placeholder": "Buscar por nombre, contenido, etiquetas...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} resultados encontrados",
|
"search.results_count": "{count} resultados encontrados",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Buscar documentos",
|
"search.title": "Buscar documentos",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "¿Está seguro de que desea restablecer esta configuración?",
|
"settings.reset_confirm": "¿Está seguro de que desea restablecer esta configuración?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Error al guardar la configuración",
|
"settings.save_error": "Error al guardar la configuración",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Configuración guardada con éxito",
|
"settings.save_success": "Configuración guardada con éxito",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Configuración",
|
"settings.title": "Configuración",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Arrastre archivos aquí o haga clic para buscar",
|
"upload.drag_drop": "Arrastre archivos aquí o haga clic para buscar",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Error al subir",
|
"upload.error": "Error al subir",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Se connecter",
|
"auth.login": "Se connecter",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Se déconnecter",
|
"auth.logout": "Se déconnecter",
|
||||||
"auth.my_account": "Mon compte",
|
"auth.my_account": "Mon compte",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profil",
|
"auth.profile": "Profil",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "S'inscrire",
|
"auth.signup": "S'inscrire",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Actif",
|
"common.active": "Actif",
|
||||||
"common.all": "Tout",
|
"common.all": "Tout",
|
||||||
"common.back": "Retour",
|
"common.back": "Retour",
|
||||||
"common.cancel": "Annuler",
|
"common.cancel": "Annuler",
|
||||||
"common.close": "Fermer",
|
"common.close": "Fermer",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Terminé",
|
"common.completed": "Terminé",
|
||||||
"common.confirm": "Confirmer",
|
"common.confirm": "Confirmer",
|
||||||
"common.copied": "Copié !",
|
"common.copied": "Copié !",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Chargement...",
|
"common.loading": "Chargement...",
|
||||||
"common.name": "Nom",
|
"common.name": "Nom",
|
||||||
"common.next": "Suivant",
|
"common.next": "Suivant",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "Non",
|
"common.no": "Non",
|
||||||
"common.none": "Aucun",
|
"common.none": "Aucun",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "En attente",
|
"common.pending": "En attente",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "En cours de traitement",
|
"common.processing": "En cours de traitement",
|
||||||
"common.refresh": "Actualiser",
|
"common.refresh": "Actualiser",
|
||||||
"common.reset": "Réinitialiser",
|
"common.reset": "Réinitialiser",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Enregistrer",
|
"common.save": "Enregistrer",
|
||||||
"common.search": "Rechercher",
|
"common.search": "Rechercher",
|
||||||
"common.select": "Sélectionner",
|
"common.select": "Sélectionner",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Taille",
|
"common.size": "Taille",
|
||||||
"common.status": "Statut",
|
"common.status": "Statut",
|
||||||
"common.success": "Succès",
|
"common.success": "Succès",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Avis relatif aux cookies",
|
"cookie.notice_label": "Avis relatif aux cookies",
|
||||||
"cookie.policy_link": "Politique de cookies",
|
"cookie.policy_link": "Politique de cookies",
|
||||||
"cookie.privacy_link": "Avis de confidentialité",
|
"cookie.privacy_link": "Avis de confidentialité",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Intégrations actives",
|
"dashboard.active_integrations": "Intégrations actives",
|
||||||
"dashboard.files_this_month": "Fichiers ce mois-ci",
|
"dashboard.files_this_month": "Fichiers ce mois-ci",
|
||||||
"dashboard.files_today": "Fichiers aujourd'hui",
|
"dashboard.files_today": "Fichiers aujourd'hui",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Tableau de bord",
|
"dashboard.title": "Tableau de bord",
|
||||||
"dashboard.total_files": "Total des fichiers",
|
"dashboard.total_files": "Total des fichiers",
|
||||||
"dashboard.welcome": "Bienvenue sur DocuElevate",
|
"dashboard.welcome": "Bienvenue sur DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Interdit",
|
"error.forbidden": "Interdit",
|
||||||
"error.forbidden_message": "Vous n'avez pas la permission d'accéder à cette page.",
|
"error.forbidden_message": "Vous n'avez pas la permission d'accéder à cette page.",
|
||||||
"error.not_found": "Page non trouvée",
|
"error.not_found": "Page non trouvée",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Titre du document",
|
"files.document_title": "Titre du document",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "Taille du fichier",
|
"files.file_size": "Taille du fichier",
|
||||||
"files.filename": "Nom du fichier",
|
"files.filename": "Nom du fichier",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "Aucun fichier trouvé",
|
"files.no_files": "Aucun fichier trouvé",
|
||||||
"files.ocr_status": "Statut OCR",
|
"files.ocr_status": "Statut OCR",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Étiquettes",
|
"files.tags": "Étiquettes",
|
||||||
"files.title": "Fichiers",
|
"files.title": "Fichiers",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Téléversé",
|
"files.uploaded": "Téléversé",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Premiers pas",
|
"help.getting_started": "Premiers pas",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Centre d'aide",
|
"help.title": "Centre d'aide",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} notifications non lues",
|
"notifications.unread_count": "{count} notifications non lues",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Créer un pipeline",
|
"pipelines.create": "Créer un pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Modifier le pipeline",
|
"pipelines.edit": "Modifier le pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Pipelines de traitement",
|
"pipelines.title": "Pipelines de traitement",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "Aucun résultat trouvé",
|
"search.no_results": "Aucun résultat trouvé",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Rechercher par nom, contenu, étiquettes...",
|
"search.placeholder": "Rechercher par nom, contenu, étiquettes...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} résultats trouvés",
|
"search.results_count": "{count} résultats trouvés",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Rechercher des documents",
|
"search.title": "Rechercher des documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Êtes-vous sûr de vouloir réinitialiser ce paramètre ?",
|
"settings.reset_confirm": "Êtes-vous sûr de vouloir réinitialiser ce paramètre ?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Échec de l'enregistrement du paramètre",
|
"settings.save_error": "Échec de l'enregistrement du paramètre",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Paramètre enregistré avec succès",
|
"settings.save_success": "Paramètre enregistré avec succès",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Paramètres",
|
"settings.title": "Paramètres",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Glissez-déposez vos fichiers ici ou cliquez pour parcourir",
|
"upload.drag_drop": "Glissez-déposez vos fichiers ici ou cliquez pour parcourir",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Échec du téléversement",
|
"upload.error": "Échec du téléversement",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Accedi",
|
"auth.login": "Accedi",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Esci",
|
"auth.logout": "Esci",
|
||||||
"auth.my_account": "Il mio account",
|
"auth.my_account": "Il mio account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profilo",
|
"auth.profile": "Profilo",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Registrati",
|
"auth.signup": "Registrati",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Azioni",
|
"common.actions": "Azioni",
|
||||||
"common.active": "Attivo",
|
"common.active": "Attivo",
|
||||||
"common.all": "Tutto",
|
"common.all": "Tutto",
|
||||||
"common.back": "Indietro",
|
"common.back": "Indietro",
|
||||||
"common.cancel": "Annulla",
|
"common.cancel": "Annulla",
|
||||||
"common.close": "Chiudi",
|
"common.close": "Chiudi",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completato",
|
"common.completed": "Completato",
|
||||||
"common.confirm": "Conferma",
|
"common.confirm": "Conferma",
|
||||||
"common.copied": "Copiato!",
|
"common.copied": "Copiato!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Caricamento...",
|
"common.loading": "Caricamento...",
|
||||||
"common.name": "Nome",
|
"common.name": "Nome",
|
||||||
"common.next": "Avanti",
|
"common.next": "Avanti",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "Nessuno",
|
"common.none": "Nessuno",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "In attesa",
|
"common.pending": "In attesa",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "In elaborazione",
|
"common.processing": "In elaborazione",
|
||||||
"common.refresh": "Aggiorna",
|
"common.refresh": "Aggiorna",
|
||||||
"common.reset": "Reimposta",
|
"common.reset": "Reimposta",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Salva",
|
"common.save": "Salva",
|
||||||
"common.search": "Cerca",
|
"common.search": "Cerca",
|
||||||
"common.select": "Seleziona",
|
"common.select": "Seleziona",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Dimensione",
|
"common.size": "Dimensione",
|
||||||
"common.status": "Stato",
|
"common.status": "Stato",
|
||||||
"common.success": "Successo",
|
"common.success": "Successo",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Avviso sui cookie",
|
"cookie.notice_label": "Avviso sui cookie",
|
||||||
"cookie.policy_link": "Politica sui cookie",
|
"cookie.policy_link": "Politica sui cookie",
|
||||||
"cookie.privacy_link": "Informativa sulla privacy",
|
"cookie.privacy_link": "Informativa sulla privacy",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Integrazioni attive",
|
"dashboard.active_integrations": "Integrazioni attive",
|
||||||
"dashboard.files_this_month": "File questo mese",
|
"dashboard.files_this_month": "File questo mese",
|
||||||
"dashboard.files_today": "File oggi",
|
"dashboard.files_today": "File oggi",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Cruscotto",
|
"dashboard.title": "Cruscotto",
|
||||||
"dashboard.total_files": "File totali",
|
"dashboard.total_files": "File totali",
|
||||||
"dashboard.welcome": "Benvenuto su DocuElevate",
|
"dashboard.welcome": "Benvenuto su DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Vietato",
|
"error.forbidden": "Vietato",
|
||||||
"error.forbidden_message": "Non hai il permesso di accedere a questa pagina.",
|
"error.forbidden_message": "Non hai il permesso di accedere a questa pagina.",
|
||||||
"error.not_found": "Pagina non trovata",
|
"error.not_found": "Pagina non trovata",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Titolo del documento",
|
"files.document_title": "Titolo del documento",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "Dimensione del file",
|
"files.file_size": "Dimensione del file",
|
||||||
"files.filename": "Nome del file",
|
"files.filename": "Nome del file",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "Nessun file trovato",
|
"files.no_files": "Nessun file trovato",
|
||||||
"files.ocr_status": "Stato OCR",
|
"files.ocr_status": "Stato OCR",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tag",
|
"files.tags": "Tag",
|
||||||
"files.title": "File",
|
"files.title": "File",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Caricato",
|
"files.uploaded": "Caricato",
|
||||||
"footer.attributions": "Attribuzioni",
|
"footer.attributions": "Attribuzioni",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Per iniziare",
|
"help.getting_started": "Per iniziare",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Centro assistenza",
|
"help.title": "Centro assistenza",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifiche",
|
"notifications.title": "Notifiche",
|
||||||
"notifications.unread_count": "{count} notifiche non lette",
|
"notifications.unread_count": "{count} notifiche non lette",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Crea pipeline",
|
"pipelines.create": "Crea pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Modifica pipeline",
|
"pipelines.edit": "Modifica pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Pipeline di elaborazione",
|
"pipelines.title": "Pipeline di elaborazione",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "Nessun risultato trovato",
|
"search.no_results": "Nessun risultato trovato",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Cerca per nome, contenuto, tag...",
|
"search.placeholder": "Cerca per nome, contenuto, tag...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} risultati trovati",
|
"search.results_count": "{count} risultati trovati",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Cerca documenti",
|
"search.title": "Cerca documenti",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Sei sicuro di voler reimpostare questa impostazione?",
|
"settings.reset_confirm": "Sei sicuro di voler reimpostare questa impostazione?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Salvataggio impostazione fallito",
|
"settings.save_error": "Salvataggio impostazione fallito",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Impostazione salvata con successo",
|
"settings.save_success": "Impostazione salvata con successo",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Impostazioni",
|
"settings.title": "Impostazioni",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Trascina i file qui o fai clic per sfogliare",
|
"upload.drag_drop": "Trascina i file qui o fai clic per sfogliare",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Caricamento fallito",
|
"upload.error": "Caricamento fallito",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Inloggen",
|
"auth.login": "Inloggen",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Uitloggen",
|
"auth.logout": "Uitloggen",
|
||||||
"auth.my_account": "Mijn account",
|
"auth.my_account": "Mijn account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profiel",
|
"auth.profile": "Profiel",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Registreren",
|
"auth.signup": "Registreren",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Acties",
|
"common.actions": "Acties",
|
||||||
"common.active": "Actief",
|
"common.active": "Actief",
|
||||||
"common.all": "Alles",
|
"common.all": "Alles",
|
||||||
"common.back": "Terug",
|
"common.back": "Terug",
|
||||||
"common.cancel": "Annuleren",
|
"common.cancel": "Annuleren",
|
||||||
"common.close": "Sluiten",
|
"common.close": "Sluiten",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Voltooid",
|
"common.completed": "Voltooid",
|
||||||
"common.confirm": "Bevestigen",
|
"common.confirm": "Bevestigen",
|
||||||
"common.copied": "Gekopieerd!",
|
"common.copied": "Gekopieerd!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Laden...",
|
"common.loading": "Laden...",
|
||||||
"common.name": "Naam",
|
"common.name": "Naam",
|
||||||
"common.next": "Volgende",
|
"common.next": "Volgende",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "Nee",
|
"common.no": "Nee",
|
||||||
"common.none": "Geen",
|
"common.none": "Geen",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "In afwachting",
|
"common.pending": "In afwachting",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Verwerken",
|
"common.processing": "Verwerken",
|
||||||
"common.refresh": "Vernieuwen",
|
"common.refresh": "Vernieuwen",
|
||||||
"common.reset": "Herstellen",
|
"common.reset": "Herstellen",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Opslaan",
|
"common.save": "Opslaan",
|
||||||
"common.search": "Zoeken",
|
"common.search": "Zoeken",
|
||||||
"common.select": "Selecteren",
|
"common.select": "Selecteren",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Grootte",
|
"common.size": "Grootte",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Succes",
|
"common.success": "Succes",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookiemelding",
|
"cookie.notice_label": "Cookiemelding",
|
||||||
"cookie.policy_link": "Cookiebeleid",
|
"cookie.policy_link": "Cookiebeleid",
|
||||||
"cookie.privacy_link": "Privacyverklaring",
|
"cookie.privacy_link": "Privacyverklaring",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Actieve integraties",
|
"dashboard.active_integrations": "Actieve integraties",
|
||||||
"dashboard.files_this_month": "Bestanden deze maand",
|
"dashboard.files_this_month": "Bestanden deze maand",
|
||||||
"dashboard.files_today": "Bestanden vandaag",
|
"dashboard.files_today": "Bestanden vandaag",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Totaal bestanden",
|
"dashboard.total_files": "Totaal bestanden",
|
||||||
"dashboard.welcome": "Welkom bij DocuElevate",
|
"dashboard.welcome": "Welkom bij DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Verboden",
|
"error.forbidden": "Verboden",
|
||||||
"error.forbidden_message": "U heeft geen toestemming om deze pagina te openen.",
|
"error.forbidden_message": "U heeft geen toestemming om deze pagina te openen.",
|
||||||
"error.not_found": "Pagina niet gevonden",
|
"error.not_found": "Pagina niet gevonden",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Documenttitel",
|
"files.document_title": "Documenttitel",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "Bestandsgrootte",
|
"files.file_size": "Bestandsgrootte",
|
||||||
"files.filename": "Bestandsnaam",
|
"files.filename": "Bestandsnaam",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "Geen bestanden gevonden",
|
"files.no_files": "Geen bestanden gevonden",
|
||||||
"files.ocr_status": "OCR-status",
|
"files.ocr_status": "OCR-status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Bestanden",
|
"files.title": "Bestanden",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Geüpload",
|
"files.uploaded": "Geüpload",
|
||||||
"footer.attributions": "Attributies",
|
"footer.attributions": "Attributies",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Aan de slag",
|
"help.getting_started": "Aan de slag",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Helpcentrum",
|
"help.title": "Helpcentrum",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Meldingen",
|
"notifications.title": "Meldingen",
|
||||||
"notifications.unread_count": "{count} ongelezen meldingen",
|
"notifications.unread_count": "{count} ongelezen meldingen",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Pipeline maken",
|
"pipelines.create": "Pipeline maken",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Pipeline bewerken",
|
"pipelines.edit": "Pipeline bewerken",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Verwerkingspipelines",
|
"pipelines.title": "Verwerkingspipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "Geen resultaten gevonden",
|
"search.no_results": "Geen resultaten gevonden",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Zoeken op naam, inhoud, tags...",
|
"search.placeholder": "Zoeken op naam, inhoud, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} resultaten gevonden",
|
"search.results_count": "{count} resultaten gevonden",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Documenten zoeken",
|
"search.title": "Documenten zoeken",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Weet u zeker dat u deze instelling wilt herstellen?",
|
"settings.reset_confirm": "Weet u zeker dat u deze instelling wilt herstellen?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Instelling opslaan mislukt",
|
"settings.save_error": "Instelling opslaan mislukt",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Instelling succesvol opgeslagen",
|
"settings.save_success": "Instelling succesvol opgeslagen",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Instellingen",
|
"settings.title": "Instellingen",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Sleep bestanden hierheen of klik om te bladeren",
|
"upload.drag_drop": "Sleep bestanden hierheen of klik om te bladeren",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload mislukt",
|
"upload.error": "Upload mislukt",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Zaloguj się",
|
"auth.login": "Zaloguj się",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Wyloguj się",
|
"auth.logout": "Wyloguj się",
|
||||||
"auth.my_account": "Moje konto",
|
"auth.my_account": "Moje konto",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profil",
|
"auth.profile": "Profil",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Zarejestruj się",
|
"auth.signup": "Zarejestruj się",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Akcje",
|
"common.actions": "Akcje",
|
||||||
"common.active": "Aktywny",
|
"common.active": "Aktywny",
|
||||||
"common.all": "Wszystko",
|
"common.all": "Wszystko",
|
||||||
"common.back": "Wstecz",
|
"common.back": "Wstecz",
|
||||||
"common.cancel": "Anuluj",
|
"common.cancel": "Anuluj",
|
||||||
"common.close": "Zamknij",
|
"common.close": "Zamknij",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Zakończono",
|
"common.completed": "Zakończono",
|
||||||
"common.confirm": "Potwierdź",
|
"common.confirm": "Potwierdź",
|
||||||
"common.copied": "Skopiowano!",
|
"common.copied": "Skopiowano!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Ładowanie...",
|
"common.loading": "Ładowanie...",
|
||||||
"common.name": "Nazwa",
|
"common.name": "Nazwa",
|
||||||
"common.next": "Dalej",
|
"common.next": "Dalej",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "Nie",
|
"common.no": "Nie",
|
||||||
"common.none": "Brak",
|
"common.none": "Brak",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Oczekujące",
|
"common.pending": "Oczekujące",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Przetwarzanie",
|
"common.processing": "Przetwarzanie",
|
||||||
"common.refresh": "Odśwież",
|
"common.refresh": "Odśwież",
|
||||||
"common.reset": "Resetuj",
|
"common.reset": "Resetuj",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Zapisz",
|
"common.save": "Zapisz",
|
||||||
"common.search": "Szukaj",
|
"common.search": "Szukaj",
|
||||||
"common.select": "Wybierz",
|
"common.select": "Wybierz",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Rozmiar",
|
"common.size": "Rozmiar",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Sukces",
|
"common.success": "Sukces",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Informacja o plikach cookie",
|
"cookie.notice_label": "Informacja o plikach cookie",
|
||||||
"cookie.policy_link": "Polityka plików cookie",
|
"cookie.policy_link": "Polityka plików cookie",
|
||||||
"cookie.privacy_link": "Informacja o prywatności",
|
"cookie.privacy_link": "Informacja o prywatności",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Aktywne integracje",
|
"dashboard.active_integrations": "Aktywne integracje",
|
||||||
"dashboard.files_this_month": "Pliki w tym miesiącu",
|
"dashboard.files_this_month": "Pliki w tym miesiącu",
|
||||||
"dashboard.files_today": "Pliki dzisiaj",
|
"dashboard.files_today": "Pliki dzisiaj",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Pulpit",
|
"dashboard.title": "Pulpit",
|
||||||
"dashboard.total_files": "Pliki ogółem",
|
"dashboard.total_files": "Pliki ogółem",
|
||||||
"dashboard.welcome": "Witamy w DocuElevate",
|
"dashboard.welcome": "Witamy w DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Zabroniono",
|
"error.forbidden": "Zabroniono",
|
||||||
"error.forbidden_message": "Nie masz uprawnień do dostępu do tej strony.",
|
"error.forbidden_message": "Nie masz uprawnień do dostępu do tej strony.",
|
||||||
"error.not_found": "Nie znaleziono strony",
|
"error.not_found": "Nie znaleziono strony",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Tytuł dokumentu",
|
"files.document_title": "Tytuł dokumentu",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "Rozmiar pliku",
|
"files.file_size": "Rozmiar pliku",
|
||||||
"files.filename": "Nazwa pliku",
|
"files.filename": "Nazwa pliku",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "Nie znaleziono plików",
|
"files.no_files": "Nie znaleziono plików",
|
||||||
"files.ocr_status": "Status OCR",
|
"files.ocr_status": "Status OCR",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tagi",
|
"files.tags": "Tagi",
|
||||||
"files.title": "Pliki",
|
"files.title": "Pliki",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Przesłano",
|
"files.uploaded": "Przesłano",
|
||||||
"footer.attributions": "Atrybuty",
|
"footer.attributions": "Atrybuty",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Pierwsze kroki",
|
"help.getting_started": "Pierwsze kroki",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Centrum pomocy",
|
"help.title": "Centrum pomocy",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Powiadomienia",
|
"notifications.title": "Powiadomienia",
|
||||||
"notifications.unread_count": "{count} nieprzeczytanych powiadomień",
|
"notifications.unread_count": "{count} nieprzeczytanych powiadomień",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Utwórz potok",
|
"pipelines.create": "Utwórz potok",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edytuj potok",
|
"pipelines.edit": "Edytuj potok",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Potoki przetwarzania",
|
"pipelines.title": "Potoki przetwarzania",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "Nie znaleziono wyników",
|
"search.no_results": "Nie znaleziono wyników",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Szukaj wg nazwy, treści, tagów...",
|
"search.placeholder": "Szukaj wg nazwy, treści, tagów...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "Znaleziono {count} wyników",
|
"search.results_count": "Znaleziono {count} wyników",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Szukaj dokumentów",
|
"search.title": "Szukaj dokumentów",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Czy na pewno chcesz zresetować to ustawienie?",
|
"settings.reset_confirm": "Czy na pewno chcesz zresetować to ustawienie?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Nie udało się zapisać ustawienia",
|
"settings.save_error": "Nie udało się zapisać ustawienia",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Ustawienie zapisane pomyślnie",
|
"settings.save_success": "Ustawienie zapisane pomyślnie",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Ustawienia",
|
"settings.title": "Ustawienia",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Przeciągnij pliki tutaj lub kliknij, aby przeglądać",
|
"upload.drag_drop": "Przeciągnij pliki tutaj lub kliknij, aby przeglądać",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Przesyłanie nie powiodło się",
|
"upload.error": "Przesyłanie nie powiodło się",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Iniciar sessão",
|
"auth.login": "Iniciar sessão",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Terminar sessão",
|
"auth.logout": "Terminar sessão",
|
||||||
"auth.my_account": "A minha conta",
|
"auth.my_account": "A minha conta",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Perfil",
|
"auth.profile": "Perfil",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Registar",
|
"auth.signup": "Registar",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Ações",
|
"common.actions": "Ações",
|
||||||
"common.active": "Ativo",
|
"common.active": "Ativo",
|
||||||
"common.all": "Tudo",
|
"common.all": "Tudo",
|
||||||
"common.back": "Voltar",
|
"common.back": "Voltar",
|
||||||
"common.cancel": "Cancelar",
|
"common.cancel": "Cancelar",
|
||||||
"common.close": "Fechar",
|
"common.close": "Fechar",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Concluído",
|
"common.completed": "Concluído",
|
||||||
"common.confirm": "Confirmar",
|
"common.confirm": "Confirmar",
|
||||||
"common.copied": "Copiado!",
|
"common.copied": "Copiado!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "A carregar...",
|
"common.loading": "A carregar...",
|
||||||
"common.name": "Nome",
|
"common.name": "Nome",
|
||||||
"common.next": "Seguinte",
|
"common.next": "Seguinte",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "Não",
|
"common.no": "Não",
|
||||||
"common.none": "Nenhum",
|
"common.none": "Nenhum",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pendente",
|
"common.pending": "Pendente",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "A processar",
|
"common.processing": "A processar",
|
||||||
"common.refresh": "Atualizar",
|
"common.refresh": "Atualizar",
|
||||||
"common.reset": "Repor",
|
"common.reset": "Repor",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Guardar",
|
"common.save": "Guardar",
|
||||||
"common.search": "Pesquisar",
|
"common.search": "Pesquisar",
|
||||||
"common.select": "Selecionar",
|
"common.select": "Selecionar",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Tamanho",
|
"common.size": "Tamanho",
|
||||||
"common.status": "Estado",
|
"common.status": "Estado",
|
||||||
"common.success": "Sucesso",
|
"common.success": "Sucesso",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Aviso de cookies",
|
"cookie.notice_label": "Aviso de cookies",
|
||||||
"cookie.policy_link": "Política de cookies",
|
"cookie.policy_link": "Política de cookies",
|
||||||
"cookie.privacy_link": "Aviso de privacidade",
|
"cookie.privacy_link": "Aviso de privacidade",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Integrações ativas",
|
"dashboard.active_integrations": "Integrações ativas",
|
||||||
"dashboard.files_this_month": "Ficheiros este mês",
|
"dashboard.files_this_month": "Ficheiros este mês",
|
||||||
"dashboard.files_today": "Ficheiros hoje",
|
"dashboard.files_today": "Ficheiros hoje",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Painel",
|
"dashboard.title": "Painel",
|
||||||
"dashboard.total_files": "Total de ficheiros",
|
"dashboard.total_files": "Total de ficheiros",
|
||||||
"dashboard.welcome": "Bem-vindo ao DocuElevate",
|
"dashboard.welcome": "Bem-vindo ao DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Proibido",
|
"error.forbidden": "Proibido",
|
||||||
"error.forbidden_message": "Não tem permissão para aceder a esta página.",
|
"error.forbidden_message": "Não tem permissão para aceder a esta página.",
|
||||||
"error.not_found": "Página não encontrada",
|
"error.not_found": "Página não encontrada",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Título do documento",
|
"files.document_title": "Título do documento",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "Tamanho do ficheiro",
|
"files.file_size": "Tamanho do ficheiro",
|
||||||
"files.filename": "Nome do ficheiro",
|
"files.filename": "Nome do ficheiro",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "Nenhum ficheiro encontrado",
|
"files.no_files": "Nenhum ficheiro encontrado",
|
||||||
"files.ocr_status": "Estado OCR",
|
"files.ocr_status": "Estado OCR",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Etiquetas",
|
"files.tags": "Etiquetas",
|
||||||
"files.title": "Ficheiros",
|
"files.title": "Ficheiros",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Carregado",
|
"files.uploaded": "Carregado",
|
||||||
"footer.attributions": "Atribuições",
|
"footer.attributions": "Atribuições",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Primeiros passos",
|
"help.getting_started": "Primeiros passos",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Centro de ajuda",
|
"help.title": "Centro de ajuda",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notificações",
|
"notifications.title": "Notificações",
|
||||||
"notifications.unread_count": "{count} notificações por ler",
|
"notifications.unread_count": "{count} notificações por ler",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Criar pipeline",
|
"pipelines.create": "Criar pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Editar pipeline",
|
"pipelines.edit": "Editar pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Pipelines de processamento",
|
"pipelines.title": "Pipelines de processamento",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "Nenhum resultado encontrado",
|
"search.no_results": "Nenhum resultado encontrado",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Pesquisar por nome, conteúdo, etiquetas...",
|
"search.placeholder": "Pesquisar por nome, conteúdo, etiquetas...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} resultados encontrados",
|
"search.results_count": "{count} resultados encontrados",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Pesquisar documentos",
|
"search.title": "Pesquisar documentos",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Tem a certeza de que pretende repor esta definição?",
|
"settings.reset_confirm": "Tem a certeza de que pretende repor esta definição?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Falha ao guardar definição",
|
"settings.save_error": "Falha ao guardar definição",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Definição guardada com sucesso",
|
"settings.save_success": "Definição guardada com sucesso",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Definições",
|
"settings.title": "Definições",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Arraste ficheiros para aqui ou clique para procurar",
|
"upload.drag_drop": "Arraste ficheiros para aqui ou clique para procurar",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Falha ao carregar",
|
"upload.error": "Falha ao carregar",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Войти",
|
"auth.login": "Войти",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Выйти",
|
"auth.logout": "Выйти",
|
||||||
"auth.my_account": "Мой аккаунт",
|
"auth.my_account": "Мой аккаунт",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Профиль",
|
"auth.profile": "Профиль",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Регистрация",
|
"auth.signup": "Регистрация",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Действия",
|
"common.actions": "Действия",
|
||||||
"common.active": "Активно",
|
"common.active": "Активно",
|
||||||
"common.all": "Все",
|
"common.all": "Все",
|
||||||
"common.back": "Назад",
|
"common.back": "Назад",
|
||||||
"common.cancel": "Отмена",
|
"common.cancel": "Отмена",
|
||||||
"common.close": "Закрыть",
|
"common.close": "Закрыть",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Завершено",
|
"common.completed": "Завершено",
|
||||||
"common.confirm": "Подтвердить",
|
"common.confirm": "Подтвердить",
|
||||||
"common.copied": "Скопировано!",
|
"common.copied": "Скопировано!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Загрузка...",
|
"common.loading": "Загрузка...",
|
||||||
"common.name": "Название",
|
"common.name": "Название",
|
||||||
"common.next": "Далее",
|
"common.next": "Далее",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "Нет",
|
"common.no": "Нет",
|
||||||
"common.none": "Нет",
|
"common.none": "Нет",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "В ожидании",
|
"common.pending": "В ожидании",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Обработка",
|
"common.processing": "Обработка",
|
||||||
"common.refresh": "Обновить",
|
"common.refresh": "Обновить",
|
||||||
"common.reset": "Сбросить",
|
"common.reset": "Сбросить",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Сохранить",
|
"common.save": "Сохранить",
|
||||||
"common.search": "Поиск",
|
"common.search": "Поиск",
|
||||||
"common.select": "Выбрать",
|
"common.select": "Выбрать",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Размер",
|
"common.size": "Размер",
|
||||||
"common.status": "Статус",
|
"common.status": "Статус",
|
||||||
"common.success": "Успешно",
|
"common.success": "Успешно",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Уведомление о файлах cookie",
|
"cookie.notice_label": "Уведомление о файлах cookie",
|
||||||
"cookie.policy_link": "Политика файлов cookie",
|
"cookie.policy_link": "Политика файлов cookie",
|
||||||
"cookie.privacy_link": "Уведомление о конфиденциальности",
|
"cookie.privacy_link": "Уведомление о конфиденциальности",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Активные интеграции",
|
"dashboard.active_integrations": "Активные интеграции",
|
||||||
"dashboard.files_this_month": "Файлы за месяц",
|
"dashboard.files_this_month": "Файлы за месяц",
|
||||||
"dashboard.files_today": "Файлы сегодня",
|
"dashboard.files_today": "Файлы сегодня",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Панель управления",
|
"dashboard.title": "Панель управления",
|
||||||
"dashboard.total_files": "Всего файлов",
|
"dashboard.total_files": "Всего файлов",
|
||||||
"dashboard.welcome": "Добро пожаловать в DocuElevate",
|
"dashboard.welcome": "Добро пожаловать в DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Доступ запрещён",
|
"error.forbidden": "Доступ запрещён",
|
||||||
"error.forbidden_message": "У вас нет прав для доступа к этой странице.",
|
"error.forbidden_message": "У вас нет прав для доступа к этой странице.",
|
||||||
"error.not_found": "Страница не найдена",
|
"error.not_found": "Страница не найдена",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Название документа",
|
"files.document_title": "Название документа",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "Размер файла",
|
"files.file_size": "Размер файла",
|
||||||
"files.filename": "Имя файла",
|
"files.filename": "Имя файла",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "Файлы не найдены",
|
"files.no_files": "Файлы не найдены",
|
||||||
"files.ocr_status": "Статус OCR",
|
"files.ocr_status": "Статус OCR",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Теги",
|
"files.tags": "Теги",
|
||||||
"files.title": "Файлы",
|
"files.title": "Файлы",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Загружено",
|
"files.uploaded": "Загружено",
|
||||||
"footer.attributions": "Атрибуции",
|
"footer.attributions": "Атрибуции",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Начало работы",
|
"help.getting_started": "Начало работы",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Центр помощи",
|
"help.title": "Центр помощи",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Уведомления",
|
"notifications.title": "Уведомления",
|
||||||
"notifications.unread_count": "{count} непрочитанных уведомлений",
|
"notifications.unread_count": "{count} непрочитанных уведомлений",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Создать конвейер",
|
"pipelines.create": "Создать конвейер",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Редактировать конвейер",
|
"pipelines.edit": "Редактировать конвейер",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Конвейеры обработки",
|
"pipelines.title": "Конвейеры обработки",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "Результаты не найдены",
|
"search.no_results": "Результаты не найдены",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Поиск по имени, содержимому, тегам...",
|
"search.placeholder": "Поиск по имени, содержимому, тегам...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "Найдено результатов: {count}",
|
"search.results_count": "Найдено результатов: {count}",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Поиск документов",
|
"search.title": "Поиск документов",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Вы уверены, что хотите сбросить эту настройку?",
|
"settings.reset_confirm": "Вы уверены, что хотите сбросить эту настройку?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Не удалось сохранить настройку",
|
"settings.save_error": "Не удалось сохранить настройку",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Настройка сохранена",
|
"settings.save_success": "Настройка сохранена",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Настройки",
|
"settings.title": "Настройки",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Перетащите файлы сюда или нажмите для выбора",
|
"upload.drag_drop": "Перетащите файлы сюда или нажмите для выбора",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Ошибка загрузки",
|
"upload.error": "Ошибка загрузки",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "Log In",
|
"auth.login": "Log In",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "Log Out",
|
"auth.logout": "Log Out",
|
||||||
"auth.my_account": "My Account",
|
"auth.my_account": "My Account",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "Profile",
|
"auth.profile": "Profile",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "Sign Up",
|
"auth.signup": "Sign Up",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "Actions",
|
"common.actions": "Actions",
|
||||||
"common.active": "Active",
|
"common.active": "Active",
|
||||||
"common.all": "All",
|
"common.all": "All",
|
||||||
"common.back": "Back",
|
"common.back": "Back",
|
||||||
"common.cancel": "Cancel",
|
"common.cancel": "Cancel",
|
||||||
"common.close": "Close",
|
"common.close": "Close",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "Completed",
|
"common.completed": "Completed",
|
||||||
"common.confirm": "Confirm",
|
"common.confirm": "Confirm",
|
||||||
"common.copied": "Copied!",
|
"common.copied": "Copied!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "Loading...",
|
"common.loading": "Loading...",
|
||||||
"common.name": "Name",
|
"common.name": "Name",
|
||||||
"common.next": "Next",
|
"common.next": "Next",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "No",
|
"common.no": "No",
|
||||||
"common.none": "None",
|
"common.none": "None",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "Pending",
|
"common.pending": "Pending",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "Processing",
|
"common.processing": "Processing",
|
||||||
"common.refresh": "Refresh",
|
"common.refresh": "Refresh",
|
||||||
"common.reset": "Reset",
|
"common.reset": "Reset",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "Save",
|
"common.save": "Save",
|
||||||
"common.search": "Search",
|
"common.search": "Search",
|
||||||
"common.select": "Select",
|
"common.select": "Select",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "Size",
|
"common.size": "Size",
|
||||||
"common.status": "Status",
|
"common.status": "Status",
|
||||||
"common.success": "Success",
|
"common.success": "Success",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie notice",
|
"cookie.notice_label": "Cookie notice",
|
||||||
"cookie.policy_link": "Cookie Policy",
|
"cookie.policy_link": "Cookie Policy",
|
||||||
"cookie.privacy_link": "Privacy Notice",
|
"cookie.privacy_link": "Privacy Notice",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "Active Integrations",
|
"dashboard.active_integrations": "Active Integrations",
|
||||||
"dashboard.files_this_month": "Files This Month",
|
"dashboard.files_this_month": "Files This Month",
|
||||||
"dashboard.files_today": "Files Today",
|
"dashboard.files_today": "Files Today",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "Dashboard",
|
"dashboard.title": "Dashboard",
|
||||||
"dashboard.total_files": "Total Files",
|
"dashboard.total_files": "Total Files",
|
||||||
"dashboard.welcome": "Welcome to DocuElevate",
|
"dashboard.welcome": "Welcome to DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "Forbidden",
|
"error.forbidden": "Forbidden",
|
||||||
"error.forbidden_message": "You do not have permission to access this page.",
|
"error.forbidden_message": "You do not have permission to access this page.",
|
||||||
"error.not_found": "Page not found",
|
"error.not_found": "Page not found",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "Document Title",
|
"files.document_title": "Document Title",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "File Size",
|
"files.file_size": "File Size",
|
||||||
"files.filename": "Filename",
|
"files.filename": "Filename",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "No files found",
|
"files.no_files": "No files found",
|
||||||
"files.ocr_status": "OCR Status",
|
"files.ocr_status": "OCR Status",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "Tags",
|
"files.tags": "Tags",
|
||||||
"files.title": "Files",
|
"files.title": "Files",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "Uploaded",
|
"files.uploaded": "Uploaded",
|
||||||
"footer.attributions": "Attributions",
|
"footer.attributions": "Attributions",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "Getting Started",
|
"help.getting_started": "Getting Started",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "Help Center",
|
"help.title": "Help Center",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "Notifications",
|
"notifications.title": "Notifications",
|
||||||
"notifications.unread_count": "{count} unread notifications",
|
"notifications.unread_count": "{count} unread notifications",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "Create Pipeline",
|
"pipelines.create": "Create Pipeline",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "Edit Pipeline",
|
"pipelines.edit": "Edit Pipeline",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "Processing Pipelines",
|
"pipelines.title": "Processing Pipelines",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "No results found",
|
"search.no_results": "No results found",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "Search by filename, content, tags...",
|
"search.placeholder": "Search by filename, content, tags...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "{count} results found",
|
"search.results_count": "{count} results found",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "Search Documents",
|
"search.title": "Search Documents",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
"settings.reset_confirm": "Are you sure you want to reset this setting?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "Failed to save setting",
|
"settings.save_error": "Failed to save setting",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "Setting saved successfully",
|
"settings.save_success": "Setting saved successfully",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "Drag & drop files here or click to browse",
|
"upload.drag_drop": "Drag & drop files here or click to browse",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "Upload failed",
|
"upload.error": "Upload failed",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -1,25 +1,196 @@
|
|||||||
{
|
{
|
||||||
|
"about.creator_heading": "Meet the Creator",
|
||||||
|
"about.creator_name": "Christian Krakau-Louis",
|
||||||
|
"about.creator_pre": "DocuElevate is passionately developed by",
|
||||||
|
"about.features_admin_api": "Powerful REST API for programmatic access",
|
||||||
|
"about.features_admin_config": "Highly configurable via environment variables",
|
||||||
|
"about.features_admin_docker": "Docker-ready for easy deployment and scaling",
|
||||||
|
"about.features_admin_heading": "Administration",
|
||||||
|
"about.features_admin_oauth2": "OAuth2 authentication support with Authentik",
|
||||||
|
"about.features_automation_background": "Background processing with Redis and Celery",
|
||||||
|
"about.features_automation_gmail": "Gmail and generic email account integration",
|
||||||
|
"about.features_automation_heading": "Automation",
|
||||||
|
"about.features_automation_imap": "IMAP inbox polling from multiple sources",
|
||||||
|
"about.features_automation_ingestion": "Automated document ingestion from various inputs",
|
||||||
|
"about.features_heading": "Key Features",
|
||||||
|
"about.features_integration_cloud": "Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3",
|
||||||
|
"about.features_integration_heading": "Integration & Storage",
|
||||||
|
"about.features_integration_multi_dest": "Multi-destination support (store documents in multiple locations)",
|
||||||
|
"about.features_integration_protocols": "Transfer protocols: FTP, SFTP, Email forwarding",
|
||||||
|
"about.features_integration_selfhosted": "Self-hosted options: Nextcloud, Paperless NGX, WebDAV",
|
||||||
|
"about.features_processing_classification": "Intelligent document classification and date extraction",
|
||||||
|
"about.features_processing_heading": "Document Processing",
|
||||||
|
"about.features_processing_metadata": "Automated metadata extraction using a pluggable AI provider",
|
||||||
|
"about.features_processing_ocr": "OCR powered by Azure Document Intelligence",
|
||||||
|
"about.features_processing_pdf": "PDF conversion for various file formats via Gotenberg",
|
||||||
|
"about.features_processing_upload": "Simple and secure file uploads with drag & drop support",
|
||||||
|
"about.github_logo_alt": "GitHub Logo",
|
||||||
|
"about.heading": "About DocuElevate",
|
||||||
|
"about.intro_post": " – your modern, intelligent solution for document processing! We’ve built DocuElevate to completely transform the way you handle your documents – from upload to extraction, from processing to storage.",
|
||||||
|
"about.intro_pre": "Welcome to ",
|
||||||
|
"about.involved_description": "Want to dive into the code, contribute ideas, or learn more about DocuElevate?",
|
||||||
|
"about.involved_docs": "Read the Documentation",
|
||||||
|
"about.involved_github": "View DocuElevate on GitHub",
|
||||||
|
"about.involved_heading": "Get Involved",
|
||||||
|
"about.involved_website": "Visit DocuElevate Website",
|
||||||
|
"about.legal_description": "We care about your privacy and data security. Please review our:",
|
||||||
|
"about.legal_heading": "Privacy & Legal",
|
||||||
|
"about.legal_license": "License Information",
|
||||||
|
"about.legal_privacy": "Privacy Notice",
|
||||||
|
"about.page_title": "About DocuElevate",
|
||||||
|
"about.story_heading": "Our Story",
|
||||||
|
"about.story_p1": "DocuElevate was created with one goal in mind: to simplify and streamline document management for everyone, whether you’re a small startup or a large enterprise.",
|
||||||
|
"about.story_p2": "We harness the power of pluggable AI providers (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Portkey, and more) for metadata extraction and text refinement, integrate seamlessly with Dropbox, Nextcloud, and Paperless NGX for storage and indexing, leverage Azure Document Intelligence for OCR, and even use Gotenberg for file-to-PDF conversions.",
|
||||||
|
"api_tokens.col_created": "Created",
|
||||||
|
"api_tokens.col_last_ip": "Last IP",
|
||||||
|
"api_tokens.col_last_used": "Last Used",
|
||||||
|
"api_tokens.col_name": "Name",
|
||||||
|
"api_tokens.col_prefix": "Token Prefix",
|
||||||
|
"api_tokens.copy_to_clipboard": "Copy token to clipboard",
|
||||||
|
"api_tokens.copy_upload_example": "Copy upload example to clipboard",
|
||||||
|
"api_tokens.copy_warning_1": "Copy this token now — it will",
|
||||||
|
"api_tokens.copy_warning_2": "not be shown again",
|
||||||
|
"api_tokens.create_heading": "Create New Token",
|
||||||
|
"api_tokens.create_token": "Create Token",
|
||||||
|
"api_tokens.creating": "Creating…",
|
||||||
|
"api_tokens.heading": "API Tokens",
|
||||||
|
"api_tokens.intro": "Create personal API tokens to interact with the DocuElevate API programmatically. Use tokens for webhook uploads, CI/CD pipelines, or any script that needs to upload or retrieve documents.",
|
||||||
|
"api_tokens.loading_tokens": "Loading tokens…",
|
||||||
|
"api_tokens.never": "Never",
|
||||||
|
"api_tokens.no_tokens_heading": "No API tokens yet",
|
||||||
|
"api_tokens.no_tokens_help": "Create your first token above to get started.",
|
||||||
|
"api_tokens.page_title": "API Tokens – DocuElevate",
|
||||||
|
"api_tokens.revoke": "Revoke",
|
||||||
|
"api_tokens.revoke_prefix": "Revoke token",
|
||||||
|
"api_tokens.status_active": "Active",
|
||||||
|
"api_tokens.status_revoked": "Revoked",
|
||||||
|
"api_tokens.table_aria": "API Tokens",
|
||||||
|
"api_tokens.token_created": "Token created successfully!",
|
||||||
|
"api_tokens.token_name_label": "Token name",
|
||||||
|
"api_tokens.token_name_placeholder": "e.g. CI Pipeline, Webhook Upload, My Script",
|
||||||
|
"api_tokens.usage_heading": "Usage Example",
|
||||||
|
"api_tokens.usage_intro_post": "header with any API request:",
|
||||||
|
"api_tokens.usage_intro_pre": "Use your API token in the",
|
||||||
|
"api_tokens.your_tokens": "Your Tokens",
|
||||||
"app.name": "DocuElevate",
|
"app.name": "DocuElevate",
|
||||||
|
"audit.col_ip": "IP",
|
||||||
|
"audit.col_resource": "Resource",
|
||||||
|
"audit.col_timestamp": "Timestamp",
|
||||||
|
"audit.critical": "Critical",
|
||||||
|
"audit.filter_action": "Action",
|
||||||
|
"audit.filter_all_actions": "All actions",
|
||||||
|
"audit.filter_all_users": "All users",
|
||||||
|
"audit.filter_resource_placeholder": "e.g. document, user",
|
||||||
|
"audit.filter_resource_type": "Resource Type",
|
||||||
|
"audit.filter_severity": "Severity",
|
||||||
|
"audit.filter_user": "User",
|
||||||
|
"audit.filters_section_label": "Audit log filters",
|
||||||
|
"audit.next": "Next",
|
||||||
|
"audit.next_label": "Next page",
|
||||||
|
"audit.no_events": "No audit events recorded yet.",
|
||||||
|
"audit.no_events_hint": "Significant actions (logins, document operations, settings changes) will appear here.",
|
||||||
|
"audit.page_title": "Audit Logs - DocuElevate",
|
||||||
|
"audit.pagination_label": "Audit log pagination",
|
||||||
|
"audit.prev": "Prev",
|
||||||
|
"audit.prev_label": "Previous page",
|
||||||
|
"audit.refresh_label": "Refresh audit logs",
|
||||||
|
"audit.siem_disabled_title": "SIEM forwarding is disabled",
|
||||||
|
"audit.siem_enabled_title": "Events are being forwarded to ",
|
||||||
|
"audit.siem_off": "SIEM: Off",
|
||||||
|
"audit.subtitle": "Comprehensive, append-only record of all significant actions.",
|
||||||
|
"audit.table_label": "Audit log events",
|
||||||
|
"audit.title": "Audit Logs",
|
||||||
"auth.confirm_password": "Confirm Password",
|
"auth.confirm_password": "Confirm Password",
|
||||||
|
"auth.create_account": "Create account",
|
||||||
"auth.display_name_label": "Display Name",
|
"auth.display_name_label": "Display Name",
|
||||||
"auth.email_label": "Email",
|
"auth.email_label": "Email",
|
||||||
"auth.forgot_password": "Forgot Password?",
|
"auth.forgot_password": "Forgot Password?",
|
||||||
|
"auth.forgot_username": "Forgot username?",
|
||||||
"auth.login": "登录",
|
"auth.login": "登录",
|
||||||
"auth.login_title": "Log In",
|
"auth.login_title": "Log In",
|
||||||
|
"auth.logo_alt": "DocuElevate Logo",
|
||||||
"auth.logout": "退出",
|
"auth.logout": "退出",
|
||||||
"auth.my_account": "我的账户",
|
"auth.my_account": "我的账户",
|
||||||
|
"auth.no_account": "Don't have an account?",
|
||||||
|
"auth.or_continue_with": "Or continue with",
|
||||||
"auth.password_label": "Password",
|
"auth.password_label": "Password",
|
||||||
"auth.profile": "个人资料",
|
"auth.profile": "个人资料",
|
||||||
"auth.remember_me": "Remember me",
|
"auth.remember_me": "Remember me",
|
||||||
|
"auth.return_home": "Return to Home",
|
||||||
|
"auth.sign_in": "Sign in",
|
||||||
|
"auth.sign_in_sso": "Sign in with SSO",
|
||||||
|
"auth.sign_in_with": "Sign in with",
|
||||||
|
"auth.sign_in_with_username": "Sign in with username",
|
||||||
"auth.signup": "注册",
|
"auth.signup": "注册",
|
||||||
"auth.signup_title": "Sign Up",
|
"auth.signup_title": "Sign Up",
|
||||||
"auth.username_label": "Username",
|
"auth.username_label": "Username",
|
||||||
|
"auth.username_or_email": "Username or Email",
|
||||||
|
"auth.verify_email_back_sign_in": "Back to sign in",
|
||||||
|
"auth.verify_email_expiry": "The link expires in 24 hours. If you don’t see the email, check your spam folder.",
|
||||||
|
"auth.verify_email_heading": "Check your inbox",
|
||||||
|
"auth.verify_email_message": "We’ve sent you a verification email. Please click the link in the email to activate your account.",
|
||||||
|
"auth.verify_email_page_title": "DocuElevate - Verify Your Email",
|
||||||
|
"auth.verify_email_resend_aria_label": "Email address for resend",
|
||||||
|
"auth.verify_email_resend_button": "Resend verification email",
|
||||||
|
"auth.verify_email_resend_label": "Email address",
|
||||||
|
"auth.verify_email_resend_placeholder": "Enter your email address",
|
||||||
|
"auth.verify_email_resend_prompt": "Didn’t receive it?",
|
||||||
|
"backup.archives_heading": "Backup Archives",
|
||||||
|
"backup.backup_now": "Backup Now",
|
||||||
|
"backup.clean_up": "Clean Up",
|
||||||
|
"backup.cleanup_title": "Run retention cleanup now",
|
||||||
|
"backup.col_created": "Created",
|
||||||
|
"backup.col_filename": "Filename",
|
||||||
|
"backup.col_size": "Size",
|
||||||
|
"backup.col_storage": "Storage",
|
||||||
|
"backup.col_type": "Type",
|
||||||
|
"backup.config_auto_backup": "Auto-backup",
|
||||||
|
"backup.config_remote_dest": "Remote destination",
|
||||||
|
"backup.config_retention": "Retention",
|
||||||
|
"backup.config_total_size": "Total local size",
|
||||||
|
"backup.confirm_btn": "Confirm",
|
||||||
|
"backup.confirm_title": "Confirm action",
|
||||||
|
"backup.heading": "Backup Management",
|
||||||
|
"backup.local_only": "Local only",
|
||||||
|
"backup.no_backups": "No backups yet.",
|
||||||
|
"backup.no_backups_hint": "Click Backup Now to create your first backup.",
|
||||||
|
"backup.page_title": "Backup Management",
|
||||||
|
"backup.records_label": "records",
|
||||||
|
"backup.restore_btn": "Restore",
|
||||||
|
"backup.restore_desc_mid": "backup archive to restore the database.",
|
||||||
|
"backup.restore_desc_pre": "Upload a",
|
||||||
|
"backup.restore_desc_warning": "This will overwrite all current data.",
|
||||||
|
"backup.restore_file_label": "Backup archive (.db.gz)",
|
||||||
|
"backup.restore_heading": "Restore from File",
|
||||||
|
"backup.restoring": "Restoring…",
|
||||||
|
"backup.retention_daily_detail": "– kept for 3 weeks",
|
||||||
|
"backup.retention_heading": "Retention policy",
|
||||||
|
"backup.retention_hourly_detail": "– kept for 4 days",
|
||||||
|
"backup.retention_note": "Backups beyond these limits are automatically pruned after each new backup is created.",
|
||||||
|
"backup.retention_weekly_detail": "– kept for ~3 months",
|
||||||
|
"backup.snapshots": "snapshots",
|
||||||
|
"backup.status_ok": "ok",
|
||||||
|
"backup.storage_local": "local",
|
||||||
|
"backup.subtitle": "Database backups are created automatically: hourly (4 days), daily (3 weeks), weekly (13 weeks).",
|
||||||
|
"backup.table_aria": "Backup archives",
|
||||||
|
"backup.trigger_daily": "Backup Now (Daily)",
|
||||||
|
"backup.trigger_hourly": "Backup Now (Hourly)",
|
||||||
|
"backup.trigger_weekly": "Backup Now (Weekly)",
|
||||||
|
"backup.type_daily": "Daily",
|
||||||
|
"backup.type_hourly": "Hourly",
|
||||||
|
"backup.type_weekly": "Weekly",
|
||||||
|
"billing.go_to_dashboard": "Go to dashboard",
|
||||||
|
"billing.manage_subscription": "Manage subscription",
|
||||||
|
"billing.success_heading": "You're all set!",
|
||||||
|
"billing.success_message": "Your subscription has been activated. Thank you for choosing DocuElevate!",
|
||||||
|
"billing.success_page_title": "DocuElevate - Subscription Activated",
|
||||||
"common.actions": "操作",
|
"common.actions": "操作",
|
||||||
"common.active": "活跃",
|
"common.active": "活跃",
|
||||||
"common.all": "全部",
|
"common.all": "全部",
|
||||||
"common.back": "返回",
|
"common.back": "返回",
|
||||||
"common.cancel": "取消",
|
"common.cancel": "取消",
|
||||||
"common.close": "关闭",
|
"common.close": "关闭",
|
||||||
|
"common.col_pending": "Pending",
|
||||||
"common.completed": "已完成",
|
"common.completed": "已完成",
|
||||||
"common.confirm": "确认",
|
"common.confirm": "确认",
|
||||||
"common.copied": "已复制!",
|
"common.copied": "已复制!",
|
||||||
@@ -41,9 +212,12 @@
|
|||||||
"common.loading": "加载中...",
|
"common.loading": "加载中...",
|
||||||
"common.name": "名称",
|
"common.name": "名称",
|
||||||
"common.next": "下一步",
|
"common.next": "下一步",
|
||||||
|
"common.next_page": "Next page",
|
||||||
"common.no": "否",
|
"common.no": "否",
|
||||||
"common.none": "无",
|
"common.none": "无",
|
||||||
|
"common.page": "Page",
|
||||||
"common.pending": "待处理",
|
"common.pending": "待处理",
|
||||||
|
"common.prev_page": "Previous page",
|
||||||
"common.processing": "处理中",
|
"common.processing": "处理中",
|
||||||
"common.refresh": "刷新",
|
"common.refresh": "刷新",
|
||||||
"common.reset": "重置",
|
"common.reset": "重置",
|
||||||
@@ -51,6 +225,7 @@
|
|||||||
"common.save": "保存",
|
"common.save": "保存",
|
||||||
"common.search": "搜索",
|
"common.search": "搜索",
|
||||||
"common.select": "选择",
|
"common.select": "选择",
|
||||||
|
"common.select_placeholder": "— select —",
|
||||||
"common.size": "大小",
|
"common.size": "大小",
|
||||||
"common.status": "状态",
|
"common.status": "状态",
|
||||||
"common.success": "成功",
|
"common.success": "成功",
|
||||||
@@ -65,6 +240,29 @@
|
|||||||
"cookie.notice_label": "Cookie 通知",
|
"cookie.notice_label": "Cookie 通知",
|
||||||
"cookie.policy_link": "Cookie 政策",
|
"cookie.policy_link": "Cookie 政策",
|
||||||
"cookie.privacy_link": "隐私声明",
|
"cookie.privacy_link": "隐私声明",
|
||||||
|
"credentials.col_action": "Action",
|
||||||
|
"credentials.col_credential": "Credential",
|
||||||
|
"credentials.col_source": "Source",
|
||||||
|
"credentials.configured": "Configured",
|
||||||
|
"credentials.edit_in_settings": "Edit in Settings",
|
||||||
|
"credentials.legend_db": "Value stored in the database (encrypted at rest; overrides environment variable)",
|
||||||
|
"credentials.legend_env_after": " file",
|
||||||
|
"credentials.legend_env_before": "Value from environment variable or ",
|
||||||
|
"credentials.legend_missing": "Credential not set — integration will not work",
|
||||||
|
"credentials.legend_restart": "Restart required when this credential is rotated",
|
||||||
|
"credentials.legend_title": "Legend",
|
||||||
|
"credentials.manage_settings": "Manage Settings",
|
||||||
|
"credentials.not_configured": "Not Configured",
|
||||||
|
"credentials.page_title": "Credential Audit - DocuElevate",
|
||||||
|
"credentials.raw_json": "Raw JSON (API)",
|
||||||
|
"credentials.restart_title": "Restart required after rotating this credential",
|
||||||
|
"credentials.source_db_title": "Stored in database (encrypted)",
|
||||||
|
"credentials.source_env_title": "From environment variable",
|
||||||
|
"credentials.status_missing": "Missing",
|
||||||
|
"credentials.subtitle": "Overview of all sensitive credentials used by DocuElevate. No secret values are shown here — only whether each credential is configured and where it comes from.",
|
||||||
|
"credentials.table_for": "Credentials for",
|
||||||
|
"credentials.title": "Credential Audit",
|
||||||
|
"credentials.total_credentials": "Total Credentials",
|
||||||
"dashboard.active_integrations": "活跃集成",
|
"dashboard.active_integrations": "活跃集成",
|
||||||
"dashboard.files_this_month": "本月文件",
|
"dashboard.files_this_month": "本月文件",
|
||||||
"dashboard.files_today": "今日文件",
|
"dashboard.files_today": "今日文件",
|
||||||
@@ -75,14 +273,43 @@
|
|||||||
"dashboard.title": "仪表盘",
|
"dashboard.title": "仪表盘",
|
||||||
"dashboard.total_files": "文件总数",
|
"dashboard.total_files": "文件总数",
|
||||||
"dashboard.welcome": "欢迎使用 DocuElevate",
|
"dashboard.welcome": "欢迎使用 DocuElevate",
|
||||||
|
"duplicates.file_id_label": "File ID",
|
||||||
|
"duplicates.file_id_placeholder": "e.g. 42",
|
||||||
|
"duplicates.find_btn": "Find",
|
||||||
|
"duplicates.found_files": "duplicate file(s) total.",
|
||||||
|
"duplicates.found_groups": "duplicate group(s) with",
|
||||||
|
"duplicates.found_prefix": "Found",
|
||||||
|
"duplicates.group_aria": "Duplicate group",
|
||||||
|
"duplicates.heading": "Duplicate Documents",
|
||||||
|
"duplicates.how_it_works_heading": "How near-duplicate detection works",
|
||||||
|
"duplicates.max_results_label": "Max results",
|
||||||
|
"duplicates.near_dup_desc": "Select a document to check whether any other files contain the same (or very similar) content — even if they were scanned at different times and have different SHA-256 hashes.",
|
||||||
|
"duplicates.near_dup_heading": "Find Near-Duplicates for a Document",
|
||||||
|
"duplicates.no_exact_heading": "No exact duplicates found",
|
||||||
|
"duplicates.page_title": "Duplicate Documents - DocuElevate",
|
||||||
|
"duplicates.pagination_aria": "Pagination",
|
||||||
|
"duplicates.role_duplicate": "Duplicate",
|
||||||
|
"duplicates.role_original": "Original",
|
||||||
|
"duplicates.tab_exact": "Exact Duplicates",
|
||||||
|
"duplicates.tab_near": "Near-Duplicate Finder",
|
||||||
|
"duplicates.tabs_aria": "Duplicate detection tabs",
|
||||||
|
"duplicates.threshold_label": "Similarity threshold",
|
||||||
|
"duplicates.view_dup_aria": "View duplicate file",
|
||||||
|
"duplicates.view_original_aria": "View original file",
|
||||||
"error.404_code": "404",
|
"error.404_code": "404",
|
||||||
"error.404_heading": "Oops, we couldn’t find that page!",
|
"error.404_heading": "Oops, we couldn’t find that page!",
|
||||||
"error.404_home": "Return Home",
|
"error.404_home": "Return Home",
|
||||||
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
"error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.",
|
||||||
|
"error.404_title": "404 - Not Found",
|
||||||
"error.500_code": "500",
|
"error.500_code": "500",
|
||||||
|
"error.500_debug_info": "Show Debug Info",
|
||||||
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
"error.500_description": "Our servers encountered a mishap and need a moment.",
|
||||||
"error.500_heading": "Oops! Something Went Wrong.",
|
"error.500_heading": "Oops! Something Went Wrong.",
|
||||||
"error.500_home": "Go Home",
|
"error.500_home": "Go Home",
|
||||||
|
"error.500_img_alt": "Illustration of a server error",
|
||||||
|
"error.500_message1": "Our servers encountered a mishap and need a moment. Maybe the hamsters spilled their coffee?",
|
||||||
|
"error.500_message2": "We're already on it—sorting files, rebooting servers, and recalibrating flux capacitors.",
|
||||||
|
"error.500_title": "Server Error - DocuElevate",
|
||||||
"error.forbidden": "禁止访问",
|
"error.forbidden": "禁止访问",
|
||||||
"error.forbidden_message": "您没有权限访问此页面。",
|
"error.forbidden_message": "您没有权限访问此页面。",
|
||||||
"error.not_found": "页面未找到",
|
"error.not_found": "页面未找到",
|
||||||
@@ -106,43 +333,59 @@
|
|||||||
"files.document_title": "文档标题",
|
"files.document_title": "文档标题",
|
||||||
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
"files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more",
|
||||||
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
"files.drop_overlay_title": "Drop files or folders anywhere to upload",
|
||||||
|
"files.error_hint": "This might be due to a configuration or import issue. Please check the server logs.",
|
||||||
"files.file_size": "文件大小",
|
"files.file_size": "文件大小",
|
||||||
"files.filename": "文件名",
|
"files.filename": "文件名",
|
||||||
|
"files.files_selected": "files selected",
|
||||||
"files.filter_all_providers": "All Providers",
|
"files.filter_all_providers": "All Providers",
|
||||||
"files.filter_all_statuses": "All Statuses",
|
"files.filter_all_statuses": "All Statuses",
|
||||||
"files.filter_all_types": "All Types",
|
"files.filter_all_types": "All Types",
|
||||||
"files.filter_apply": "Apply Filters",
|
"files.filter_apply": "Apply Filters",
|
||||||
"files.filter_clear": "Clear",
|
"files.filter_clear": "Clear",
|
||||||
"files.filter_date_from": "Date From",
|
"files.filter_date_from": "Date From",
|
||||||
|
"files.filter_date_from_aria": "Filter from date",
|
||||||
"files.filter_date_to": "Date To",
|
"files.filter_date_to": "Date To",
|
||||||
|
"files.filter_date_to_aria": "Filter to date",
|
||||||
|
"files.filter_form_aria": "Filter files",
|
||||||
"files.filter_mime_type": "MIME Type",
|
"files.filter_mime_type": "MIME Type",
|
||||||
"files.filter_ocr_all": "All Files",
|
"files.filter_ocr_all": "All Files",
|
||||||
"files.filter_ocr_good": "Good quality",
|
"files.filter_ocr_good": "Good quality",
|
||||||
"files.filter_ocr_poor": "Poor quality",
|
"files.filter_ocr_poor": "Poor quality",
|
||||||
"files.filter_ocr_quality": "OCR Quality",
|
"files.filter_ocr_quality": "OCR Quality",
|
||||||
|
"files.filter_ocr_quality_aria": "Filter by OCR quality score",
|
||||||
"files.filter_ocr_unchecked": "Not yet assessed",
|
"files.filter_ocr_unchecked": "Not yet assessed",
|
||||||
|
"files.filter_search_label": "Search Filename",
|
||||||
"files.filter_search_placeholder": "Enter filename...",
|
"files.filter_search_placeholder": "Enter filename...",
|
||||||
"files.filter_storage_provider": "Storage Provider",
|
"files.filter_storage_provider": "Storage Provider",
|
||||||
|
"files.filter_tags_aria": "Filter by tags (comma-separated)",
|
||||||
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
"files.filter_tags_placeholder": "e.g. invoice,amazon",
|
||||||
"files.fulltext_search_label": "Full-Text Search",
|
"files.fulltext_search_label": "Full-Text Search",
|
||||||
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
"files.fulltext_search_placeholder": "Search document content, sender, tags, type...",
|
||||||
"files.no_files": "未找到文件",
|
"files.no_files": "未找到文件",
|
||||||
"files.ocr_status": "OCR 状态",
|
"files.ocr_status": "OCR 状态",
|
||||||
"files.page_title": "File Records",
|
"files.page_title": "File Records",
|
||||||
|
"files.pagination_files": "files",
|
||||||
"files.pagination_first": "First",
|
"files.pagination_first": "First",
|
||||||
"files.pagination_last": "Last",
|
"files.pagination_last": "Last",
|
||||||
|
"files.pagination_nav_aria": "File list pagination",
|
||||||
"files.pagination_next": "Next",
|
"files.pagination_next": "Next",
|
||||||
|
"files.pagination_of": "of",
|
||||||
"files.pagination_previous": "Previous",
|
"files.pagination_previous": "Previous",
|
||||||
|
"files.pagination_showing": "Showing",
|
||||||
"files.preview_modal_close": "Close preview",
|
"files.preview_modal_close": "Close preview",
|
||||||
"files.preview_modal_title": "Preview",
|
"files.preview_modal_title": "Preview",
|
||||||
|
"files.queue_banner_items": "item(s) are currently queued or being processed. Files will appear here once processing completes.",
|
||||||
"files.queue_banner_link": "View Queue",
|
"files.queue_banner_link": "View Queue",
|
||||||
"files.saved_searches_empty": "No saved searches yet",
|
"files.saved_searches_empty": "No saved searches yet",
|
||||||
"files.saved_searches_error": "Could not load saved searches",
|
"files.saved_searches_error": "Could not load saved searches",
|
||||||
"files.saved_searches_label": "Saved Searches",
|
"files.saved_searches_label": "Saved Searches",
|
||||||
"files.saved_searches_save": "Save Current",
|
"files.saved_searches_save": "Save Current",
|
||||||
|
"files.saved_searches_save_aria": "Save current filters as a saved search",
|
||||||
"files.search_results_empty": "No results found.",
|
"files.search_results_empty": "No results found.",
|
||||||
"files.search_results_title": "Search Results",
|
"files.search_results_title": "Search Results",
|
||||||
|
"files.status_duplicate": "Duplicate",
|
||||||
"files.table_actions": "Actions",
|
"files.table_actions": "Actions",
|
||||||
|
"files.table_aria": "File records",
|
||||||
"files.table_created_at": "Created At",
|
"files.table_created_at": "Created At",
|
||||||
"files.table_empty": "No files found",
|
"files.table_empty": "No files found",
|
||||||
"files.table_id": "ID",
|
"files.table_id": "ID",
|
||||||
@@ -151,6 +394,8 @@
|
|||||||
"files.table_select_all": "Select all files on this page",
|
"files.table_select_all": "Select all files on this page",
|
||||||
"files.tags": "标签",
|
"files.tags": "标签",
|
||||||
"files.title": "文件",
|
"files.title": "文件",
|
||||||
|
"files.upload_modal_aria": "Upload progress",
|
||||||
|
"files.upload_modal_close": "Close upload progress",
|
||||||
"files.upload_modal_header": "Uploading Files",
|
"files.upload_modal_header": "Uploading Files",
|
||||||
"files.uploaded": "已上传",
|
"files.uploaded": "已上传",
|
||||||
"footer.attributions": "致谢",
|
"footer.attributions": "致谢",
|
||||||
@@ -197,6 +442,7 @@
|
|||||||
"help.getting_started": "入门指南",
|
"help.getting_started": "入门指南",
|
||||||
"help.heading": "Help Center",
|
"help.heading": "Help Center",
|
||||||
"help.page_title": "Help Center",
|
"help.page_title": "Help Center",
|
||||||
|
"help.privacy_notice": "Privacy Notice",
|
||||||
"help.quickstart_heading": "Quick Start",
|
"help.quickstart_heading": "Quick Start",
|
||||||
"help.quickstart_storage": "Connect Storage",
|
"help.quickstart_storage": "Connect Storage",
|
||||||
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
"help.quickstart_storage_desc": "Head to Settings and link your cloud accounts. Processed documents are automatically routed to every destination you configure.",
|
||||||
@@ -218,6 +464,8 @@
|
|||||||
"help.support_admin_message": "Contact your administrator for support information.",
|
"help.support_admin_message": "Contact your administrator for support information.",
|
||||||
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
"help.support_description": "Can’t find what you’re looking for? Our support team is here to help.",
|
||||||
"help.support_heading": "Contact Support",
|
"help.support_heading": "Contact Support",
|
||||||
|
"help.support_ticket_button": "Submit a Ticket",
|
||||||
|
"help.support_ticket_heading": "Open a Support Ticket",
|
||||||
"help.title": "帮助中心",
|
"help.title": "帮助中心",
|
||||||
"help.workflows_creating": "Creating a Pipeline",
|
"help.workflows_creating": "Creating a Pipeline",
|
||||||
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
"help.workflows_definition": "A Pipeline is a series of processing steps that run automatically whenever a document is ingested. Each step can transform, enrich, or route the document.",
|
||||||
@@ -234,6 +482,8 @@
|
|||||||
"help.workflows_typical_steps": "Typical Steps",
|
"help.workflows_typical_steps": "Typical Steps",
|
||||||
"help.workflows_what_is": "What is a Pipeline?",
|
"help.workflows_what_is": "What is a Pipeline?",
|
||||||
"index.badge_intelligent": "Intelligent Document Processing",
|
"index.badge_intelligent": "Intelligent Document Processing",
|
||||||
|
"index.button_browse_files": "Browse Files",
|
||||||
|
"index.button_upload": "Upload",
|
||||||
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
"index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud",
|
||||||
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
"index.capabilities_ingestion": "Email & URL-based document ingestion",
|
||||||
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
"index.capabilities_ocr": "OCR & metadata extraction with AI",
|
||||||
@@ -245,6 +495,7 @@
|
|||||||
"index.cta_pricing": "See pricing",
|
"index.cta_pricing": "See pricing",
|
||||||
"index.cta_signup": "Create a free account",
|
"index.cta_signup": "Create a free account",
|
||||||
"index.dashboard_subtitle": "Intelligent document processing & management",
|
"index.dashboard_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.dashboard_subtitle_teams": "Intelligent document processing & management — built for teams",
|
||||||
"index.feature_ai": "AI Metadata Extraction",
|
"index.feature_ai": "AI Metadata Extraction",
|
||||||
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
"index.feature_ai_desc": "OpenAI, Claude, Gemini, and other pluggable AI providers classify documents and pull out key fields like dates, amounts, and subjects.",
|
||||||
"index.feature_cloud": "Multi-Cloud Storage",
|
"index.feature_cloud": "Multi-Cloud Storage",
|
||||||
@@ -282,13 +533,19 @@
|
|||||||
"index.quick_search_desc": "Full-text search across documents",
|
"index.quick_search_desc": "Full-text search across documents",
|
||||||
"index.quick_subscription": "My Subscription",
|
"index.quick_subscription": "My Subscription",
|
||||||
"index.quick_subscription_desc": "View plan & usage details",
|
"index.quick_subscription_desc": "View plan & usage details",
|
||||||
|
"index.quick_system_status": "System Status",
|
||||||
|
"index.quick_system_status_desc": "Check integration health",
|
||||||
"index.quick_upload": "Upload Document",
|
"index.quick_upload": "Upload Document",
|
||||||
"index.quick_upload_desc": "Process a new file",
|
"index.quick_upload_desc": "Process a new file",
|
||||||
|
"index.quick_view_files": "View All Files",
|
||||||
|
"index.quick_view_files_desc": "Browse processed documents",
|
||||||
"index.single_user_heading": "DocuElevate Dashboard",
|
"index.single_user_heading": "DocuElevate Dashboard",
|
||||||
"index.single_user_subtitle": "Intelligent document processing & management",
|
"index.single_user_subtitle": "Intelligent document processing & management",
|
||||||
|
"index.stat_active_integrations": "Active Integrations",
|
||||||
"index.stat_active_users": "Active users",
|
"index.stat_active_users": "Active users",
|
||||||
"index.stat_files_month": "Files this month",
|
"index.stat_files_month": "Files this month",
|
||||||
"index.stat_files_today": "Files today",
|
"index.stat_files_today": "Files today",
|
||||||
|
"index.stat_storage_targets": "Storage Targets",
|
||||||
"index.stat_total_files": "Total files",
|
"index.stat_total_files": "Total files",
|
||||||
"index.tier_plan": "Plan",
|
"index.tier_plan": "Plan",
|
||||||
"index.tier_upgrade": "Upgrade",
|
"index.tier_upgrade": "Upgrade",
|
||||||
@@ -399,20 +656,65 @@
|
|||||||
"notifications.title": "通知",
|
"notifications.title": "通知",
|
||||||
"notifications.unread_count": "{count} 条未读通知",
|
"notifications.unread_count": "{count} 条未读通知",
|
||||||
"pipelines.active_label": "Active",
|
"pipelines.active_label": "Active",
|
||||||
|
"pipelines.add_step_btn": "Add Step",
|
||||||
"pipelines.create": "创建流程",
|
"pipelines.create": "创建流程",
|
||||||
|
"pipelines.custom_label_label": "Custom Label",
|
||||||
"pipelines.default_label": "Default",
|
"pipelines.default_label": "Default",
|
||||||
"pipelines.description_label": "Description",
|
"pipelines.description_label": "Description",
|
||||||
|
"pipelines.description_placeholder": "Optional description",
|
||||||
"pipelines.disabled_label": "Disabled",
|
"pipelines.disabled_label": "Disabled",
|
||||||
"pipelines.edit": "编辑流程",
|
"pipelines.edit": "编辑流程",
|
||||||
"pipelines.empty_state": "No pipelines yet",
|
"pipelines.empty_state": "No pipelines yet",
|
||||||
|
"pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.",
|
||||||
"pipelines.enabled_label": "Enabled",
|
"pipelines.enabled_label": "Enabled",
|
||||||
|
"pipelines.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)",
|
||||||
"pipelines.inactive_label": "Inactive",
|
"pipelines.inactive_label": "Inactive",
|
||||||
|
"pipelines.loading": "Loading pipelines…",
|
||||||
|
"pipelines.name_placeholder": "My pipeline",
|
||||||
|
"pipelines.new_pipeline_btn": "New Pipeline",
|
||||||
|
"pipelines.no_steps": "No steps defined. Add a step to start building your pipeline.",
|
||||||
|
"pipelines.ocr_auto": "Auto (use system default)",
|
||||||
|
"pipelines.ocr_language_hint": "Overrides the global language setting for Tesseract/EasyOCR. Azure and Mistral auto-detect the language.",
|
||||||
|
"pipelines.ocr_language_label": "OCR Language",
|
||||||
|
"pipelines.optional_suffix": "(optional)",
|
||||||
"pipelines.page_title": "Processing Pipelines",
|
"pipelines.page_title": "Processing Pipelines",
|
||||||
"pipelines.set_default": "Set as my default pipeline",
|
"pipelines.set_default": "Set as my default pipeline",
|
||||||
|
"pipelines.step_label_placeholder": "Override the default step name",
|
||||||
|
"pipelines.step_type_label": "Step Type",
|
||||||
|
"pipelines.subtitle_intro": "Define and manage custom document processing workflows.",
|
||||||
|
"pipelines.subtitle_system_post": "badge and are visible to all users.",
|
||||||
|
"pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a",
|
||||||
"pipelines.system_label": "System",
|
"pipelines.system_label": "System",
|
||||||
|
"pipelines.system_pipeline_label": "System pipeline (visible to all users)",
|
||||||
"pipelines.title": "处理流程",
|
"pipelines.title": "处理流程",
|
||||||
|
"queue.active_tasks": "Active Tasks",
|
||||||
|
"queue.auto_refresh_1": "Auto-refreshes every",
|
||||||
|
"queue.auto_refresh_2": "seconds",
|
||||||
|
"queue.col_arguments": "Arguments",
|
||||||
|
"queue.col_current_step": "Current Step",
|
||||||
|
"queue.col_file": "File",
|
||||||
|
"queue.col_files": "Files",
|
||||||
|
"queue.col_queue": "Queue",
|
||||||
|
"queue.col_state": "State",
|
||||||
|
"queue.col_task": "Task",
|
||||||
|
"queue.col_task_id": "Task ID",
|
||||||
|
"queue.files_processing": "Files Processing",
|
||||||
|
"queue.heading": "Queue Monitor",
|
||||||
|
"queue.last_updated": "Last updated:",
|
||||||
|
"queue.loading_stats": "Loading queue statistics…",
|
||||||
|
"queue.no_active_tasks": "No active tasks",
|
||||||
|
"queue.no_data": "No data",
|
||||||
|
"queue.no_files_processing": "No files currently processing",
|
||||||
|
"queue.page_title": "Queue Monitor",
|
||||||
|
"queue.processing_pipeline": "Processing Pipeline",
|
||||||
|
"queue.queued_tasks": "Queued Tasks",
|
||||||
|
"queue.recently_processing": "Recently Processing Files",
|
||||||
|
"queue.redis_queues": "Redis Queues",
|
||||||
|
"queue.subtitle": "Real-time view of the document processing pipeline and Celery task queues.",
|
||||||
|
"queue.workers_online": "Workers Online",
|
||||||
"search.button": "Search",
|
"search.button": "Search",
|
||||||
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
"search.error_message": "Search is temporarily unavailable. Please try again in a moment.",
|
||||||
|
"search.filter_aria_clear": "Clear all filters",
|
||||||
"search.filter_clear_button": "Clear Filters",
|
"search.filter_clear_button": "Clear Filters",
|
||||||
"search.filter_date_from": "Date From",
|
"search.filter_date_from": "Date From",
|
||||||
"search.filter_date_to": "Date To",
|
"search.filter_date_to": "Date To",
|
||||||
@@ -422,6 +724,7 @@
|
|||||||
"search.filter_language_placeholder": "e.g. de",
|
"search.filter_language_placeholder": "e.g. de",
|
||||||
"search.filter_sender": "Sender",
|
"search.filter_sender": "Sender",
|
||||||
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
"search.filter_sender_placeholder": "e.g. ACME Corp",
|
||||||
|
"search.filter_tags": "Tags",
|
||||||
"search.filter_tags_placeholder": "e.g. amazon",
|
"search.filter_tags_placeholder": "e.g. amazon",
|
||||||
"search.filter_text_quality": "Text Quality",
|
"search.filter_text_quality": "Text Quality",
|
||||||
"search.filter_text_quality_all": "All",
|
"search.filter_text_quality_all": "All",
|
||||||
@@ -430,6 +733,7 @@
|
|||||||
"search.filter_text_quality_medium": "Medium",
|
"search.filter_text_quality_medium": "Medium",
|
||||||
"search.filter_text_quality_no_text": "No text",
|
"search.filter_text_quality_no_text": "No text",
|
||||||
"search.heading": "Document Search",
|
"search.heading": "Document Search",
|
||||||
|
"search.input_aria_label": "Search documents",
|
||||||
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
"search.input_placeholder": "Search documents by content, sender, tags, type...",
|
||||||
"search.loading_indicator": "Searching…",
|
"search.loading_indicator": "Searching…",
|
||||||
"search.no_results": "未找到结果",
|
"search.no_results": "未找到结果",
|
||||||
@@ -437,16 +741,129 @@
|
|||||||
"search.placeholder": "按文件名、内容、标签搜索...",
|
"search.placeholder": "按文件名、内容、标签搜索...",
|
||||||
"search.result_empty": "No documents found matching your query.",
|
"search.result_empty": "No documents found matching your query.",
|
||||||
"search.results_count": "找到 {count} 个结果",
|
"search.results_count": "找到 {count} 个结果",
|
||||||
|
"search.saved_aria_save": "Save current search",
|
||||||
"search.saved_button": "Save Current",
|
"search.saved_button": "Save Current",
|
||||||
"search.saved_empty": "No saved searches yet",
|
"search.saved_empty": "No saved searches yet",
|
||||||
"search.saved_error": "Could not load saved searches",
|
"search.saved_error": "Could not load saved searches",
|
||||||
"search.saved_label": "Saved Searches",
|
"search.saved_label": "Saved Searches",
|
||||||
"search.saved_loading": "Loading...",
|
"search.saved_loading": "Loading...",
|
||||||
"search.title": "搜索文档",
|
"search.title": "搜索文档",
|
||||||
|
"settings.audit_log_btn": "Audit Log",
|
||||||
|
"settings.autocomplete_hint": "Type to search known values, or enter any custom value.",
|
||||||
|
"settings.autocomplete_no_matches": "No matches — you can still type a custom value",
|
||||||
|
"settings.autocomplete_placeholder": "Type to search or enter a value…",
|
||||||
|
"settings.boolean_enable_prefix": "Enable",
|
||||||
|
"settings.categories_aria": "Settings categories",
|
||||||
|
"settings.categories_heading": "Categories",
|
||||||
|
"settings.db_wizard_btn": "DB Wizard",
|
||||||
|
"settings.effective_value_label": "Effective value:",
|
||||||
|
"settings.encrypted_suffix": "= encrypted at rest",
|
||||||
|
"settings.encrypted_title": "Value is encrypted at rest in database",
|
||||||
|
"settings.export_btn": "Export",
|
||||||
|
"settings.export_db_only": "DB settings only",
|
||||||
|
"settings.export_full_config": "Full effective config",
|
||||||
|
"settings.jump_to_category": "Jump to category…",
|
||||||
|
"settings.manage_config_prefix": "Manage configuration. Priority:",
|
||||||
|
"settings.model_picker_hint": "Pick from the list or type any model name supported by your provider.",
|
||||||
|
"settings.model_picker_placeholder": "Select a common model or type a custom name…",
|
||||||
|
"settings.no_results_clear": "clear the search",
|
||||||
|
"settings.no_results_heading": "No settings found",
|
||||||
|
"settings.no_results_hint": "Try a different search term or",
|
||||||
|
"settings.page_heading": "Application Settings",
|
||||||
|
"settings.required_label": "(required)",
|
||||||
"settings.reset_confirm": "确定要重置此设置吗?",
|
"settings.reset_confirm": "确定要重置此设置吗?",
|
||||||
|
"settings.restart_required_suffix": "= restart required",
|
||||||
|
"settings.revert_btn": "Remove from DB",
|
||||||
|
"settings.revert_title": "Remove DB override and revert to environment variable or default",
|
||||||
|
"settings.reverting": "Reverting…",
|
||||||
|
"settings.save_all_btn": "Save All Changes",
|
||||||
"settings.save_error": "设置保存失败",
|
"settings.save_error": "设置保存失败",
|
||||||
|
"settings.save_setting_title": "Save this setting",
|
||||||
"settings.save_success": "设置保存成功",
|
"settings.save_success": "设置保存成功",
|
||||||
|
"settings.saving_state": "Saving…",
|
||||||
|
"settings.search_aria_label": "Search settings",
|
||||||
|
"settings.search_clear_aria": "Clear search",
|
||||||
|
"settings.search_placeholder": "Search settings by name, key, or description…",
|
||||||
|
"settings.settings_count_suffix": "settings",
|
||||||
|
"settings.source_db_badge": "DB",
|
||||||
|
"settings.source_default_badge": "DEFAULT",
|
||||||
|
"settings.source_env_badge": "ENV",
|
||||||
"settings.title": "设置",
|
"settings.title": "设置",
|
||||||
|
"settings.toggle_visibility_aria": "Toggle password visibility",
|
||||||
|
"settings.toggle_visibility_title": "Show/hide value",
|
||||||
|
"settings.user_autocomplete_empty": "No matching users found",
|
||||||
|
"settings.user_autocomplete_hint": "Type to search existing users by name, or enter any identifier manually.",
|
||||||
|
"settings.user_autocomplete_placeholder": "Start typing to search users…",
|
||||||
|
"settings.wizard_btn": "Wizard",
|
||||||
|
"shared.col_expiry": "Expiry",
|
||||||
|
"shared.col_file_label": "File / Label",
|
||||||
|
"shared.col_link": "Link",
|
||||||
|
"shared.col_views": "Views",
|
||||||
|
"shared.copy_link_aria": "Copy link to clipboard",
|
||||||
|
"shared.copy_link_title": "Copy link",
|
||||||
|
"shared.create_btn": "Create Link",
|
||||||
|
"shared.create_heading": "Create New Shared Link",
|
||||||
|
"shared.creating": "Creating…",
|
||||||
|
"shared.expiry_12h": "12 hours",
|
||||||
|
"shared.expiry_14d": "14 days",
|
||||||
|
"shared.expiry_1h": "1 hour",
|
||||||
|
"shared.expiry_24h": "24 hours (1 day)",
|
||||||
|
"shared.expiry_30d": "30 days",
|
||||||
|
"shared.expiry_3d": "3 days",
|
||||||
|
"shared.expiry_6h": "6 hours",
|
||||||
|
"shared.expiry_7d": "7 days",
|
||||||
|
"shared.expiry_label": "Expiry",
|
||||||
|
"shared.expiry_never": "Never",
|
||||||
|
"shared.file_id_help_post": "page or in the document detail URL.",
|
||||||
|
"shared.file_id_help_pre": "Find the file ID on the",
|
||||||
|
"shared.file_id_label": "File ID",
|
||||||
|
"shared.file_id_placeholder": "e.g. 42",
|
||||||
|
"shared.files_link": "Files",
|
||||||
|
"shared.heading": "Shared Links",
|
||||||
|
"shared.label_label": "Label",
|
||||||
|
"shared.label_placeholder": "e.g. Shared with Bob",
|
||||||
|
"shared.link_created": "Shared link created!",
|
||||||
|
"shared.link_created_help": "Copy and send this link to the recipient.",
|
||||||
|
"shared.links_count_aria": "number of links",
|
||||||
|
"shared.max_downloads_label": "Max downloads",
|
||||||
|
"shared.no_links": "No shared links yet. Create one above to get started.",
|
||||||
|
"shared.open_in_new_tab": "Open in new tab",
|
||||||
|
"shared.open_link_aria": "Open shared link",
|
||||||
|
"shared.optional": "(optional)",
|
||||||
|
"shared.page_title": "Shared Links – DocuElevate",
|
||||||
|
"shared.password_label": "Password",
|
||||||
|
"shared.password_placeholder": "Leave blank for no password",
|
||||||
|
"shared.password_protected": "Password protected",
|
||||||
|
"shared.refresh_aria": "Refresh shared links list",
|
||||||
|
"shared.revoke_aria_prefix": "Revoke shared link for",
|
||||||
|
"shared.revoke_btn": "Revoke",
|
||||||
|
"shared.status_active": "Active",
|
||||||
|
"shared.status_expired": "Expired",
|
||||||
|
"shared.status_limit_reached": "Limit reached",
|
||||||
|
"shared.status_revoked": "Revoked",
|
||||||
|
"shared.subtitle": "Share documents with anyone via a time-limited or view-limited link. Recipients do not need a DocuElevate account. Links can be password-protected and revoked at any time.",
|
||||||
|
"shared.table_aria": "Shared links",
|
||||||
|
"shared.unlimited_placeholder": "Unlimited",
|
||||||
|
"shared.your_links": "Your Shared Links",
|
||||||
|
"similarity.backfill_auto": "The background task will compute them automatically every 5 minutes, or you can",
|
||||||
|
"similarity.files_missing_text": "file(s) have OCR text but no embedding yet.",
|
||||||
|
"similarity.find_pairs_btn": "Find Pairs",
|
||||||
|
"similarity.heading": "Document Similarity",
|
||||||
|
"similarity.load_error": "Failed to load pairs.",
|
||||||
|
"similarity.min_similarity_label": "Min. similarity",
|
||||||
|
"similarity.no_pairs_detail": "No document pairs exceed the similarity threshold.",
|
||||||
|
"similarity.no_pairs_heading": "No similar pairs found",
|
||||||
|
"similarity.page_title": "Document Similarity - DocuElevate",
|
||||||
|
"similarity.pagination_aria": "Similarity pairs pagination",
|
||||||
|
"similarity.per_page_label": "Per page",
|
||||||
|
"similarity.scanning": "Scanning for similar document pairs…",
|
||||||
|
"similarity.stat_embedding_model": "Embedding Model",
|
||||||
|
"similarity.stat_missing_embedding": "Missing Embedding",
|
||||||
|
"similarity.stat_total_files": "Total Files",
|
||||||
|
"similarity.stat_with_embedding": "With Embedding",
|
||||||
|
"similarity.subtitle": "Pairs of documents with high semantic similarity, ranked by score.",
|
||||||
|
"similarity.trigger_aria": "Trigger embedding computation for all files missing embeddings",
|
||||||
|
"similarity.trigger_now": "trigger it now",
|
||||||
"status.app_version": "App Version",
|
"status.app_version": "App Version",
|
||||||
"status.build_date": "Build Date",
|
"status.build_date": "Build Date",
|
||||||
"status.container_id": "Container ID",
|
"status.container_id": "Container ID",
|
||||||
@@ -463,6 +880,7 @@
|
|||||||
"upload.drag_drop": "将文件拖放到此处或点击浏览",
|
"upload.drag_drop": "将文件拖放到此处或点击浏览",
|
||||||
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
"upload.drop_hint_desktop": "Drag & drop files or folders here, or click to select files.",
|
||||||
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
"upload.drop_hint_mobile": "Tap to select files or use the camera button below.",
|
||||||
|
"upload.drop_zone_aria": "File upload area. Drag and drop files here, or press Enter to browse files.",
|
||||||
"upload.error": "上传失败",
|
"upload.error": "上传失败",
|
||||||
"upload.error_invalid_url": "Invalid URL format",
|
"upload.error_invalid_url": "Invalid URL format",
|
||||||
"upload.error_url_required": "Please enter a URL",
|
"upload.error_url_required": "Please enter a URL",
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ class TestSettingsPageWizardLink:
|
|||||||
template_path = Path(__file__).resolve().parent.parent / "frontend" / "templates" / "settings.html"
|
template_path = Path(__file__).resolve().parent.parent / "frontend" / "templates" / "settings.html"
|
||||||
content = template_path.read_text()
|
content = template_path.read_text()
|
||||||
assert "/database-wizard" in content
|
assert "/database-wizard" in content
|
||||||
assert "DB Wizard" in content
|
assert "settings.db_wizard_btn" in content # i18n key (resolves to "DB Wizard")
|
||||||
|
|
||||||
def test_settings_template_has_help_link_rendering(self):
|
def test_settings_template_has_help_link_rendering(self):
|
||||||
"""Test that the settings template renders help_link metadata."""
|
"""Test that the settings template renders help_link metadata."""
|
||||||
|
|||||||
Reference in New Issue
Block a user