feat(i18n): localize 404, 500, billing_success, about, verify_email_sent templates

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-12 10:25:34 +00:00
parent 8c77982109
commit 6de11e25bf
6 changed files with 136 additions and 79 deletions
+5 -5
View File
@@ -1,16 +1,16 @@
{% extends "base.html" %}
{% block title %}404 - Not Found{% endblock %}
{% block title %}{{ _("error.404_title") }}{% endblock %}
{% block content %}
<div class="flex flex-col items-center justify-center text-center px-4 py-16">
<div class="max-w-xl">
<h1 class="text-7xl font-extrabold text-blue-600 mb-6">404</h1>
<h2 class="text-3xl font-bold text-gray-800 mb-4">Oops, we couldnt find that page!</h2>
<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">{{ _("error.404_heading") }}</h2>
<p class="text-gray-600 mb-8">
It seems DocuElevate has misplaced the document you were looking for. Dont worry weve got your back.
{{ _("error.404_message") }}
</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">
&larr; Return Home
&larr; {{ _("error.404_home") }}
</a>
</div>
</div>
+8 -8
View File
@@ -1,5 +1,5 @@
{% extends "base.html" %}
{% block title %}Server Error - DocuElevate{% endblock %}
{% block title %}{{ _("error.500_title") }}{% endblock %}
{% block content %}
<div class="relative isolate px-6 pt-14 lg:px-8">
@@ -7,27 +7,27 @@
<div class="mx-auto max-w-3xl py-12">
<img
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"
/>
</div>
<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">
Oops! Something Went Wrong.
{{ _("error.500_heading") }}
</p>
<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 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>
{% if exc %}
<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">
Show Debug Info
{{ _("error.500_debug_info") }}
</summary>
<pre class="mt-4 text-sm text-gray-700 overflow-auto">{{ exc }}</pre>
</details>
@@ -35,7 +35,7 @@
<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">
&larr; Go Home
&larr; {{ _("error.500_home") }}
</a>
</div>
</div>
+41 -47
View File
@@ -1,69 +1,63 @@
{% extends "base.html" %}
{% block title %}About DocuElevate{% endblock %}
{% block title %}{{ _("about.page_title") }}{% endblock %}
{% block content %}
<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">
Welcome to <strong>DocuElevate</strong> 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") }}<strong>{{ _("app.name") }}</strong>{{ _("about.intro_post") }}
</p>
<!-- Our Story Section -->
<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">
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_p1") }}
</p>
<p class="text-gray-600">
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.story_p2") }}
</p>
</section>
<!-- Key Features Section - Updated with more comprehensive features -->
<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>
<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">
<li>Simple and secure file uploads with drag & drop support</li>
<li>OCR powered by Azure Document Intelligence</li>
<li>Automated metadata extraction using a pluggable AI provider</li>
<li>PDF conversion for various file formats via Gotenberg</li>
<li>Intelligent document classification and date extraction</li>
<li>{{ _("about.features_processing_upload") }}</li>
<li>{{ _("about.features_processing_ocr") }}</li>
<li>{{ _("about.features_processing_metadata") }}</li>
<li>{{ _("about.features_processing_pdf") }}</li>
<li>{{ _("about.features_processing_classification") }}</li>
</ul>
</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">
<li>Multi-destination support (store documents in multiple locations)</li>
<li>Cloud storage: Dropbox, Google Drive, OneDrive, Amazon S3</li>
<li>Self-hosted options: Nextcloud, Paperless NGX, WebDAV</li>
<li>Transfer protocols: FTP, SFTP, Email forwarding</li>
<li>{{ _("about.features_integration_multi_dest") }}</li>
<li>{{ _("about.features_integration_cloud") }}</li>
<li>{{ _("about.features_integration_selfhosted") }}</li>
<li>{{ _("about.features_integration_protocols") }}</li>
</ul>
</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">
<li>IMAP inbox polling from multiple sources</li>
<li>Gmail and generic email account integration</li>
<li>Automated document ingestion from various inputs</li>
<li>Background processing with Redis and Celery</li>
<li>{{ _("about.features_automation_imap") }}</li>
<li>{{ _("about.features_automation_gmail") }}</li>
<li>{{ _("about.features_automation_ingestion") }}</li>
<li>{{ _("about.features_automation_background") }}</li>
</ul>
</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">
<li>Powerful REST API for programmatic access</li>
<li>OAuth2 authentication support with Authentik</li>
<li>Highly configurable via environment variables</li>
<li>Docker-ready for easy deployment and scaling</li>
<li>{{ _("about.features_admin_api") }}</li>
<li>{{ _("about.features_admin_oauth2") }}</li>
<li>{{ _("about.features_admin_config") }}</li>
<li>{{ _("about.features_admin_docker") }}</li>
</ul>
</div>
</div>
@@ -71,43 +65,43 @@
<!-- Meet the Creator Section -->
<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">
DocuElevate is passionately developed by
<a href="https://www.christianlouis.de" target="_blank" class="text-blue-600 hover:underline">Christian Krakau-Louis</a>.
{{ _("about.creator_pre") }}
<a href="https://www.christianlouis.de" target="_blank" class="text-blue-600 hover:underline">{{ _("about.creator_name") }}</a>.
</p>
</section>
<!-- Privacy & Legal Section -->
<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">
We care about your privacy and data security. Please review our:
{{ _("about.legal_description") }}
</p>
<div class="flex space-x-4">
<a href="/privacy" class="text-blue-600 hover:underline">Privacy Notice</a>
<a href="/license" class="text-blue-600 hover:underline">License Information</a>
<a href="/privacy" class="text-blue-600 hover:underline">{{ _("about.legal_privacy") }}</a>
<a href="/license" class="text-blue-600 hover:underline">{{ _("about.legal_license") }}</a>
</div>
</section>
<!-- Links Section -->
<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">
Want to dive into the code, contribute ideas, or learn more about DocuElevate?
{{ _("about.involved_description") }}
</p>
<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">
<img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="GitHub Logo" class="h-6 w-6" />
<span>View DocuElevate on GitHub</span>
<img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="{{ _('about.github_logo_alt') }}" class="h-6 w-6" />
<span>{{ _("about.involved_github") }}</span>
</a>
<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>
<span>Visit DocuElevate Website</span>
<span>{{ _("about.involved_website") }}</span>
</a>
<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>
<span>Read the Documentation</span>
<span>{{ _("about.involved_docs") }}</span>
</a>
</div>
</section>
+6 -6
View File
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<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 rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
@@ -12,7 +12,7 @@
<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">
<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 class="flex justify-center mb-4">
@@ -21,9 +21,9 @@
</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">
Your subscription has been activated. Thank you for choosing DocuElevate!
{{ _("billing.success_message") }}
</p>
<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"
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 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"
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>
</div>
</main>
+12 -12
View File
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<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 rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
@@ -13,7 +13,7 @@
<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">
<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 class="flex justify-center mb-4">
@@ -22,19 +22,19 @@
</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">
We've sent you a verification email. Please click the link in the email to activate your account.
{{ _("auth.verify_email_message") }}
</p>
<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>
<div
x-data="{ email: '', loading: false, message: '', error: '' }"
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
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
>
<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
type="email" id="resend-email" name="email"
x-model="email"
placeholder="Enter your email address"
placeholder="{{ _('auth.verify_email_resend_placeholder') }}"
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"
aria-label="Email address for resend"
aria-label="{{ _('auth.verify_email_resend_aria_label') }}"
style="min-height:44px;"
>
</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"
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>
<i class="fas fa-spinner fa-spin mr-2" aria-hidden="true"></i>Sending&hellip;
<i class="fas fa-spinner fa-spin mr-2" aria-hidden="true"></i>{{ _("common.loading") }}
</span>
</button>
</form>
@@ -100,7 +100,7 @@
<div class="mt-6 text-center">
<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>
</div>
</main>
+64 -1
View File
@@ -835,5 +835,68 @@
"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 —"
"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! Weve 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 youre 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": "Weve 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 dont see the email, check your spam folder.",
"auth.verify_email_resend_prompt": "Didnt 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"
}